2013-03-01 80 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生成文档是更可持续的方式。

相关问题