【问题标题】:Merge Word documents using XSLT使用 XSLT 合并 Word 文档
【发布时间】:2013-10-09 14:16:50
【问题描述】:

阿罗哈,

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

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

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

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

XSLT 适合这项任务还是有“更好的技术”?

我正在运行 XSLT 1.0。

干杯

【问题讨论】:

  • 将 .docx 更改为 .zip 扩展名,您将能够看到文件的布局。然后,您可以决定是否要这样做。我使用具有 2003 .xml excel 格式的 XSLT 取得了很好的成功。 2003 .xml 和下拉框中的其他 .xml 格式有很大区别
  • 另一件事。我使用 Powershell 更改 Excel 文件的格式,我假设 Word 也可以这样做。如果您有兴趣,我可以尝试将答案放在一起。如果您不想使用 powershell,您应该能够将其翻译成您选择的 COM 语言
  • 使用 powershell 似乎是一个很好的选择,因为我运行的是 Windows Server 2008 R2。您能否发布一些详细信息,以便我将您的答案标记为正确答案?

标签: xslt xslt-1.0


【解决方案1】:

这可能需要根据您的需要进行一些修改,并且其中可能存在一两个错误,但它应该能让您走上正确的道路。 看看这里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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-17
    相关资源
    最近更新 更多