Текущее время: Ср, июн 25 2025, 08:50

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


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

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


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

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