Текущее время: Вт, июн 24 2025, 20:43

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 28 ]  На страницу Пред.  1, 2
Автор Сообщение
 Заголовок сообщения: Re: Проблема с преобразованием (XSLT) при выводе в Excel
СообщениеДобавлено: Чт, ноя 26 2015, 17:04 
Младший специалист
Младший специалист

Зарегистрирован:
Вт, июн 26 2007, 09:23
Сообщения: 76
Откуда: Белгород/Москва
Пол: Мужской
Вобщем сделал вот так.
Вроде бы работает.
Теперь осталось понять почему работает.

Code:
  DATA lv_temp_dir TYPE string.
  DATA lv_filename TYPE string.
  DATA lr_xml TYPE REF TO if_ixml.
  DATA lr_document TYPE REF TO if_ixml_document.
  DATA lr_stream_factory TYPE REF TO if_ixml_stream_factory.
  DATA lr_istream TYPE REF TO if_ixml_istream.
  DATA lr_ostream TYPE REF TO if_ixml_ostream.
  DATA lt_data_xml_xls TYPE swxmlcont.
  DATA lo_excel TYPE ole2_object.
  DATA lo_wbook TYPE ole2_object.
  DATA lo_abook TYPE ole2_object.
  DATA lv_rc TYPE char8.
  DATA lv_trans_name TYPE char30.


* Создание XLM
  lr_xml = cl_ixml=>create( ).
  lr_document = lr_xml->create_document( ).
  lr_stream_factory = lr_xml->create_stream_factory( ).
  lr_ostream = lr_stream_factory->create_ostream_itable( table = lt_data_xml_xls[] ).

* Трансформация
  CALL TRANSFORMATION Z11
    SOURCE
      z_HEADER = z_HEADER
      t_ITEMS = pt_basic[]
    RESULT XML lr_ostream.

* Выгрузка на локальную машину
  CLEAR: l_filename.
  CONCATENATE l_dirname 'Z111_' sy-datum '_' sy-uzeit '.xls' INTO l_filename.
  CALL METHOD cl_gui_frontend_services=>gui_download
    EXPORTING
      filename         = l_filename
      filetype         = 'BIN'
    CHANGING
      data_tab         = lt_data_xml_xls[]
    EXCEPTIONS
      file_write_error = 1
      OTHERS           = 99.

* Преобразование
  CREATE OBJECT lo_excel 'Excel.Application'.
  SET PROPERTY OF lo_excel 'Visible' = 0.
  SET PROPERTY OF lo_excel 'DisplayAlerts' = 'False'.
  GET PROPERTY OF lo_excel 'WorkBooks' = lo_wbook.
  CALL METHOD OF
      lo_wbook
      'Open'   = lv_rc
    EXPORTING
      #1       = l_filename.
  GET PROPERTY OF lo_excel 'ActiveWorkBook' = lo_abook.
  CALL METHOD OF
      lo_abook
      'SaveAs' = lv_rc
    EXPORTING
      #1       = l_filename
      #2       = 56.
  CALL METHOD OF
      lo_abook
      'Close'.
  CALL METHOD OF
      lo_excel
      'Quit'.
  CLEAR: lo_excel, lo_wbook.

* Открытие файла
  CONCATENATE '"' l_filename '"' INTO l_filename.
  CALL METHOD cl_gui_frontend_services=>execute
    EXPORTING
      application = 'Excel'
      parameter   = l_filename
      operation   = 'OPEN'.

_________________
Бойцовый кот нигде не пропадёт!!!


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с преобразованием (XSLT) при выводе в Excel
СообщениеДобавлено: Чт, ноя 26 2015, 18:26 
Специалист
Специалист

Зарегистрирован:
Чт, дек 02 2010, 08:37
Сообщения: 156
Наверное, из-за этого:
Code:
SET PROPERTY OF lo_excel 'DisplayAlerts' = 'False'.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Проблема с преобразованием (XSLT) при выводе в Excel
СообщениеДобавлено: Чт, ноя 26 2015, 19:06 
Младший специалист
Младший специалист

Зарегистрирован:
Вт, июн 26 2007, 09:23
Сообщения: 76
Откуда: Белгород/Москва
Пол: Мужской
baboon написал(а):
Наверное, из-за этого:
Code:
SET PROPERTY OF lo_excel 'DisplayAlerts' = 'False'.

Нет. Если zip-ом открыть - там полноценный Эксель лежит, а не только xml файл.

