2010-02-24 60 views
1

我當前嘗試使用OpenXml進行一些新操作,但最近遇到了一些麻煩。正如標題所說,我試圖使用Xml動態地將數據插入到表中。爲了在我的Worddoc中標識表格,我已經把它放在一個富文本內容控件中。在基於標記名的Word中查找內容控件

一切正常&看起來很好,直到我試圖搜索我的文檔中的富文本內容控件的標記名。在運行我的代碼時,我不斷收到「未設置爲對象實例的對象引用。」。

他是它發生在哪裏行:

SdtBlock ccWithTable = mainPart.Document.Body.Descendants<SdtBlock>().Where(r => r.SdtProperties.GetFirstChild<Tag>().Val == t.Name).Single(); 

我用下面的MSDN文檔,試圖達到我的目標,沒有更迭:

Inserting Repeating Data Items into a Word 2007 Table by Using the Open Xml API

如果有人能幫助我,我會很愛你很久。

回答

2

好的,我創建了一個實際上效果更好的工作臺。

首先,我檢索所有表從文件..

List<Table> tables = mainPart.Document.Body.Descendants<Table>().ToList(); 

然後我檢查SdtBlock的標籤參數這是我的表的家長,看它們是否匹配。

for (int f = 0; f < tables.Count; f++) 
{ 
    // If a table is found in the correct Content Control, fill it up with the data 
    if (tables.ElementAt(f).Parent.Parent.GetFirstChild<SdtProperties>().GetFirstChild<Tag>().Val == t.Name) 
    { //the rest of your code... 

t.Name是我想查找的內容的標籤。

對於這個結果我其實很滿意,因爲這解決了幾個相同的表格(在同一個文檔中,具有相同標籤)無法填充的事實。

小旁註:如果您的文檔中的其他表格不是動態的,最好嘗試抓住if。

tables.ElementAt(f).Parent.Parent.GetFirstChild<SdtProperties>().GetFirstChild<Tag>().Val 

會殺死那些人。