Текущее время: Сб, июн 21 2025, 00:43

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


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


ВНИМАНИЕ!

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



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

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

Делаю вывод в Excel посредством XSLT преобразования.
Сначала преобразую внутреннюю таблицу в XML посредством стандартного преобразования ID, затем полученный XML преобразую в Excel совместимый XML посредством написанного XSLT преобразования ZST_1, затем сохраняю файл на рабочую станцию в файл с расширением .XLS.

При открытии файла в Excel происходит предупреждение, что формат открываемого файла отличается от указанного в расширении. Если предупреждение игнорировать, то файл открывается.
Если же сохранять файл с расширением .XML то Excel его не открывает, потому что при выполнении трансформации ZST_1 почему то исчезает строка <?mso-application progid="Excel.Sheet"?> по которой определяется что это XML совместимый с Excel.
Как избавиться от этого сообщения?

И есть ли способ указать в преобразовании, что нужно сохранять в UTF-16, потому как моё преобразование сохраняет в UTF-8 что в ряде случае приводит к неотображению нужного текста.

программа
Code:
REPORT Z_TEST1.

data:
      BEGIN OF z_PARTNER,
        LIFNR TYPE LIFNR,
        NAME(25),
      end OF z_PARTNER,
      T_PARTNER like STANDARD TABLE OF z_PARTNER.

CLEAR: T_PARTNER, z_PARTNER.
z_PARTNER-LIFNR = '1'.
z_PARTNER-NAME = 'номер 1'.
APPEND z_PARTNER to t_PARTNER.
z_PARTNER-LIFNR = '2'.
z_PARTNER-NAME = 'номер 2'.
APPEND z_PARTNER to t_PARTNER.

* трансформация ABAP2XML
TYPES: z_xml(1024) TYPE x.
DATA:  lt_xml  TYPE STANDARD TABLE OF z_xml,
       lt_xml_xls LIKE lt_xml.
CALL TRANSFORMATION id
  SOURCE data_node = t_PARTNER
  RESULT XML lt_xml.

* трансформация XML2XML(EXCEL)
CALL TRANSFORMATION ZST_1
  SOURCE XML lt_xml[]
  RESULT XML lt_xml_XLS.

* выгрузка
* временная директория
DATA:
  l_filename TYPE string,
  l_dirname  TYPE string.
CALL METHOD cl_gui_frontend_services=>get_sapgui_workdir
  CHANGING
    sapworkdir = l_dirname
  EXCEPTIONS
    OTHERS     = 0.
CHECK sy-subrc = 0.

* имя файла для выгрузки
CLEAR: l_filename.
CONCATENATE l_dirname 'TST' '_' 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_xml_XLS.

* откроем выгруженный XML-эксель
cl_gui_frontend_services=>execute( document = l_filename operation = 'OPEN' ).



преобразование ZST_1
Code:
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl" xmlns:asx="http://www.sap.com/abapxml" version="1.0">
  <xsl:strip-space elements="*"/>
  <xsl:template match="/">
    <?mso-application progid="Excel.Sheet"?>
    <Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:html=
"http://www.w3.org/TR/REC-html40">
      <DocumentProperties xmlns="urn:schemas-microsoft-com:office:office">
        <Version>12.00</Version>
      </DocumentProperties>
      <ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel">
        <WindowHeight>8580</WindowHeight>
        <WindowWidth>17100</WindowWidth>
        <WindowTopX>360</WindowTopX>
        <WindowTopY>45</WindowTopY>
        <ProtectStructure>False</ProtectStructure>
        <ProtectWindows>False</ProtectWindows>
      </ExcelWorkbook>
      <Styles>
        <Style ss:ID="Default" ss:Name="Normal">
          <Alignment ss:Vertical="Bottom"/>
          <Borders/>
          <Font ss:Color="#000000" ss:FontName="Calibri" ss:Size="11" x:CharSet="204" x:Family="Swiss"/>
          <Interior/>
          <NumberFormat/>
          <Protection/>
        </Style>
        <Style ss:ID="s62">
          <Borders>
            <Border ss:LineStyle="Continuous" ss:Position="Bottom" ss:Weight="1"/>
            <Border ss:LineStyle="Continuous" ss:Position="Left" ss:Weight="1"/>
            <Border ss:LineStyle="Continuous" ss:Position="Right" ss:Weight="1"/>
            <Border ss:LineStyle="Continuous" ss:Position="Top" ss:Weight="1"/>
          </Borders>
        </Style>
      </Styles>

      <Worksheet ss:Name="Лист12345">
        <Table ss:DefaultRowHeight="15" ss:ExpandedColumnCount="4" ss:ExpandedRowCount="20000" x:FullColumns="1" x:FullRows="1">
          <xsl:for-each select="asx:abap/asx:values/DATA_NODE/item">
              <Row>
                <Cell ss:StyleID="s62">
                  <Data ss:Type="Number">
                    <xsl:value-of select="LIFNR"/>
                  </Data>
                </Cell>
                <Cell ss:StyleID="s62">
                  <Data ss:Type="String">
                    <xsl:value-of select="NAME"/>
                  </Data>
                </Cell>
                <Cell ss:StyleID="s62">
                  <Data ss:Type="String">
                    <xsl:value-of select="asx:abap/asx:values/DATA_NODE/item/NUMBER_OF_LINE"/>
                  </Data>
                </Cell>
                <Cell ss:StyleID="s62"/>
              </Row>
          </xsl:for-each>
        </Table>

        <WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
          <PageSetup>
            <Header x:Margin="0.3"/>
            <Footer x:Margin="0.3"/>
            <PageMargins x:Bottom="0.75" x:Left="0.7" x:Right="0.7" x:Top="0.75"/>
          </PageSetup>
          <Selected/>
          <Panes>
            <Pane>
              <Number>3</Number>
            </Pane>
          </Panes>
          <ProtectObjects>False</ProtectObjects>
          <ProtectScenarios>False</ProtectScenarios>
        </WorksheetOptions>
      </Worksheet>
    </Workbook>

  </xsl:template>