_________________
Бойцовый кот нигде не пропадёт!!!


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с преобразованием (XSLT) при выводе в Excel
СообщениеДобавлено: Чт, ноя 26 2015, 20:03 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Пн, мар 28 2005, 15:38
Сообщения: 1257
1) вы открыли эксель с погашенными предупреждениями.
2) затем сохранили его в xlsx формате
Вот и все что происходит в этом коде. В оффлайне это работать не будет

_________________
Там, где я рос, единственным развлечением было запоминать число «π».(С) Н. Стивенсон


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с преобразованием (XSLT) при выводе в Excel
СообщениеДобавлено: Пт, ноя 27 2015, 03:02 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, авг 19 2004, 17:37
Сообщения: 1962
Откуда: Москва
Пол: Мужской
Vorrutyer написал:
baboon написал(а):
Наверное, из-за этого:
Code:
SET PROPERTY OF lo_excel 'DisplayAlerts' = 'False'.

Нет. Если zip-ом открыть - там полноценный Эксель лежит, а не только xml файл.

Ну так опять же OLE! :)

_________________
"For all entries" не в SAP-ах, "for all entries" в головах! :)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с преобразованием (XSLT) при выводе в Excel
СообщениеДобавлено: Вс, ноя 29 2015, 03:13 
Младший специалист
Младший специалист

Зарегистрирован:
Вт, июн 26 2007, 09:23
Сообщения: 76
Откуда: Белгород/Москва
Пол: Мужской
Кодер написал(а):
1) вы открыли эксель с погашенными предупреждениями.
2) затем сохранили его в xlsx формате
Вот и все что происходит в этом коде. В оффлайне это работать не будет


Я так понимаю, объекты создаются в ABAP памяти, и на рабочую станцию только сохраняется файл, при этом функции приложения Excel рабочей станции не используются (только открытие в последней строке кода, но это уже для красоты).
Думаю будет работать фоново, если сохранять выгружаемый файл в хранилище на сервере приложений.
В понедельник попробую протестировать.

_________________
Бойцовый кот нигде не пропадёт!!!


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с преобразованием (XSLT) при выводе в Excel
СообщениеДобавлено: Вс, ноя 29 2015, 03:24 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, авг 19 2004, 17:37
Сообщения: 1962
Откуда: Москва
Пол: Мужской
Vorrutyer написал:
Кодер написал(а):
1) вы открыли эксель с погашенными предупреждениями.
2) затем сохранили его в xlsx формате
Вот и все что происходит в этом коде. В оффлайне это работать не будет


Я так понимаю, объекты создаются в ABAP памяти, и на рабочую станцию только сохраняется файл, при этом функции приложения Excel рабочей станции не используются (только открытие в последней строке кода, но это уже для красоты).
Думаю будет работать фоново, если сохранять выгружаемый файл в хранилище на сервере приложений.
В понедельник попробую промотестировать.

Функции приложения Excel рабочей станции используются начиная со строки:
Code:
CREATE OBJECT lo_excel 'Excel.Application'.

В предыдущем операторе "CALL METHOD cl_gui_frontend_services=>gui_download" сохраняется XML-файл lt_data_xml_xls[], вот его можно сохранить на сервере приложений.

_________________
"For all entries" не в SAP-ах, "for all entries" в головах! :)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с преобразованием (XSLT) при выводе в Excel
СообщениеДобавлено: Вс, ноя 29 2015, 03:34 
Младший специалист
Младший специалист

Зарегистрирован:
Вт, июн 26 2007, 09:23
Сообщения: 76
Откуда: Белгород/Москва
Пол: Мужской
Parazit написал:
В предыдущем операторе "CALL METHOD cl_gui_frontend_services=>gui_download" сохраняется XML-файл lt_data_xml_xls[], вот его можно сохранить на сервере приложений.


Его я сохранял, но он выдает предупреждение об открытии файла с неверным форматом.

_________________
Бойцовый кот нигде не пропадёт!!!


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с преобразованием (XSLT) при выводе в Excel
СообщениеДобавлено: Вс, ноя 29 2015, 03:43 
Младший специалист
Младший специалист

Зарегистрирован:
Вт, июн 26 2007, 09:23
Сообщения: 76
Откуда: Белгород/Москва
Пол: Мужской
Parazit написал:
Функции приложения Excel рабочей станции используются начиная со строки:
Code:
CREATE OBJECT lo_excel 'Excel.Application'.


То есть я понимаю логику так?
1. выгружается XML (в файл с расширением .XLS)
2. этот XML открывается Экселем рабочей станции в невидимом режиме с погашенными предупреждениями и пересохраняется в родном экселевом формате.
3. а потом .XLS просто открывается Экселем еще раз.

