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

本文关键字:编程 方式编 写文本行 Word 单元格 | 更新日期: 2023-09-27 18:02:00

我正在开发一个。net控制台应用程序,它可以创建一个Word文档。
我的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 = "第二行";
异常消息(从法语翻译为英语):

行尾的无效操作

谁能解释一下我的代码有什么问题?

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

您正在错过与Range.MoveEnd()的通话。

根据范围上的MSDN文档。insert分段后,当你插入一个段落时,Range扩展到包含新的段落。

然后,当您折叠已经包含新段落的范围时,您将范围的开始和结束位置移动到结束段落标记之后的。MSDN关于Range的文章。崩溃特别提到了这个效果以及如何修复它。

简而言之,您需要在调用Collapse()之后插入MoveEnd():

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

这将把范围的开始和结束位置移动到段落结束标记之前,并允许您按预期插入文本。

说了这么多,我同意kape123的观点。通过XML生成文档是更可持续的方法。