</xsl:transform>


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


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

Зарегистрирован:
Пн, июн 27 2011, 08:25
Сообщения: 479
Попробуйте сохранить с расширением .xlsm а не .xls


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

Зарегистрирован:
Чт, мар 25 2010, 09:02
Сообщения: 207
Vorrutyer написал:
И есть ли способ указать в преобразовании, что нужно сохранять в UTF-16, потому как моё преобразование сохраняет в UTF-8 что в ряде случае приводит к неотображению нужного текста.
Code:
<xsl:output encoding="ваша кодировка"/>

Это можно поставить где-нибудь вначале трансформации чтобы задать целевую кодировку, но вообще UTF-8 должно хватать для всего, если что-то не отображается корректно, наверное где-то в другом месте ошибка.

Code:
<?mso-application progid="Excel.Sheet"?>
А для этой штуки гугл выручил:
Code:
<xsl:template match="/">
<xsl:processing-instruction name="mso-application">
  <xsl:text>progid="Word.Document"</xsl:text>
</xsl:processing-instruction>


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

Зарегистрирован:
Вт, июн 26 2007, 09:23
Сообщения: 76
Откуда: Белгород/Москва
Пол: Мужской
olegbash написал(а):
Попробуйте сохранить с расширением .xlsm а не .xls

Нет, не помогло.
С .xlsm вообще отказывается открывать ссылаясь на поврежденность файла.

Поэкспериментировал.
Оказывается если сохранить самый обычный файл из Excel в формат "Таблица XML 2003" (сохраняется с расширением .XML), сменить расширение на XLS - то будет выдаваться предупреждение что файл в другом формате, которое можно игнорировать и открыть файл.
Если же сменить расширение на .XLSX или .XLSM - то выдается сообщение о поврежденном файле без возможности его открыть.

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


Последний раз редактировалось Vorrutyer Ср, ноя 25 2015, 12:13, всего редактировалось 1 раз.

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

Зарегистрирован:
Вт, июн 26 2007, 09:23
Сообщения: 76
Откуда: Белгород/Москва
Пол: Мужской
AFH написал(а):
Vorrutyer написал:
И есть ли способ указать в преобразовании, что нужно сохранять в UTF-16, потому как моё преобразование сохраняет в UTF-8 что в ряде случае приводит к неотображению нужного текста.
Code:
<xsl:output encoding="ваша кодировка"/>

Это можно поставить где-нибудь вначале трансформации чтобы задать целевую кодировку, но вообще UTF-8 должно хватать для всего, если что-то не отображается корректно, наверное где-то в другом месте ошибка.

Code:
<?mso-application progid="Excel.Sheet"?>
А для этой штуки гугл выручил:
Code:
<xsl:template match="/">
<xsl:processing-instruction name="mso-application">
  <xsl:text>progid="Word.Document"</xsl:text>
</xsl:processing-instruction>


Спасибо, помогло.

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


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

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

Единственный минус - если будет открываться на не-виндовой машине, то возможно, что система автоматически не распознает, что XML не Excel-совместимый. За это отвечае строка <?mso-application progid="Excel.Sheet"?> в начале файла, не факт что линукс или макось её читают. Потому и хотелось сохранить с каким либо родным экселевским расширением.

