使用XSLT合并Word文档

时间:2013-10-09 14:16:50

标签: xslt xslt-1.0

阿罗哈,

我想在我的服务器上合并两个.docx文件(简单地将一个文档放在另一个文件后面)。在文档之间,我想从我的后端系统插入一些元信息(例如作者和日期;所有信息都在外部.xml文件中指定)

我已经发现,XSLT处理器无法解析.doc或.docx文件,因为格式是二进制的。一种可能性是使用Word .xml扩展名。

我想知道是否可以将输入.docx文件转换为.xml字格式,然后应用我的更改。在.xml word文件上运行转换没有问题,但如上所述,将docx文件作为输入失败。

并且假设我能够运行我的转换,如何将单词.xml文件转换回docx文件(客户端只想使用.docx文件,而不是.xml文件)。

XSLT是否适合此任务或是否有“更好的技术”?

我正在运行XSLT 1.0。

干杯

1 个答案:

答案 0 :(得分:2)

这可能需要一些工作来根据您的需要进行修改,并且可能存在一两个错误,但它应该让您从正确的道路开始。 看一下这里http://msdn.microsoft.com/en-us/library/office/ff839952.aspx并尝试不同的XML选项来决定哪一个最适合你。

param(
    [string]$Filename,
    [string]$StyleSheet,
    [string]$outputFile
)

$WordApp = New-Object -ComObject Word.application

if (![System.IO.Path]::IsPathRooted($FileName)){
    $Filename = Join-Path $pwd $FileName
}

$Document = $WordApp.Documents.Open($Filename, 2, $true) # Read only

$newFilename = [System.IO.Path]::ChangeExtension($filename, "xml")

if (Test-Path $newFilename){
    Remove-Item $newFilename
}

#http://msdn.microsoft.com/en-us/library/office/ff839952.aspx
$Document.SaveAs($newFilename, [Microsoft.Office.Interop.Word.WdSaveFormat]::wdFormatXMLDocument)
$Document.Close()

$xslt = New-Object System.Xml.Xsl.XslCompiledTransform;
$xslt.Load($StyleSheet, $null, $null);
$xslt.Transform( $newFilename, $outputFile );


$WordApp.Quit()
[System.Runtime.InteropServices.Marshal]::ReleaseComObject($WordApp) | Out-Null