4

複数のテーブルを含むドキュメントがあります。それらのテーブルのいくつかを埋める必要があります。私が抱えている問題は、それらをどのように見つけるかです。私はそれらを通して相互作用することができます

var doc = document.MainDocumentPart.Document;
var tables= doc.Body.Elements< Table >();

しかし、どうすれば特定のテーブルを見つけることができますか? テーブルは変わる可能性があるので、注文に頼ることはできません。特定のテーブルの前にブックマークを配置し、ブックマークの後の最初のテーブルを見つけることを考えていましたが、その方法を見つけることができませんでした...

では、ドキュメント内の特定のテーブルを見つけるにはどうすればよいでしょうか。

それを行うためのより良い方法があれば、私に知らせてください。

4

4 に答える 4

11

表にキャプションを付けます。

最初に Word でテーブルを作成し、そのうちの 1 つを右クリックして [テーブルのプロパティ]、[代替テキスト] を選択し、[タイトル] ボックスに入力して、保存して閉じます。

OpenXML で、特定のキャプションを持つテーブルを見つけます。

IEnumerable<TableProperties> tableProperties = bd.Descendants<TableProperties>().Where(tp => tp.TableCaption != null);
foreach(TableProperties tProp in tableProperties)
{
    if(tProp.TableCaption.Val.Equals("myCaption")) // see comment, this is actually StringValue
    {
        // do something for table with myCaption
        Table table = (Table) tProp.Parent;
    }
}
于 2013-03-20T17:58:42.357 に答える
3

この記事では、コンテンツ コントロールを使用した優れたソリューションについて説明します。

http://msdn.microsoft.com/en-us/library/cc197932(v=office.12).aspx

于 2014-03-17T17:25:05.703 に答える
0

私は解決策を見つけました。これは私が思いついた最も美しい解決策ではありませんが、うまくいくようです。少なくとも私が試したドキュメントについては。

テーブルを作成します。テーブルの任意の場所にブックマークを挿入してから、ブックマークを見つけます。

var bookmarkStart = doc.Body.Descendants<BookmarkStart>().Where(r => r.Name == "tableBookmark");
if (bookmarkStart != null)
{
    var test  = bookmarkStart.First().Parent.Parent.Parent.Parent;
    if (test.GetType() == typeof (DocumentFormat.OpenXml.Wordprocessing.Table))
        myTable = (Table)test;
}

より良い解決策を教えてください!!! :)たとえば、Parent.Parent.Parent.Parentを使用する代わりに、テーブルを検索する再帰メソッドを作成する可能性があります。

于 2013-03-20T11:52:25.993 に答える