Текущее время: Вс, июл 20 2025, 04:59

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
 Заголовок сообщения: Как проверить, является ли файл файлом excel в OLE?
СообщениеДобавлено: Чт, май 24 2012, 11:11 
Младший специалист
Младший специалист

Зарегистрирован:
Пн, ноя 07 2011, 11:46
Сообщения: 83
Добрый день!
Возникла такая проблема: работаю с OLE, нужно открывать файл, но только файл excel(пользователь может подавать на открытие любой файл). Создаю объект excel, а дальше всё глухо. Так как проверить?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Как проверить, является ли файл файлом excel в OLE?
СообщениеДобавлено: Чт, май 24 2012, 12:46 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Пт, июл 16 2010, 09:57
Сообщения: 106
Откуда: СПб
Пол: Мужской
Сначала проверяете существование файла в принципе (cl_gui_frontend_services=>file_exist). Потом создаете объект Excel, выполняете Workbooks.Open(ваш файл) и анализируете sy-subrc сразу после этого Open. Если не 0, то полагаем, что файл - не Excel и прерываемся.

P.S. Не до конца я был прав. Дело в том, что sy-subrc для Open будет равно 0 и при попытке открыть, например, текстовые файлы (CSV, TAB), которые Вы, скорее всего, не захотите считать "экселевскими". В этом случае надо продолжить анализ, прочитав свойство FileFormat объекта Workbook. Список возможных возвращаемых значений можно получить из файла справки или по ссылке: http://msdn.microsoft.com/en-us/library ... ormat.aspx . Из общего списка останется отобрать те значения, которые будут являться "настоящими экселевскими" в контексте Вашей задачи.

P.P.S. Подумал, что мне тоже скоро может понадобиться такой функционал, набросал пример:
Code:
TYPE-POOLS: ole2.
DATA:
  xlapp     TYPE ole2_object,
  wbks      TYPE ole2_object,
  wbk       TYPE ole2_object,
  ffmt      TYPE i,
  filename  TYPE string VALUE 'C:\Книга1.xls',
  is_excel.

START-OF-SELECTION.

  CREATE OBJECT xlapp 'Excel.Application'.
  CALL METHOD OF xlapp 'Workbooks' = wbks.
  CALL METHOD OF wbks 'Open' = wbk
    EXPORTING #1 = filename.

  IF sy-subrc <> 0.
    FREE OBJECT: wbk, wbks, xlapp.
    MESSAGE 'Excel не может открыть этот файл.' TYPE 'I'.
    EXIT.
  ELSE.
    PERFORM check_file_format CHANGING is_excel.
    IF is_excel IS INITIAL.
      FREE OBJECT: wbk, wbks, xlapp.
      MESSAGE 'Excel может открыть этот файл, но такой файл нам не нужен.' TYPE 'I'.
      EXIT.
    ELSE.
      SET PROPERTY OF xlapp 'Visible' = 1.
      MESSAGE 'ДА! ТО, ЧТО НАДО!' TYPE 'I'.
    ENDIF.
  ENDIF.

*&---------------------------------------------------------------------*
*&      Form  check_file_format
*&---------------------------------------------------------------------*
FORM check_file_format CHANGING is_excel.
  GET PROPERTY OF wbk 'FileFormat' = ffmt.
  is_excel = 'X'.
  CASE ffmt.
    WHEN 43. " Excel 9795
    WHEN 50. " Excel 12
    WHEN 51. " Workbook default, Open XML Workbook
    WHEN 52. " Open XML Workbook Macro Enabled
    WHEN 53. " Open XML Template Macro Enabled
    WHEN 54. " Open XML Template
    WHEN 56. " Excel 8
    WHEN OTHERS.
      CLEAR is_excel.
  ENDCASE.
ENDFORM.                    "check_file_format

Интересно, что необходимость в проверке по cl_gui_frontend_services=>file_exist вроде как и отпадает, поскольку Workbook.Open и так не пропустит несуществующий файл.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Как проверить, является ли файл файлом excel в OLE?
СообщениеДобавлено: Пн, май 28 2012, 13:53 
Младший специалист
Младший специалист

Зарегистрирован:
Пн, ноя 07 2011, 11:46
Сообщения: 83
Ребята, а может подскажите, где есть вот это соответствие???

WHEN 43. " Excel 9795
WHEN 50. " Excel 12
WHEN 51. " Workbook default, Open XML Workbook
WHEN 52. " Open XML Workbook Macro Enabled
WHEN 53. " Open XML Template Macro Enabled
WHEN 54. " Open XML Template
WHEN 56. " Excel 8


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Как проверить, является ли файл файлом excel в OLE?
СообщениеДобавлено: Пн, май 28 2012, 14:02 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Чт, ноя 11 2004, 16:25
Сообщения: 3109
Пол: Мужской
Hanna_89 написал(а):
Ребята, а может подскажите, где есть вот это соответствие???

WHEN 43. " Excel 9795
WHEN 50. " Excel 12
WHEN 51. " Workbook default, Open XML Workbook
WHEN 52. " Open XML Workbook Macro Enabled
WHEN 53. " Open XML Template Macro Enabled
WHEN 54. " Open XML Template
WHEN 56. " Excel 8

В хелпе Excel.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как проверить, является ли файл файлом excel в OLE?
СообщениеДобавлено: Пн, май 28 2012, 14:31 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Пт, июл 16 2010, 09:57
Сообщения: 106
Откуда: СПб
Пол: Мужской
Hanna_89 написал(а):
Ребята, а может подскажите, где есть вот это соответствие?

Besa написал:
В хелпе Excel.

Да, в хелпе, а также в ссылке, что я привел в своем предыдущем сообщении. Надо только там пролистнуть страницу вниз и увидеть, например, заголовок "Semicolon-separated table of formats" или "xlFileFormat enumerated" или какой-нибудь другой в разделе "Community Content".


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot]


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB