2012-03-18 8 views

答えて

8

はエリック・ホワイトによってFourth and Final Screen-Cast in Series on Adding/Updating the TOC in OpenXML WordprocessingML Documentsを見てください。

希望に役立ちます!

UPDATE:私はこの機能がサポートされていないことがわかりMSDNフォーラムから


According FAQ

8)Word文書にTOC(目次)を生成する方法は?

Open XML SDK 2.0では、この機能がサポートされていません。しかし、 小さなTOCをWordアプリケーションで生成し、 TOCをプログラムで生成する方法を確認するには、Open XML SDK生産性ツールのReflectorコンポーネントのドキュメント でTOC部分を反映させることができます。より詳細な情報については、 はを参照してください。


私は、このシナリオを使用することを提案することができ、以下の私たちのコメントに基づいてUPDATE 2


  1. 手動で空のDOCXファイルを作成し、TOCを挿入その中。
  2. 次に、このファイルを保存し、TOCプレースホルダを含む空のファイルを生成するためのC#コードを提供するOpenXML SDK 2.0ツールで開きます。
  3. 次に、このDOCXファイルに必要なすべてのデータをプログラムによってフラッシュして保存します。
  4. さらに、データがフラッシュされると(またはドキュメントが開かれた後に)TOCを自動更新するメカニズムを提供する必要があります。これを行うにはいくつかの選択肢があります - 上で提供したEric Whiteへのリンクからのスクリーンキャスト3-5を参照してください。特に、私は5th oneに注意を払う必要があると思います - "TOCを含むドキュメントが開かれたときにAutoOpenマクロを使用してTOCを更新する方法を示します"。

これらのすべてはややこしく見えますが、私はそれが役立つことを願っています。

+0

ありがとうございますが、リンクが壊れています。 [これは](http://openxmldeveloper.org/blog/b/openxmldeveloper/archive/2011/08/22/exploring-tables-of-contents-in-openxml-wordprocessingml-documents-part-4.aspx)でした? – Yeseanul

+0

私はリンクを固定しています。そして - はい - これはopenxmldeveloper.orgに掲載されたものと同じです...いくつかの研究の後、私はいくつかの新しい詳細で自分の答えを調整しました –

+0

返信いただきありがとうございます。また、ほとんどのMSDN関連のコンテンツを読みましたが、このソリューションを実装する方法はわかりません。さらに、誰も例を提供していないようだ。結局のところ、目次はドキュメントの重要な部分です...私はOpenXML SDKが何らかの形でカバーしていると思っていました(少なくとも、誰かが使いやすい使いやすいソリューションを見つけ出したと思いました)。 – Yeseanul

3

Dmitri Pavlov(@DmitryPavlov)のおかげです。

私自身の質問に答えたいとは思わないが、これは私が取った手順を説明するためのものです。

興味がある人のためのアドバイスは、エリックホワイト()の5つの部分からなるスクリーンキャストを見ることです。これは目次の追加と更新に関するすべての情報を持っています(これ以上)。

私の解決策はテンプレート(必要なものすべてのスタイル(ヘッダー1-5、TOCスタイルなど)を持っていたちょうど普通の空のドキュメント)を使用することでした。これは、スタイルの問題をすばやく解決するために特に便利です(TOCを持つ新しい文書には新しいstyle.xmlが作成されますが、このファイルにはいくつかの追加データが含まれているためTOCの階層はヘッダー2はヘッダー1の子、ヘッダー3はヘッダー2の子などです)。したがって

  1. は、Word文書を作成し、後でプログラムで追加されることを期待するすべての要素を追加します(例えば、ヘッダ1-5、目次など)。すべての内容を削除して文書を保存します(必要なすべての要素のスタイルを作成する理由)。

  2. 個人的に私のプロジェクトのリソースとしてテンプレート(ステップ1で作成したファイル)を追加しました。

  3. コードで、テンプレートの新しいコピーを作成します(これが実際に作業するファイルになります)。私は使用しました:

    byte[] stream = Properties.Resources.Template; 
    File.WriteAllBytes(@"D:\Template.docx", stream); 
    File.Copy(@"D:\Template.docx", @"D:\New.docx"); 
    
  4. すべてのデータをこのドキュメントにフラッシュします。

  5. は(このためにスクリーンキャスト3を参照してください)スクリーンキャスト2、3または4からプロジェクトにソースファイルを追加します - これらの記事の最後に、あなたはTocAdder.zipをダウンロードするためのリンクがあります。または、TocAdder.dllへの参照を追加するだけです。

  6. TOCを挿入します。例:

    using (WordprocessingDocument wdoc = WordprocessingDocument.Open(@"D:\New.docx", true)) 
    { 
        XElement firstPara = wdoc 
         .MainDocumentPart 
         .GetXDocument() 
         .Descendants(W.p) 
         .FirstOrDefault(); 
        TocAdder.AddToc(wdoc, firstPara, 
         @"TOC \o '1-3' \h \z \u", null, null); 
    } 
    
  7. 新しく作成されたドキュメントのスタイルをテンプレートのスタイルに置き換えます。 MSDNのReplacing the Styles Parts in Word 2010 Documents by Using the Open XML SDK 2.0からこのリソースを使用できます。ここでも、例:

    string fromDoc = @"D:\Template.docx"; 
    string toDoc = @"D:\New.docx"; 
    var node = WDExtractStyles(fromDoc, false); 
    if (node != null) 
        WDReplaceStyles(toDoc, node, false); 
    node = WDExtractStyles(fromDoc); 
    if (node != null) 
        WDReplaceStyles(toDoc, node); 
    
  8. は、必要に応じてWordがアップしますモーダルダイアログボックスで問題を回避するために、スクリーンキャスト3、4または5に記載の方法のいずれかを使用します。

これは誰かにとって役に立ちます。

+0

ファイルではなくストリームで作業しているときにモーダルダイアログボックスを削除することはできますか?私はmemorystreamを使用してドキュメントを生成しているので、ダウンロードのためにユーザーに提供します。今度は、このモーダルダイアログを避ける方法が見つからないので、目次を更新するには[はい]をクリックする必要があります。 –

関連する問題