以编程方式编写Word单元格中的文本行

时间:2013-03-01 20:54:52

标签: c# ms-word office-interop

我正在开发一个创建Word文档的.Net控制台应用程序 我的Visual Studio项目引用了Microsoft.Office.Interop.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 =“Second Line”;
异常消息(从法语翻译成英语):行尾无效动作

有人可以解释一下我的代码有什么问题吗?

1 个答案:

答案 0 :(得分: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生成文档是更可持续的方式。