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

Часовой пояс: 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 часа


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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