XML Publisher или автоформатирование по высоте

Часовщик
Дата: 18.11.2008 11:37:24
Есть XML Шаблон с выходом в Эксель. Необходимо все полученный строки отформатировать по ширине ещё на стадии шаблона, чтобы впоследствии бухгалтерам меньше было возьни. Как это сделать? Есть идеи?
Jack Carver
Дата: 18.11.2008 11:42:30
Используйте не rtf-шаблон разметки, а XSL.
Часовщик
Дата: 18.11.2008 12:04:09
Спасибо, но как изменить этот шаблон с rtf на XSL?
Jack Carver
Дата: 18.11.2008 12:18:27
OeBS?
Jack Carver
Дата: 18.11.2008 12:32:09
Допустим у вас есть отчет, который генерирует следующий XML:
<?xml version="1.0" encoding="WINDOWS-1251"?>
<!-- Generated by Oracle Reports version 10.1.2.0.2 -->
<XSL_SAMPLE>
  <LIST_G_MAIN>
    <G_MAIN>
      <ITEM_CODE>1325180108</ITEM_CODE>
      <ITEM_DESC>тест</ITEM_DESC>
      <CREATION_DATE>18.01.08</CREATION_DATE>
    </G_MAIN>
    <G_MAIN>
      <ITEM_CODE>1348180108</ITEM_CODE>
      <ITEM_DESC>тест</ITEM_DESC>
      <CREATION_DATE>18.01.08</CREATION_DATE>
    </G_MAIN>
  </LIST_G_MAIN>
</XSL_SAMPLE>

Создаете такой шаблон разметки:
<?xml version="1.0"?>
<?mso-application progid="Excel.Sheet"?>
<xsl:stylesheet id="my_xslt" version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet">
<xsl:output method="xml" encoding="windows-1251"/>

<xsl:template match="/">

<xsl:processing-instruction name="mso-application">
progid="Excel.Sheet"
</xsl:processing-instruction>

<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">
 <ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel">
  <WindowHeight>8340</WindowHeight>
  <WindowWidth>12300</WindowWidth>
  <WindowTopX>480</WindowTopX>
  <WindowTopY>15</WindowTopY>
  <RefModeR1C1/>
  <ProtectStructure>False</ProtectStructure>
  <ProtectWindows>False</ProtectWindows>
 </ExcelWorkbook>
 <Styles>
  <Style ss:ID="Default" ss:Name="Normal">
   <Alignment ss:Vertical="Bottom"/>
   <Borders/>
   <Font ss:FontName="Arial Cyr" x:CharSet="204"/>
   <Interior/>
   <NumberFormat/>
   <Protection/>
  </Style>
  <Style ss:ID="s21">
   <Font ss:FontName="Arial Cyr" x:CharSet="204" ss:Bold="1"/>
  </Style>
  <Style ss:ID="s22">
   <Borders>
    <Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="2"/>
    <Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="2"/>
   </Borders>
  </Style>
  <Style ss:ID="s23">
   <Borders>
    <Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="2"/>
   </Borders>
  </Style>
  <Style ss:ID="s25">
   <Borders>
    <Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="2"/>
   </Borders>
  </Style>
  <Style ss:ID="s26">
   <Borders/>
  </Style>
  <Style ss:ID="s28">
   <Borders>
    <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="2"/>
    <Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="2"/>
   </Borders>
  </Style>
  <Style ss:ID="s29">
   <Borders>
    <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="2"/>
   </Borders>
  </Style>
  <Style ss:ID="s31">
   <Borders>
    <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="2"/>
    <Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="2"/>
    <Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="2"/>
   </Borders>
  </Style>
  <Style ss:ID="s32">
   <Borders>
    <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="2"/>
    <Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="2"/>
   </Borders>
  </Style>
  <Style ss:ID="s33">
   <Borders>
    <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="2"/>
    <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="2"/>
    <Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="2"/>
   </Borders>
  </Style>
  <Style ss:ID="s34">
   <Borders>
    <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="2"/>
   </Borders>
   <NumberFormat ss:Format="Short Date"/>
  </Style>
  <Style ss:ID="s35">
   <Borders>
    <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="2"/>
    <Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="2"/>
   </Borders>
   <NumberFormat ss:Format="Short Date"/>
  </Style>
  <Style ss:ID="s36">
   <Borders>
    <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="2"/>
    <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="2"/>
   </Borders>
   <NumberFormat ss:Format="Short Date"/>
  </Style>
 </Styles>
 <Worksheet ss:Name="Лист1">
  <Table>
   <Column ss:Width="61.5"/>
   <Column ss:Width="49.5"/>
   <Column ss:Width="72"/>
   <Row>
    <Cell ss:StyleID="s21"><Data ss:Type="String">Каталог номенклатуры</Data></Cell>
    <Cell ss:StyleID="s21"/>
    <Cell ss:StyleID="s21"/>
   </Row>
   <Row ss:Height="13.5"/>
   <Row ss:Height="13.5">
    <Cell ss:StyleID="s31"><Data ss:Type="String">Код позиции</Data></Cell>
    <Cell ss:StyleID="s32"><Data ss:Type="String">Описание</Data></Cell>
    <Cell ss:StyleID="s33"><Data ss:Type="String">Дата создания</Data></Cell>
   </Row>
   <xsl:apply-templates select="//LIST_G_MAIN/G_MAIN"/>       
  </Table>
  <WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
   <PageSetup>
    <PageMargins x:Bottom="0.984251969" x:Left="0.78740157499999996"
     x:Right="0.78740157499999996" x:Top="0.984251969"/>
   </PageSetup>
   <Print>
    <ValidPrinterInfo/>
    <PaperSizeIndex>9</PaperSizeIndex>
    <HorizontalResolution>600</HorizontalResolution>
    <VerticalResolution>600</VerticalResolution>
   </Print>
   <Selected/>
   <Panes>
    <Pane>
     <Number>3</Number>
     <ActiveRow>6</ActiveRow>
     <ActiveCol>4</ActiveCol>
    </Pane>
   </Panes>
   <ProtectObjects>False</ProtectObjects>
   <ProtectScenarios>False</ProtectScenarios>
  </WorksheetOptions>
 </Worksheet>
 <Worksheet ss:Name="Лист2">
  <WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
   <PageSetup>
    <PageMargins x:Bottom="0.984251969" x:Left="0.78740157499999996"
     x:Right="0.78740157499999996" x:Top="0.984251969"/>
   </PageSetup>
   <ProtectObjects>False</ProtectObjects>
   <ProtectScenarios>False</ProtectScenarios>
  </WorksheetOptions>
 </Worksheet>
 <Worksheet ss:Name="Лист3">
  <WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
   <PageSetup>
    <PageMargins x:Bottom="0.984251969" x:Left="0.78740157499999996"
     x:Right="0.78740157499999996" x:Top="0.984251969"/>
   </PageSetup>
   <ProtectObjects>False</ProtectObjects>
   <ProtectScenarios>False</ProtectScenarios>
  </WorksheetOptions>
 </Worksheet>
