2

我有一个 XML 文件,我需要将其内容导入 Microsoft Word 2007 文档。

我有一个构建 WordprocessingML 表的 XSL 文件:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml">
<xsl:output method="xml" indent="yes"/> 

<w:style w:type="table" w:styleId="TableStyle">
    <w:name w:val="Table Style"/>
    <w:tblPr>
        <w:tblBorders>
            <w:insideH w:val="single" w:sz="4" w:space="0" w:color="auto"/>
        </w:tblBorders>
    </w:tblPr>
</w:style>  

<xsl:template match="list">

    <xsl:processing-instruction name="mso-application">
        <xsl:text>progid="Word.Document"</xsl:text>
    </xsl:processing-instruction>

    <w:tbl>
        <w:tblPr>
            <w:tblStyle w:val="TableStyle"/>
        </w:tblPr>
        <w:tblGrid>
            <w:gridCol w:w="100" />
            <w:gridCol w:w="200" />
            <w:gridCol w:w="1024" />
        </w:tblGrid>
        <w:tr>
            <w:tc><w:p><w:r><w:t>ID</w:t></w:r></w:p></w:tc>
            <w:tc><w:p><w:r><w:t>Description</w:t></w:r></w:p></w:tc>   
        </w:tr> 
        <xsl:apply-templates select="items/item">
            <xsl:sort select="id" order="ascending"/>
        </xsl:apply-templates>
    </w:tbl>

</xsl:template>

<xsl:template match="items/item">
    <w:tr>
        <w:tc><w:p><w:r><w:t>
            <xsl:value-of select="id"/>
        </w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>
            <xsl:value-of select="description"/>
        </w:t></w:r></w:p></w:tc>
    </w:tr>
</xsl:template>
</xsl:stylesheet>

我使用 Word INCLUDETEXT 字段导入 XML 文件并应用转换:

{INCLUDETEXT  "E:\\Spinner\\Documents\\data.xml" \t "E:\\Spinner\\Documents\\stylesheet.xsl"}

就实际导入数据而言,这可以正常工作 - 显示一个包含我需要的数据的基本表格。

然而,该表没有任何格式 - 没有边框、没有网格线、没有阴影等。Word 会忽略我在 XSL 文件(<w:gridCol w:w="100" />等)中指定的列宽并设置自己的列宽。

我需要使用(最好)文档中已经存在的样式对其进行格式化,例如“表格网格”或“中底纹 1 - 重音 3”。但是,我无法让 Word 实际应用该样式,无论是针对 Word 文档中已经存在的样式 ( <w:tblStyle w:val="TableGrid"/>) 还是新定义的 XSL 文件样式 ( <w:tblStyle w:val="TableStyle"/>)。

有没有人有任何指示?

4

1 回答 1

3

您需要更多类似的东西,但我认为您可能需要调整列宽(可能要考虑到单元格边框)

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml">
<xsl:output method="xml" indent="yes"/> 

<xsl:template match="list">
  <xsl:processing-instruction name="mso-application">
  <xsl:text>progid="Word.Document"</xsl:text>
  </xsl:processing-instruction>
  <w:wordDocument xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml"  w:macrosPresent="no" w:embeddedObjPresent="no" 
w:ocxPresent="no" xml:space="preserve">
    <w:styles>
      <w:style w:type="table" w:styleId="TableStyle">
        <w:name w:val="Table Style"/>
        <w:tblPr>
          <w:tblBorders>
             <w:insideH w:val="single" w:sz="4" w:space="0" w:color="auto"/>
          </w:tblBorders>
        </w:tblPr>
      </w:style>
    </w:styles>
    <w:body>
      <w:tbl>
        <w:tblPr>
            <w:tblStyle w:val="TableStyle"/>
        </w:tblPr>
        <w:tblGrid>
            <w:gridCol w:w="100" />
            <w:gridCol w:w="1024" />
        </w:tblGrid>
        <w:tr>
            <w:tc><w:p><w:r><w:t>ID</w:t></w:r></w:p></w:tc>
            <w:tc><w:p><w:r><w:t>Description</w:t></w:r></w:p></w:tc>   
        </w:tr> 
        <xsl:apply-templates select="items/item">
            <xsl:sort select="id" order="ascending"/>
        </xsl:apply-templates>
      </w:tbl>
    </w:body>
  </w:wordDocument>
</xsl:template>

<xsl:template match="items/item">
    <w:tr>
        <w:tc><w:p><w:r><w:t>
            <xsl:value-of select="id"/>
        </w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>
            <xsl:value-of select="description"/>
        </w:t></w:r></w:p></w:tc>
    </w:tr>
</xsl:template>
</xsl:stylesheet>
于 2012-08-14T17:36:34.790 回答