1

私の現在の目標は少し複雑ですが、できる限り説明しようと思います。過去数か月間のすべての使用の XML ログを生成しているソフトウェアがあります。他の誰かが、このデータから文書化に必要と思われるものを解析し、すべてを読み取り可能な HTML 形式に配置しました。

私の仕事は、彼らが生成した読み取り可能な HTML ファイルを、既存の Word (.docx) ドキュメントにリンクする方法を見つけることです。現在、ログを含むディレクトリを読み取り、次の形式の XML ドキュメントを作成する NAnt スクリプトがあります。

<root> 
    <HTML address=...>
        <ProductName name=...>
            <FunctionName name=...>
            </FunctionName>
        </ProductName>
    </HTML>
</root>

Word ドキュメント自体には、関数名を保持するテーブルが含まれています。これらのテーブルは、製品名を含むヘッダーの下にあります。関数に関連付けられたアドレスへのリンクをテーブル内の関数名の周りにラップして、ドキュメントを読んでいる人が関数名をクリックして関数のドキュメントを簡単に表示できるようにする必要があります。

Word文書を手続き的に変更した経験がないので、かなり複雑な手順のように見えるので、これについて本当に助けていただければ幸いです. 何らかの方法でプロセスを簡素化する場合は、XML ノードを簡単に並べ替えることができます。

これまでに調べたこと:

  • docx のフォーマットを調べる前に、関連付けられたデータを単純に検索し、ハイパーリンク タグをラップする別のスクリプトを書きたいと思っていました。残念ながら、docx を調べてみると、書式設定はそれよりもはるかに複雑なようです。

  • その後、Visual Studio 2010 で C# の使用を検討することにしました。 残念ながら、C# を使用した経験がないため (C と C++ しか使用したことがありません)、かなり混乱しました。ガイドと参考文献を探すのに数日を費やしましたが、それらはすべて非常に散らばっていて、探しているものが見つからないようです.

4

1 に答える 1

2

キットバッグの 3 つのテクニック:

  1. カスタム XML データ バインディング。これにより、XML ドキュメントを docx に挿入し、(XPath 経由でリンクされた) データを自動的に表示させることができます。ただし、ハイパーリンク内ではないため、これはうまくいかない場合があります。docx を Word で最初に開いたときに AutoOpen マクロを実行して、テキストをハイパーリンクに変換することもできます。

  2. AltChunk。これにより、docx 内に HTML を含めることができます。ただし、docx を変更する必要があります。(下記 3 参照)

  3. フラット OPC XML . これは docx を 1 つの XML ファイルとして表現したもので、Word 2007 以降では問題なく読み書きできます。これを使用すると、選択したツールを使用してハイパーリンクの内容を文字列置換できます。必要に応じて、この表現を使用してコンテンツを AltChunks に簡単に挿入することもできます。

ハイパーリンクを置き換える際のわずかな課題は、2 か所で行う必要があることです。1 つはドキュメント自体 (document.xml) でユーザーに表示されるリンク テキスト、2 番目はリンク先 URL (関係部分) です。これらは relId によって結び付けられます。

AltChunk を使えば一箇所で置換できます。ドキュメントの長さ、および何百もの AltChunks がある場合にパフォーマンスの問題が発生するかどうかはわかりません (基本的にハイパーリンクが 1 つしか含まれていない場合でも)。

HTML AltChunk を含む Flat OPC XML ファイルの例を次に示します (保存して Word にドラッグするか、[ファイル] > [開く] を実行できるはずです)。

<?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 形式で必要)。

于 2012-06-12T23:12:35.480 に答える