我正在开发一个创建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”;
异常消息(从法语翻译成英语):行尾无效动作
有人可以解释一下我的代码有什么问题吗?
答案 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生成文档是更可持续的方式。