AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 19.09.2006, 17:35   #1  
AlexeyS is offline
AlexeyS
Участник
 
404 / 339 (12) ++++++
Регистрация: 15.06.2004
Адрес: москва
Экспорт в эксель через XML, еще один вариант
была задача - сделать вывод в эксель счета, накладной и сч.-фактуры,
так как некоторые клиенты хотят именно так и никак иначе

сначала пробовал сделать некое универсальное решение через форму стандартной печати,
но мне это оказалось не по зубам ))
к тому-же обязательное требование - сохранить форматирование отчета (чтобы было как в 1С)

Excel 2003 нормально понимает XML
поэтому сделал такой вариант - в отчете перегружается метод print
формирую XML с помощью XMLDocument,

Код:
xmlDoc = new XMLDocument();
xmlDoc.loadXML('<?xml version="1.0" encoding="windows-1251"?><?xml-stylesheet type="text/xsl" href="smpl05.xsl"?><Bill/>');
в итоге получаю что-то вроде

Код:
<CustVendFacture>
	<Header>
		<getFactureId>012345</getFactureId>
		<FactureDate>01/09/2006</FactureDate>
		<getCompanyName>ПРОДАВЕЦ</getCompanyName>
		<getCompanyAddress>АДРЕС ПРОДАВЦА</getCompanyAddress>
		<getINNOfCompany>ИНН ПРОДАВЦА</getINNOfCompany>
		<getKPPUOfCompany>КПП ПРОДАВЦА</getKPPUOfCompany>
	</Header>
	<Body>
		<Line>
			<ItemName>ТОВАР1</ItemName>
			<getUnitIdTxt>шт</getUnitIdTxt>
			<getQty>2400</getQty>
			<getPrice>570</getPrice>
		</Line>
		<Line>
		...
		</Line>
	</Body>
</CustVendFacture>
который преобразую с помощью XSL,
XSL делаю так - подготавливаю шаблон, в нужных позициях подставляя имена переменных,
например название компании - getCompanyName, сохраняю из Excel-я в XML,
в файле заменяю заголовок

Код:
<?xml version="1.0"?>
<?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">
на

Код:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  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">
  <xsl:template match="/">
    <xsl:processing-instruction name="mso-application">
      <xsl:text>progid="Excel.Sheet"</xsl:text>
    </xsl:processing-instruction>
<Workbook>
в полученном файле заменяю getCompanyName
на
Код:
<xsl:value-of select="CustVendFacture/Header/getCompanyName"/>
для строк накладной добавляю цикл

Код:
   <xsl:for-each select="CustVendFacture/Body/Line">
   <Row ss:AutoFitHeight="0">
    <Cell ss:Index="2" ss:StyleID="s38"><Data ss:Type="String"><xsl:value-of select="ItemName"/></Data></Cell>
    <Cell ss:StyleID="s39"><Data ss:Type="String"><xsl:value-of select="getUnitIdTxt"/></Data></Cell>
    <Cell ss:StyleID="s40"><Data ss:Type="Number"><xsl:value-of select="getQty"/></Data></Cell>
    <Cell ss:StyleID="s40"><Data ss:Type="Number"><xsl:value-of select="getPrice"/></Data></Cell>
    ...
   </Row>
   </xsl:for-each>
в конце добавляю

Код:
</xsl:template>
</xsl:stylesheet>
также находим
Код:
<Table ss:ExpandedColumnCount="256" ss:ExpandedRowCount="
в ExpandedRowCount ставим 256 или больше. это количество строк,
если его будет слишком мало - Excel будет грязно ругаться
на несоответствие указанному и реальному количеству строк в файле

также выводимые числа должны быть определенного вида,
например num2Str(Price, 3, 2, 1, 0), то есть без пробелов и разделитель - точка

полученый XML передаю в ActiveX Spreadsheet, положенный на форму.
после этого нажимаем на кнопку экспорта и готово
с принципе, думаю можно сразу передавать во внешний Excel через COM

плюсы: работает быстро, формирует по шаблону готовый Excel-отчет
минусы: почему-то не сохраняет форматирование (перенос слов в ячейке),
потом нужно вручную менять формат ячейки
За это сообщение автора поблагодарили: mazzy (5), alex55 (3).
Старый 20.09.2006, 09:04   #2  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
>>>формирую XML с помощью XMLDocument

