我有一个包含多个表格的文档。 我需要填写其中一些表格。 我遇到的问题是如何找到它们? 我可以通过他们进行互动
var doc = document.MainDocumentPart.Document;
var tables= doc.Body.Elements< Table >();
但我如何找到特定的表?表格可以改变,所以我不能依赖订单。 我想把书签放在特定的桌子前面,然后找到书签后面的第一张桌子,但是我找不到怎么做...
那么,如何在文档中找到特定的表?
如果有更好的方法,请告诉我。
答案 0 :(得分:5)
给表格标题。
首先在Word中创建表格,然后右键单击其中一个表格,表格属性,替换文字,填写标题框,保存,关闭。
现在在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;
}
}
答案 1 :(得分:1)
对于这个更优雅的解决方案,使用bookmarkstart作为定位器将是
BookmarkStart bookmark = YourBookMarkStart;
OpenXmlElement elem = bookmark.First().Parent;
//isolate tabel
while (!(elem is DocumentFormat.OpenXml.Wordprocessing.Table))
elem = elem.Parent;
var table = elem; //found
答案 2 :(得分:1)
本文介绍了使用内容控件的简洁解决方案:
http://msdn.microsoft.com/en-us/library/cc197932(v=office.12).aspx
答案 3 :(得分: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