Сначала проверяете существование файла в принципе (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 и так не пропустит несуществующий файл.