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

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


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

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


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

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