ColdFusion';s XML支持&;Word文档

ColdFusion';s XML支持&;Word文档,xml,coldfusion,ms-word,docx,Xml,Coldfusion,Ms Word,Docx,使用ColdFusion的新XML函数。。。是否可以在Word文档(docx)中查找/替换文本?我一直在努力实现这一点,因为docx文档可能会有一段文本(要搜索的占位符)分布在多个w:r(运行)上,这可能很难搜索和替换。可能吗?对 但是,MS使用的XML模式非常冗长。我知道这是多余的,但XML相当复杂 使用.NET操作文档并从CF内部调用可能是一个更好的主意,使用.NET集成。我相信也有Java库,但我不确定它们的易用性和工作性能。我要做的是在word文档中添加替换word,然后使用7zip的C

使用ColdFusion的新XML函数。。。是否可以在Word文档(docx)中查找/替换文本?我一直在努力实现这一点,因为docx文档可能会有一段文本(要搜索的占位符)分布在多个w:r(运行)上,这可能很难搜索和替换。

可能吗?对

但是,MS使用的XML模式非常冗长。我知道这是多余的,但XML相当复杂


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

我要做的是在word文档中添加替换word,然后使用7zip的CLI提取.docx文件,因为它只是一个归档文件,请替换word并重新归档。这已经被证明是非常有效的,并且根本不会影响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" />


我还没有实际使用过它,但它是一个可以处理Word文档的Java库,可能值得研究。我已经将他们的一个用于Excel XLSM文件,这并不难处理:因此您要提取xml并替换xml中的占位符,然后重新打包它。问题是,如果您正在处理大量文档,并且您删除了文本以添加占位符。。。Word的底层XML引擎喜欢将文本放入多个XML元素(它们称之为运行)。因此,除非您考虑到这一点,否则您的占位符将不可搜索。我们仅替换文本中的六个不同单词,主要用于填充数字,尚未遇到该问题。