2013-03-01 113 views
1

我正在開發一個創建Word文檔的.Net控制檯應用程序。
我的Visual Studio項目具有對Microsoft.Office.Interop.Word程序集的引用。以編程方式編寫Word單元格中的文本行

我想創建一個表格單元格。
我想在單元格中寫入兩行文本。
第一行必須是粗體。

這裏是我的代碼:

l_table = l_range.Tables.Add(l_range, 1, 1); 
l_table.Borders.Enable = 0; 
l_table.Rows.AllowBreakAcrossPages = 0; 

l_cellRange = l_table.Cell(1, 1).Range; 
l_cellRange.Text = "First Line"; 
l_cellRange.Bold = 1; 

l_cellRange.InsertParagraphAfter(); 
l_cellRange.Collapse(WdCollapseDirection.wdCollapseEnd); 
l_cellRange.Text = "Second Line"; 
l_cellRange.Bold = 1; 

下面的代碼行引發了一個異常:l_cellRange.Text = 「二線」;
例外信息(從法語翻譯成英語):在行尾有無效的行爲

有人可以解釋我的代碼有什麼問題嗎?

+1

如果您剛開始生成Word文檔 - 我建議您沿着不同的路徑走 - 從XML創建文檔而不是直接控制Word過程。進行Google搜索以獲取更多信息,但您可以從以下文章開始:http://www.codeproject.com/Articles/15004/Create-simple-Word-2007-documents-without-needing – kape123 2013-03-01 21:02:04

回答

3

您錯過了致電Range.MoveEnd()的電話。

根據MSDN documentation on Range.InsertParagraphAfter,當您插入段落時,範圍將擴展爲包括新段落。

然後,當您摺疊已包含新段落的範圍時,您將範圍的開始和結束位置移動到末尾段落標記後的MSDN's article on Range.Collapse特別提到了這種效應以及如何解決這個問題。

總之,你需要你的電話後插入MoveEnd()Collapse()

l_cellRange.Collapse(WdCollapseDirection.wdCollapseEnd); 
l_cellRange.MoveEnd(WdUnits.wdCharacter, -1); 
l_cellRange.Text = "Second Line"; 

這將移動範圍開始和結束位置到剛剛結束的段落標記前,讓你如預期插入文本。

說了這麼多,我同意kape123。通過XML生成文檔是更可持續的方式。

相關問題