C# 将行添加到垂直合并的单元格c
我正在做一个WordAutomation项目,需要处理这个表。我正在使用VisualStudio2010和Word 2010 我得到了这张桌子:C# 将行添加到垂直合并的单元格c,c#,merge,ms-word,cell,C#,Merge,Ms Word,Cell,我正在做一个WordAutomation项目,需要处理这个表。我正在使用VisualStudio2010和Word 2010 我得到了这张桌子: +----------------------------------------------+ | 1,1 | |----------------------------------------------| | | 2,2
+----------------------------------------------+
| 1,1 |
|----------------------------------------------|
| | 2,2 | 2,3 |
| 2,1 |-----------------|---------------|
| | 3,2 | 3,3 |
|----------------------------------------------|
| 4,1 |
+----------------------------------------------+
我想在合并单元格中添加一行。我正在使用这个函数:
table.Rows.Add(table.Rows[2]);
当单元格未垂直合并时,该函数工作正常。但是,在垂直合并的单元格上执行时,会引发此错误:
"Cannot access individual rows in this collection because the table has vertically merged cells."
我想要这个输出:
+----------------------------------------------+
| 1,1 |
|----------------------------------------------|
| | 2,2 | 2,3 |
| 2,1 |-----------------|---------------|
| | 3,2 | 3,3 |
| |-----------------|---------------|
| | 4,2 | 4,3 |
|----------------------------------------------|
| 5,1 |
+----------------------------------------------+
任何解决办法都将不胜感激 在使用InteropAPI进行类似的Word自动化项目时,我遇到了同样的问题。不幸的是,当存在合并行时,无法将行插入表中,因为无法引用该行 我假设您正在使用预先创建的word文档,并将其用作模板 我能想到的唯一解决办法是将所有垂直合并的单元拆分回正常状态。在您的情况下,现在将2,1->4,1作为有效单元格,您可以调用
table.Rows.Add(table.Rows[2]);
然后,在使用添加行后,可以合并单元格
document.Tables[1].Cell(2,1).Merge(document.Tables[1].Cells(4,1));
下面的代码将在第4行之前向表中添加一个或多个未知的行,然后将左侧的单元格合并到原始第4行
int addedRows = 0;
foreach (string text_for_cell in listOfString)
{
// add a new row and set the contents of the cell
var new_row = document.Rows.Add(table[1].Rows[4 + addedRows]);
new_row.Cell[2].Range.FormattedText.Text = text_for_cell;
addedRows++;
}
document.Tables[1].Cells(2,1).Merge(document.Tables[1].Cells(3 + addedRows, 1);
这样做的缺点是您正在引用行和列索引。因此,对原始模板的任何更改也需要反映在代码中。我建议您看看第三方工具包。这最终会为你节省大量的时间和金钱。我知道Docentric,所以我会告诉你它如何解决你的问题 首先,您必须决定是要使用固定文档(例如,您将以编程方式创建其整个DOM和内容),还是要使用流文档(例如,您将使用布局、格式和占位符为数据创建模板),然后在运行时将数据合并到模板中 这两个选项都可以应用于您的案例中。模板文档更容易、更快速地准备。所以,若您可以在启用Docentric的模板中描述规则,那个么您就可以开始了。因为您可以使用逻辑语句使用条件内容,所以使用这种方法可能可以解决您的问题 但如果没有,您仍然可以使用Docentric的DOM类从头开始创建文档 在这两种情况下,您都可以选择.docx、.pdf或.xps输出。由于报表生成是基于OpenXML的,因此无需安装Word,而且可以非常有效地在服务器上使用
如何从模板创建报告以提供线索 我知道这是一篇老文章,但我在向表中添加行时遇到了类似的问题,如下所示:
+----------------------------------------------+
| | 1,2 | 1,3 |
| 1,1 |-----------------|---------------|
| | 2,2 | 2,3 |
|----------------------------------------------|
| 3,1 | 3,2 | 3,3 |
+----------------------------------------------+
问题是您不能直接访问表行,它会抛出您提到的错误。此代码不起作用:
table.Rows[2]
但您仍然可以添加行和访问单元格,例如,在我的示例中,添加新行4并填充我使用的单元格:
int count = table.Range.Cells.Count;
table.Rows.Add();
table.Range.Cells[count + 1].Range.Text = "4,1 value";
table.Range.Cells[count + 2].Range.Text = "4,2 value";
table.Range.Cells[count + 3].Range.Text = "4,3 value";
因此,在您的示例中,解决方案是添加一个新行,并引用单元格3.3。我还没有测试过这段代码,但应该这样做:
table.Rows.Add(table.Range.Cells[6]);
table.Range.Cells[7].Range.Text = "4,2 value";
table.Range.Cells[8].Range.Text = "4,3 value";
您必须获取表的范围,然后获取该范围外的单元格集合,最后使用item逐个单元格。使用代码将表添加到文档中。所以我已经知道了这些合并功能。我的表格是从工厂添加的,然后将信息添加到单元格中并添加新行。所以我真正想要的是一种方法,用一个垂直合并的单元格添加行,而不必在之后合并它们。因此,我不必在表格出厂后进行任何表格格式化。一种方法是识别合并的单元格,拆分它们,执行操作,然后再次合并它们。但我也不确定这是否可行。这听起来是一个不错的工具包,但它不是我真正想要的。