_________________
Бойцовый кот нигде не пропадёт!!!


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с преобразованием (XSLT) при выводе в Excel
СообщениеДобавлено: Вс, ноя 29 2015, 04:00 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, авг 19 2004, 17:37
Сообщения: 1962
Откуда: Москва
Пол: Мужской
Vorrutyer написал:
Parazit написал:
Функции приложения Excel рабочей станции используются начиная со строки:
Code:
CREATE OBJECT lo_excel 'Excel.Application'.


То есть я понимаю логику так?
1. выгружается XML (в файл с расширением .XLS)
2. этот XML открывается Экселем рабочей станции в невидимом режиме с погашенными предупреждениями и пересохраняется в родном экселевом формате.
3. а потом .XLS просто открывается Экселем еще раз.

Да!

_________________
"For all entries" не в SAP-ах, "for all entries" в головах! :)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с преобразованием (XSLT) при выводе в Excel
СообщениеДобавлено: Вс, ноя 29 2015, 04:32 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, авг 19 2004, 17:37
Сообщения: 1962
Откуда: Москва
Пол: Мужской
Vorrutyer написал:
Parazit написал:
В предыдущем операторе "CALL METHOD cl_gui_frontend_services=>gui_download" сохраняется XML-файл lt_data_xml_xls[], вот его можно сохранить на сервере приложений.


Его я сохранял, но он выдает предупреждение об открытии файла с неверным форматом.

Мда... Я проверил с MS Excel 2003 - не ругается на подмену расширения на xls, а Excel 2013 ругается. :(

_________________
"For all entries" не в SAP-ах, "for all entries" в головах! :)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с преобразованием (XSLT) при выводе в Excel
СообщениеДобавлено: Вс, ноя 29 2015, 21:16 
Почетный гуру
Почетный гуру

Зарегистрирован:
Пт, дек 04 2009, 12:52
Сообщения: 219
Parazit написал:
MS Excel 2003 - не ругается на подмену расширения на xls, а Excel 2013 ругается
Это не вопрос версии Экселя, надо подправить реестр (HKEY_CURRENT_USER\Software\Microsoft\Office\<version number>\Excel\Security). Об этом написано здесь .


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Проблема с преобразованием (XSLT) при выводе в Excel
СообщениеДобавлено: Пт, дек 11 2015, 11:04 
Младший специалист
Младший специалист
Аватара пользователя

Зарегистрирован:
Пн, фев 14 2011, 07:26
Сообщения: 80
Откуда: Альфа Центавра
Пол: Мужской
Цитата:
Это не вопрос версии Экселя, надо подправить реестр (HKEY_CURRENT_USER\Software\Microsoft\Office\<version number>\Excel\Security). Об этом написано здесь .


в своей разработке реализовал такой же подход
http://sapboard.ru/forum/viewtopic.php?f=13&t=91983

Code:
METHOD hide_excel_warning.
  " The file you are trying to open, '[filename]', is in a different format than specified by the file extension
  DATA:
   l_value TYPE string,
   l_len   TYPE i.                                          "#EC NEEDED

  " Can change registry
  CHECK zcl_aok_util=>is_normal_gui( ) = abap_true.

  " Get current excel version
  cl_gui_frontend_services=>registry_get_value(
   EXPORTING
    root                 = cl_gui_frontend_services=>hkey_classes_root
    key                  = 'Excel.Application\CurVer'
   IMPORTING
    reg_value            = l_value
   EXCEPTIONS
    OTHERS               = 1 ).
  CHECK sy-subrc = 0 AND l_value IS NOT INITIAL.

  " two last digits are excel current version
  l_len   = strlen( l_value ). " - 2
  l_len   = l_len - 2.
  l_value = l_value+l_len.

  " Write value
  CONCATENATE `Software\Microsoft\Office\` l_value `.0\Excel\Security` INTO l_value.
  cl_gui_frontend_services=>registry_set_dword_value(
   EXPORTING
    root                 = cl_gui_frontend_services=>hkey_current_user
    key                  = l_value
    value                = 'ExtensionHardening'
    dword_value          = 0
   IMPORTING
    rc                   = l_len
   EXCEPTIONS
    OTHERS               = 1 ).
  CHECK sy-subrc = 0.
  cl_gui_cfw=>flush( EXCEPTIONS OTHERS = 1 ).
ENDMETHOD.

но имхо это грабли
поэтому предпочитаю xlsx выгрузку (тоже архив xml файлов, класс ZCL_AOK_XLSX)
там есть сводные таблицы, list object (таблицы в русской локализации) диаграммы, картинки, макросы и все остальные прелести Excel


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

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


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

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


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

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