</Workbook>

</xsl:template>

<xsl:template match="//LIST_G_MAIN/G_MAIN">
   <Row>
    <Cell ss:StyleID="s22"><Data ss:Type="Number"><xsl:value-of select="ITEM_CODE"/></Data></Cell>
    <Cell ss:StyleID="s23"><Data ss:Type="String"><xsl:value-of select="ITEM_DESC"/></Data></Cell>
    <Cell ss:StyleID="s35"><Data ss:Type="String"><xsl:value-of select="CREATION_DATE"/></Data></Cell>
   </Row>
</xsl:template>

</xsl:stylesheet>

Цепляете этот XSL файл к определению данных (в полномочиях "Администратор издателя XML").
Указываете следующий тип шаблона - "XSL-XML"
Часовщик
Дата: 18.11.2008 12:46:52
Спасибо ещё раз. Теперь есть над чем работать.
Jack Carver
Дата: 18.11.2008 13:08:07
Рекомендую заиметь на десктопе программу - XSL-трансформатор.
Я пользуюсь XMLSpy.
ton63
Дата: 18.11.2008 16:22:01
А что значит "Цепляете этот XSL файл к определению данных"?
А где запрос тогда будет в xml-е? Поясните пожалуйста!
Jack Carver
Дата: 18.11.2008 17:04:52
У вас есть rdf-файл, который содержит sql-запрос.
Этот отчет вы регистрируете как параллельную программу. Указываете формат вывода - "XML".

Далее идете в полномочия "Администратор издателя XML". Идете на вкладку "Определения данных". Создаете определение данных для своего отчета.
Переключаетесь на вкладку "Шаблоны". Создаете шаблон для вашего определения данных. Указываете его тип - "XSL-XML". Аттачите к нему файл разметки (xsl-файл).
4uko
Дата: 05.05.2010 17:12:37
Jack Carver
У вас есть rdf-файл, который содержит sql-запрос.
Этот отчет вы регистрируете как параллельную программу. Указываете формат вывода - "XML".

Далее идете в полномочия "Администратор издателя XML". Идете на вкладку "Определения данных". Создаете определение данных для своего отчета.
Переключаетесь на вкладку "Шаблоны". Создаете шаблон для вашего определения данных. Указываете его тип - "XSL-XML". Аттачите к нему файл разметки (xsl-файл).


Jack Carver я заблудился.
В BI Publisher создал папку, в ней отчет. Далее создал датасет (type sql query) где написал запрос в нотации презентационного уровня. Нажал View. Появился XML с данными, (далее по оракловым примерам необходимо нажать экспорт и даллее открыть word и там зарузить данные и создать шаблон), но я так понял по этому пути идти не надо. Мне кажется необходимо зайти в analyser. Что делать дальше?