Почитал форум в поисках ответа, большей частью обсуждается выгрузка с использованием XSLT + OLE.
Что требует наличия на локальной машине Excel.
Кто нибудь вообще выгружал из ABAP в Excel-совместимый XML без OLE?

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


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

Зарегистрирован:
Пн, мар 28 2005, 15:38
Сообщения: 1257
Цитата:
Кто нибудь вообще выгружал из ABAP в Excel-совместимый XML без OLE?


Смотрите xlworkbench. OLE используется только в дизайнтайме и если вы хотите получить представление сформирвоанного отчета в ExcelInplace. Еслип рото файл получить - то разработка вполне себе формирует файлы формата xlsx

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


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

Зарегистрирован:
Чт, авг 19 2004, 17:37
Сообщения: 1962
Откуда: Москва
Пол: Мужской
Vorrutyer написал:
...
Кто нибудь вообще выгружал из ABAP в Excel-совместимый XML без OLE?

Я выгружал, используя классы пакета SIXML. Есть новая версия ZWWW, доработанная для выгрузки Excel-XML и Word-XML. Идеология ZWWW сохранена, т.е. в Excel создается шаблон XML, а остальное как обычно.
Если не против быть бета-тестером, можем попробовать.

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


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

Зарегистрирован:
Вт, июн 26 2007, 09:23
Сообщения: 76
Откуда: Белгород/Москва
Пол: Мужской
Кодер написал(а):
Цитата:
Кто нибудь вообще выгружал из ABAP в Excel-совместимый XML без OLE?


Смотрите xlworkbench. OLE используется только в дизайнтайме и если вы хотите получить представление сформирвоанного отчета в ExcelInplace. Еслип рото файл получить - то разработка вполне себе формирует файлы формата xlsx


У нас нельзя добавлять чужие утилиты :(
Только стандарт, только хардкор.

Parazit написал:
Если не против быть бета-тестером, можем попробовать.

Если предложение будет в силе как буду на проекте, где можно ставить утилиты - всеми руками за.

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


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

Зарегистрирован:
Чт, авг 19 2004, 17:37
Сообщения: 1962
Откуда: Москва
Пол: Мужской
Vorrutyer написал:
...У нас нельзя добавлять чужие утилиты :(
Только стандарт, только хардкор...

Что Вы называете утилитами и как их добавляют?
Чем принципиально отличается Ваш исходный код от заимствованного исходного кода? :)

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


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

Зарегистрирован:
Пн, мар 28 2005, 15:38
Сообщения: 1257
Vorrutyer: Эм? а ваш собственный код это не "чужая утилита" для системы? не, ну если вам хочется много-много ручного труда - то кто ж вам судья?
При желании, так же можно воспользоваться
1) выгрузкой алв в excel (см. методы в классе cl_salv, там есть фоновое формирование xlsx). Минус в том, что выгружаться будет только то, как вы видите данные в алв. Вот пример
2) можно воспользоваться стандартными классами по работе с xlsx\docx (пакеты S_OOXML_XLSX и S_OOXML_DOCX соответственно)

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


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

Зарегистрирован:
Чт, дек 20 2007, 18:21
Сообщения: 1613
Кодер написал(а):
2) можно воспользоваться стандартными классами по работе с xlsx\docx (пакеты S_OOXML_XLSX и S_OOXML_DOCX соответственно)

В каком обновлении лежит S_OOXML_XLSX?

_________________
я твой сап эфай внедрял
BAdI-позитив
Взять немножечко абопу, сунь туда кошачью *опу, RFC лапки, БТ старой бабки, на медленном базиснике переносить, тестовое окружение материть, снимать SAT пенку, биться головой о стенку, охапка тайм-шитов, отчет готов!


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

Зарегистрирован:
Пн, мар 28 2005, 15:38
Сообщения: 1257
Цитата:
В каком обновлении лежит S_OOXML_XLSX?

не знаю. В 7.00 еще его нет в 7.31 уже есть. Думаю, что с 7.20 должно быть.

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


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

Зарегистрирован:
Чт, май 17 2007, 16:31
Сообщения: 40
Откуда: Санкт-Петербург
См. ноту 2163344 - Availability and support of classes in package S_OOXML_CORE . Внизу есть ссылка на OOXML framework .
В одной из систем появился запросом SAPK-702DRINSAPBASIS 'SAPK-702DRINSAPBASIS' от 18.06.2009


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

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

Что Вы называете утилитами и как их добавляют?
Чем принципиально отличается Ваш исходный код от заимствованного исходного кода? :)


Размером :)
При согласовании переноса новый ZWWW или xlworkbench завернут.

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


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

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


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

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


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

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