powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Экспорт из DB и группировка!
6 сообщений из 6, страница 1 из 1
Экспорт из DB и группировка!
    #35409089
Andrew_New
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет! Есть такая задача, решить не могу никак. Имеется шаблон template.xsl
в него кидаю данные из баз СКЛ. все прекрасно работает, но вот никак не могу понять, как сделать группировку типа MergeDown в экселе.
template.xsl
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
<?xml version="1.0" encoding="utf-8" ?>
<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>
    <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>
    <Worksheet ss:Name="sheet 1">
      <Table x:FullColumns="1"
   x:FullRows="1">
        <Row ss:AutoFitHeight="0" ss:Height="13.5">
          <Cell ss:Index="2" ss:StyleID="s42">
            <Data ss:Type="String">SL#</Data>
          </Cell>
          <Cell ss:MergeAcross="1" ss:StyleID="m18876918">
            <Data ss:Type="String">SUPPLIER NAME</Data>
          </Cell>
          <Cell ss:StyleID="s51">
            <Data ss:Type="String">PACKAGES</Data>
          </Cell>
        </Row>
        <xsl:apply-templates select="//TestTable" />
     </Table>
    </Worksheet>
  </Workbook>
</xsl:template>

<xsl:template match="TestTable">
  <Row ss:AutoFitHeight="0" ss:Height="23.25">
    <Cell ss:Index="2" ss:StyleID="s82" ss:Formula="=ROW()-9">
      <Data ss:Type="Number"> 1 </Data>
    </Cell>
    <Cell ss:MergeAcross="1" ss:StyleID="m18876938">
      <Data ss:Type="String">
        <xsl:value-of select="SupplierName" />
      </Data>
    </Cell>
------------------------------------ 
вот тут нужно сделать объединение ячеек, если поле 'Packages' повторяется
  <Cell  ss:MergeDown="???" ss:StyleID="s71">
      <Data ss:Type="String">
        <xsl:value-of select="Packages" />
      </Data>
    </Cell>
------------------------------------
</Row>
  </xsl:template>
</xsl:stylesheet>
...
Рейтинг: 0 / 0
Экспорт из DB и группировка!
    #35409351
Volder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
приведите часть XML входного - который Вы конвертите.

еще вопрос, а у этих разных 'Packages' значение одинаковое?
иначе, что Вы хотите в объединенную ячейку вставлять?

PS
так на вскидку функция count() в помощь.
...
Рейтинг: 0 / 0
Экспорт из DB и группировка!
    #35409467
Andrew_New
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот это идет на вход.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
<TestDataSet>
  <TestTable>
    <ID> 6 </ID>
    <SupplierName>SAF</SupplierName>
    <Packages> 1  x BOX</Packages>
  </TestTable>
  <TestTable>
    <ID> 1 </ID>
    <SupplierName>SAF</SupplierName>
    <Packages> 1  x BOX</Packages>
  </TestTable>
  <TestTable>
    <ID> 3 </ID>
    <SupplierName>SAFD</SupplierName>
    <Packages> 1  x BOX</Packages>
  </TestTable>
  <TestTable>
    <ID> 4 </ID>
    <SupplierName>SAF</SupplierName>
    <Packages> 11  x CARTONS IN ONE PALLETE &  2  BUNDLES</Packages>
  </TestTable>
  <TestTable>
    <ID> 5 </ID>
    <SupplierName>SAF</SupplierName>
    <Packages> 11  x CARTONS IN ONE PALLETE &  2  BUNDLES</Packages>
  </TestTable>
  <TestTable>
    <ID> 2 </ID>
    <SupplierName>SAFD</SupplierName>
    <Packages> 11  x CARTONS IN ONE PALLETE &  2  BUNDLES</Packages>
  </TestTable>
</TestDataSet>
...
Рейтинг: 0 / 0
Экспорт из DB и группировка!
    #35409810
Andrew_New
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Делаю так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
  <xsl:for-each select="TestTable">
      <xsl:variable name="Packages" select="Packages"/>
      <xsl:if test="not(preceding-sibling::TestTable[Packages = $Packages])">
        <Cell ss:MergeDown="{count(../TestTable[Packages = $Packages])}" ss:StyleID="s71">
          <Data ss:Type="String">
            <xsl:value-of select="$Packages" />
          </Data>
        </Cell>
      </xsl:if>
    </xsl:for-each>

но не работает (( что не так?
...
Рейтинг: 0 / 0
Экспорт из DB и группировка!
    #35409842
Volder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
для Вашего примера примените:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
	<xsl:template match="/TestDataSet">
		<Table>
			<xsl:apply-templates select="TestTable">
				<xsl:sort select="Packages"/>
			</xsl:apply-templates>
		</Table>
	</xsl:template>
	<xsl:template match="TestTable">
		<xsl:variable name="Pack" select="Packages"/>
		<Row>
			<xsl:apply-templates mode="all"/>
			<xsl:if test="count(preceding::TestTable[Packages=$Pack])=0">
				<Cell MergeDown="{count(following::TestTable[Packages=$Pack])}">
					<xsl:value-of select="Packages"/>
				</Cell>
			</xsl:if>
		</Row>
	</xsl:template>
	<xsl:template match="*[not(self::Packages)]" mode="all">
		<Cell>
			<xsl:value-of select="."/>
		</Cell>
	</xsl:template>
	<xsl:template match="Packages" mode="all">
		<!--do nothing-->
	</xsl:template>
</xsl:stylesheet>
как переложить в XML структуры Excel надеюсь проблем не возникнет.
...
Рейтинг: 0 / 0
Экспорт из DB и группировка!
    #35409901
Andrew_New
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Volderдля Вашего примера примените:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
	<xsl:template match="/TestDataSet">
		<Table>
			<xsl:apply-templates select="TestTable">
				<xsl:sort select="Packages"/>
			</xsl:apply-templates>
		</Table>
	</xsl:template>
	<xsl:template match="TestTable">
		<xsl:variable name="Pack" select="Packages"/>
		<Row>
			<xsl:apply-templates mode="all"/>
			<xsl:if test="count(preceding::TestTable[Packages=$Pack])=0">
				<Cell MergeDown="{count(following::TestTable[Packages=$Pack])}">
					<xsl:value-of select="Packages"/>
				</Cell>
			</xsl:if>
		</Row>
	</xsl:template>
	<xsl:template match="*[not(self::Packages)]" mode="all">
		<Cell>
			<xsl:value-of select="."/>
		</Cell>
	</xsl:template>
	<xsl:template match="Packages" mode="all">
		<!--do nothing-->
	</xsl:template>
</xsl:stylesheet>
как переложить в XML структуры Excel надеюсь проблем не возникнет.

Огромнейшее спасибо! Выручили!
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Экспорт из DB и группировка!
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]