ColdFusion的XML支持& Word文档

时间:2012-07-27 15:52:25

标签: xml coldfusion ms-word docx

使用ColdFusion的新XML函数......是否可以在Word文档(docx)中查找/替换文本?因为docx文档可能有一段文本(一个搜索的占位符)分散在多个w:r(运行)上,这可能很难搜索和替换,所以我试图完成这个工作。

2 个答案:

答案 0 :(得分:0)

有可能吗?是。

但是,MS使用的XML模式非常详细。我知道这是多余的,但XML非常复杂。

使用.NET操作文档并使用CF内部的调用使用.NET集成可能是一个更好的主意。我相信也有Java库,但我不确定它们使用起来有多容易,也不确定它们的工作情况。

答案 1 :(得分:0)

我所做的是将文字替换为替换字,然后使用7zip的CLI提取.docx文件,因为它只是一个存档,替换该字,并重新存档。事实证明这非常有效,并且根本不会弄乱XML。

以下是来自应用程序的一些示例代码,用于替换单词'%SENTDATE%'。并非所有变量都在这里,但这应该足以让你开始。

<cfset EditFile = Output & "word\document.xml" />

<!--- Extract the New Document --->
<cfexecute name="7za.exe" arguments='x -y "#StartingFile#" -o"#Output#"' outputfile="#Dir#log_Extract.txt" />

<!--- Read in the file --->
<cfset WordDoc = FileRead( EditFile ) />

<!--- Replace Values --->
<cfset WordDoc = Replace( WordDoc, "%SENTDATE%", DateFormat( Now(), "MMMM DD, YYYY" ), "ALL" ) />

<!--- Save File --->
<cfset FileWrite( EditFile, WordDoc ) />

<!--- Delete Archive if it exists --->
<cfif FileExists( NewFile )>
    <cfset FileDelete( NewFile ) />
</cfif>

<!--- Repack Archive --->
<cfexecute name="7za.exe" arguments='a "#NewFile#" "#Output#*"' outputfile="#Dir#log_Archive.txt" />

<!--- Rename Archive --->
<cffile action="rename" source="#NewFile#" destination="#ListFirst( NewFile, "." )#.docx" />