2012-08-10 53 views
2

我有一個XML文件,其內容需要導入到Microsoft Word 2007文檔中。如何在Word中使用XSL導入XML?

我有一個構造一個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"} 

這工作得很好遠就像實際導入數據一樣 - 將顯示一個基本表格和我需要的數據。

但是,該表格沒有任何格式 - 沒有邊框,沒有網格線,沒有陰影等。字忽略了我在XSL文件(<w:gridCol w:w="100" />等)中指定的列寬並設置它自己的。

我需要使用(最好)文檔中已有的樣式(如「表格網格」或「中等陰影1 - 重點3」)對其進行格式設置。但是,我無法讓Word實際應用樣式,既可以用於已存在的Word文檔樣式(<w:tblStyle w:val="TableGrid"/>),也可以用新定義的XSL文件樣式(<w:tblStyle w:val="TableStyle"/>)。

有沒有人有指點?

+0

如果你不能得到那個工作,嘗試了altChunk? – JasonPlutext 2012-08-11 07:30:05

+0

感謝您的建議。我會研究altChunk,但從我最初的調查來看,它看起來比我需要的更復雜,而且可能對我的用戶來說太複雜。 – Spinner 2012-08-13 13:51:11

回答

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> 
+0

謝謝,看着你的代碼,我看到我錯過了在'',''和''標籤中包裝各種部分。 – Spinner 2012-08-22 13:59:45