0

我在一个 word 文档中有一个主表。

表的第一列有键。我必须根据用户选择的键(行)创建另一个表。

用户可以多次选择一个键(行)。

表格1:

TaskName    Data       Group
abc         data1      group1
pqr         data2      group2
lmn         data3      group3

TaskName 列是关键列,用户可以选择 abc,pqr,abc,pqr,lmn

这应该生成一个表,如下所示:

TaskName    Data       Group
abc         data1      group1
pqr         data2      group2
abc         data1      group1
pqr         data2      group2
lmn         data3      group3

我不能使用table.Cell().Range.Text这种格式丢失。

4

1 回答 1

0

我首先尝试使用 Word.Selection,但我想不出一种方法可以一次取一行并复制粘贴它。使用 Word.Selection 可能是可行的。

我想到的下一件事是一次复制粘贴一个单元格,但 Range 属性保留了表格单元格结构。我查看了 Word 模型并试图找出每行之后是否有某种终止字符以将其区分为行尾。有这样一个字符,但它适用于所有细胞。要找到这个字符,请单击办公室按钮(除了主页),单击单词选项,单击显示,在部分中始终在屏幕上显示这些格式标记,勾选显示所有格式标记。这将显示 Word 文档中的所有不可打印字符。这是您可以看到的符号 ¤。

该符号保存单元格的结构信息,暴露的 ANSI 字符为 13 + 7。13 是段落标记,7 是“单元格结束”标记。这包含指向文件中单元结构管理的更多信息。在 Word 2007 中,这两个字符显示为一个字符,因此我们需要做的是从单元格的 Range 中删除这个字符。

我创建了一个列表来保存我需要的主表中的所有单元格。

List<Microsoft.Office.Interop.Word.Cell> masterTableCells=new List<Microsoft.Office.Interop.Word.Cell>();

之后,以下代码从 Range 中删除最后一个字符

                    Microsoft.Office.Interop.Word.Table table = b.Range.Tables[1];

                table.ID = b.Name;
                for (int colCounter = 1; colCounter <= masterTable.Columns.Count; colCounter++)
                {
                    Microsoft.Office.Interop.Word.Range sourceRange = masterTable.Cell(1, colCounter).Range;
                    Microsoft.Office.Interop.Word.Range targetRange = table.Cell(1, colCounter).Range;
                    object oCharacter = Microsoft.Office.Interop.Word.WdUnits.wdCharacter;
                    object negOne = -1;
                    sourceRange.MoveEnd(oCharacter, negOne);
                    targetRange.MoveEnd(oCharacter, negOne);
                    targetRange.FormattedText = sourceRange.FormattedText;

                }

目的是获取格式化文本,并通过从每个单元格 Range 中删除字符,我们能够仅指向该特定单元格的结构,而不是整个表格。

如果您尝试仅使用格式化文本属性运行循环,您将收到表损坏错误。希望这可以帮助。

于 2012-01-24T08:39:48.490 回答