阿罗哈,
我想在我的服务器上合并两个.docx文件(简单地将一个文档放在另一个文件后面)。在文档之间,我想从我的后端系统插入一些元信息(例如作者和日期;所有信息都在外部.xml文件中指定)
我已经发现,XSLT处理器无法解析.doc或.docx文件,因为格式是二进制的。一种可能性是使用Word .xml扩展名。
我想知道是否可以将输入.docx文件转换为.xml字格式,然后应用我的更改。在.xml word文件上运行转换没有问题,但如上所述,将docx文件作为输入失败。
并且假设我能够运行我的转换,如何将单词.xml文件转换回docx文件(客户端只想使用.docx文件,而不是.xml文件)。
XSLT是否适合此任务或是否有“更好的技术”?
我正在运行XSLT 1.0。
干杯
答案 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