我目前的目标有点复杂,但我会尽力解释它。我们有一个软件,它在过去几个月里一直在生成所有用途的XML日志。其他人已从这些数据中解析出他们认为文档所需的内容,并将其全部放入可读的HTML格式中。
我的工作是找到一种方法将它们生成的可读HTML文件与预先存在的Word(.docx)文档相链接。我目前有一个NAnt脚本,它读取包含日志的目录,并创建一个格式为:
的XML文档<root>
<HTML address=...>
<ProductName name=...>
<FunctionName name=...>
</FunctionName>
</ProductName>
</HTML>
</root>
word文档本身包含保存函数名称的表。这些表位于包含产品名称的标题下方。我需要在表格中包含与函数名称相关的地址链接,以便阅读文档的人可以轻松点击函数名称并查看函数文档。
我没有在程序上修改word文档的经验,所以我真的很喜欢这方面的帮助,因为它似乎是一个相当复杂的过程。如果它能以任何方式简化过程,我可以轻松地重新排序XML节点。
到目前为止我研究过的事情:
在研究docx的格式之前,我曾想编写另一个脚本,只需搜索相关数据,然后在其周围包装超链接标记。不幸的是,一旦我查看了docx,似乎格式化要复杂得多。
之后我决定通过Visual Studio 2010来看看使用C#。不幸的是,由于我没有使用C#的经验(我只使用过C和C ++),所以它相当令人困惑。我花了几天时间寻找指南和参考资料,但这些都很分散,我似乎无法找到我想要的东西。
答案 0 :(得分:2)
您的工具包的三种技巧:
自定义XML数据绑定。通过这种方式,您可以将XML文档注入到docx中,并自动显示数据(通过XPath链接)。不在超链接内,所以这可能不适合你。虽然您可以在Word中首次打开docx时运行AutoOpen宏,以将文本转换为超链接。
<强> AltChunk 即可。有了这个,您可以在docx中包含HTML。您需要修改docx。 (见下文3)
Flat OPC XML 。这是docx作为单个XML文件的表示,Word 2007或更高版本可以愉快地读取或写入。使用此选项,您可以使用您选择的工具将字符串替换为超链接的内容。如果您愿意,也可以使用此表示法将内容注入AltChunks。
替换超链接的轻微挑战是你必须在2个地方进行。首先,链接文本在文档本身(document.xml)中显示给用户,其次是目标URL(在关系部分中)。这些是由relId捆绑在一起的。
如果您使用AltChunk,则可以在一个地方进行替换。不确定您的文档有多长,如果您有数百个AltChunks(即使它们基本上只包含一个超链接),您是否会遇到性能问题。
以下是包含HTML AltChunk的Flat OPC XML文件示例(您应该能够将其保存并拖到Word上或执行文件&gt;打开):
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<pkg:package xmlns:pkg="http://schemas.microsoft.com/office/2006/xmlPackage">
<pkg:part pkg:contentType="application/vnd.openxmlformats-package.relationships+xml" pkg:name="/_rels/.rels">
<pkg:xmlData>
<rel:Relationships xmlns:rel="http://schemas.openxmlformats.org/package/2006/relationships">
<rel:Relationship Id="rId1" Target="word/document.xml" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument"/>
</rel:Relationships>
</pkg:xmlData>
</pkg:part>
<pkg:part pkg:contentType="application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml" pkg:name="/word/document.xml">
<pkg:xmlData>
<w:document xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" >
<w:body>
<w:altChunk r:id="rId2"/>
<w:sectPr>
<w:pgSz w:code="1" w:h="15840" w:w="12240"/>
<w:pgMar w:bottom="1440" w:left="1440" w:right="1440" w:top="1440"/>
</w:sectPr>
</w:body>
</w:document>
</pkg:xmlData>
</pkg:part>
<pkg:part pkg:contentType="application/vnd.openxmlformats-package.relationships+xml" pkg:name="/word/_rels/document.xml.rels">
<pkg:xmlData>
<rel:Relationships xmlns:rel="http://schemas.openxmlformats.org/package/2006/relationships">
<rel:Relationship Id="rId2" Target="../chunk.html" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/aFChunk"/>
</rel:Relationships>
</pkg:xmlData>
</pkg:part>
<pkg:part pkg:compression="store" pkg:contentType="text/html" pkg:name="/chunk.html">
<pkg:binaryData>PGh0bWw+PGJvZHk+PHA+PGEgaHJlZj0iaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tIj5TdGFja092ZXJmbG93PC9hPjwvcD48L2JvZHk+PC9odG1sPg==</pkg:binaryData>
</pkg:part>
<pkg:part pkg:contentType="application/vnd.openxmlformats-package.relationships+xml" pkg:name="/_rels/chunk.html.rels">
<pkg:xmlData>
<rel:Relationships xmlns:rel="http://schemas.openxmlformats.org/package/2006/relationships"/>
</pkg:xmlData>
</pkg:part>
</pkg:package>
二进制数据是
"<html><body><p><a href="http://stackoverflow.com">StackOverflow</a></p></body></html>"
base64编码(根据Flat OPC XML格式的要求)。