2

多くのテーブルを含むドキュメントがあります。C# と Microsoft.Office.Interop.Word を使用してこれらのテーブルを変更したいと考えています。Tables インターフェイスを使用してすべてのテーブルを反復処理できることを読みました。

質問: テーブルに名前/ID を付けて、その名前でテーブルにアクセスすることは可能ですか? (Powerpoint オートメーションの図形と同様)。

質問 2: Microsoft.Office.Interop.Word でそれができない場合、Aspose Words のような代替手段はより便利な方法を提供しますか?

4

1 に答える 1

5

テーブルに名前/IDを付けて、その名前でテーブルにアクセスすることは可能ですか?

Table オブジェクトはIDプロパティを提供しますが、これは Web ページとして保存されたドキュメントのみです。これはあなたが望むものではないと思います。

まだ可能ですが、API では提供されていません。この機能は自分で作成する必要があります。次の 2 つの方法があります。

1:相互運用機能を使用すると、(うまくいけば) 一意の ID を返すテーブルのハッシュコードを取得できます。例えば:

Word.Application wordApp = new Word.Application();
Word.Document wordDoc = wordApp.Documents.Open(@"C:\Users\username\Documents\HasTables.docx");
var tableID = wordDoc.Tables[1].GetHashCode();

完全な解決策は、ドキュメント内のすべてのテーブルの ID をディクショナリまたはキーと値のペアのマップを持つ別のコレクション型に格納することです。これらの ID は Word セッション間で保持されないことに注意してください。したがって、同じセッションを超えてテーブルを識別できるようにする必要がある場合は、別の方法が必要になります。

2: OpenXML (.docx 形式の場合) および/または WordML (Word 2003 XML の場合、単に文書を .docx にアップグレードできない場合) を使用して、w:tbl 要素ごとに独自の Id または Name 属性を作成します。独自の名前空間を使用して曖昧さをなくすことができます。これは、Word セッション間でも維持されます。これは相互運用とは異なる世界ですが、私の意見では、はるかに優れた方法です (パフォーマンス、利用可能なドキュメント)。

Microsoft.Office.Interop.Word でそれができない場合、Aspose Words のような代替手段はより便利な方法を提供しますか?

いいえ、Aspose はTableCollectionまたはTableオブジェクトでこのようなものを提供していません。

于 2013-04-20T03:32:57.383 に答える