довольно тормозной вариант (COM в Axapta больгшой тормоз)- через AsciiIO быстрее

>>>с принципе, думаю можно сразу передавать во внешний Excel через COM

можно просто запускать по WinApi::shellExecute - оно по <?mso-application progid="Excel.Sheet"?> должно определить что надо запускать Excel
Старый 20.09.2006, 09:33   #3  
blokva is offline
blokva
Пенсионер
Аватар для blokva
SAP
NavAx Club
 
743 / 167 (7) ++++++
Регистрация: 04.06.2003
Адрес: Беларусь
а не проще хранить XML шаблон структурировано В таблицах, заполнять необходимые поля при формировании документа и выгружать это все через AsciiIO?
__________________
Законы природы еще никто не отменял!
А еще у меня растет 2 внучки!!! Кому интересно подробности тут:
http://www.baby-shine.com/
За это сообщение автора поблагодарили: Recoilme (4).
Старый 20.09.2006, 11:28   #4  
AlexeyS is offline
AlexeyS
Участник
 
404 / 339 (12) ++++++
Регистрация: 15.06.2004
Адрес: москва
Цитата:
Сообщение от belugin Посмотреть сообщение
>>>формирую XML с помощью XMLDocument

довольно тормозной вариант (COM в Axapta больгшой тормоз)- через AsciiIO быстрее
файлы получаются весьма небольшие, поэтому пока не критично
Цитата:
>>>с принципе, думаю можно сразу передавать во внешний Excel через COM

можно просто запускать по WinApi::shellExecute - оно по <?mso-application progid="Excel.Sheet"?> должно определить что надо запускать Excel
по идее должно, но у меня не работает
Старый 20.09.2006, 11:34   #5  
AlexeyS is offline
AlexeyS
Участник
 
404 / 339 (12) ++++++
Регистрация: 15.06.2004
Адрес: москва
Цитата:
а не проще хранить XML шаблон структурировано В таблицах, заполнять необходимые поля при формировании документа и выгружать это все через AsciiIO?
мне не нужно сразу выгружать в файл, к тому-же мне кажется проще руками подправить готовый файл, чем заниматься разборкой и сборкой XML-шаблона.
Старый 20.09.2006, 12:26   #6  
Lemming is offline
Lemming
Участник
Аватар для Lemming
 
1,144 / 343 (14) ++++++
Регистрация: 20.04.2004
Адрес: Москва, Чайнатаун в Люблино
Записей в блоге: 10
?
AlexeyS, а проблема с итогами по странице решена? Кстати выравнивание по высоте наименований, напрямую связано с этими самыми итогами по странице


p.s. ХРО-шку было бы удобнее выложить, а то так сложно вникать.
Старый 20.09.2006, 13:00   #7  
blokva is offline
blokva
Пенсионер
Аватар для blokva
SAP
NavAx Club
 
743 / 167 (7) ++++++
Регистрация: 04.06.2003
Адрес: Беларусь
Цитата:
Сообщение от AlexeyS Посмотреть сообщение
мне не нужно сразу выгружать в файл, к тому-же мне кажется проще руками подправить готовый файл, чем заниматься разборкой и сборкой XML-шаблона.
Может и так, но ёкселевский шаблон - то не меняется, его можно загрузить в таблицы и там остается только заполнить/дополнить нужные записи я вот тут об этом немного писал и проектик выложил...
__________________
Законы природы еще никто не отменял!
А еще у меня растет 2 внучки!!! Кому интересно подробности тут:
http://www.baby-shine.com/
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Метки - Экспорт и Импорт через Проект z_av DAX: Программирование 12 22.09.2011 12:33
экспорт в Эксель Nikolaich DAX: Программирование 3 23.01.2009 20:23
Формирование XML через SAX2 Armoshka DAX: Программирование 13 06.06.2007 10:24
Копирование через буфер обмена из АХАРТы в Эксель... DaniK DAX: Функционал 3 05.01.2005 15:45
Экспорт в Excel через WorkBooks.OpenText() Владимир Максимов DAX: Программирование 2 09.04.2004 17:16

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 19:13.