Добавление таблиц в текстовый документ в цикле - PullRequest
0 голосов
/ 07 марта 2019

Я хочу добавить несколько таблиц в текстовый документ программно.Я пробовал следующий код для добавления таблицы (хотя в приведенном ниже примере кода я не использовал цикл)

        Microsoft.Office.Interop.Word.Table imageTable1 = wordDoc.Tables.Add(initialRange, 1, 2, ref oMissing, ref oMissing);
        imageTable1.Rows.SetHeight(40, WdRowHeightRule.wdRowHeightExactly);
        imageTable1.AllowAutoFit = true;

        var text = "ABC";

        // Add feature name in bold in table
        if (!string.IsNullOrEmpty(text))
        {
            Cell cell1 = imageTable1.Cell(1, 1);
            cell1.Range.Bold = 1;
            cell1.Range.Underline = WdUnderline.wdUnderlineSingle;
            cell1.Range.Font.Size = 18;
            cell1.Range.Font.AllCaps = 1;
            cell1.Range.Font.Name = "Times New Roman";
            cell1.VerticalAlignment = WdCellVerticalAlignment.wdCellAlignVerticalCenter;
            cell1.Range.Text = "ABC";
        }
        initialRange.Collapse(WdCollapseDirection.wdCollapseEnd);
        initialRange.InsertParagraphAfter();
        initialRange.Collapse(WdCollapseDirection.wdCollapseEnd);


        Microsoft.Office.Interop.Word.Table imageTable2 = wordDoc.Tables.Add(initialRange, 1, 2, ref oMissing, ref oMissing);
        imageTable2.Rows.SetHeight(40, WdRowHeightRule.wdRowHeightExactly);
        imageTable2.AllowAutoFit = true;

        text = "DEF"
        // Add feature name in bold in table
        if (!string.IsNullOrEmpty(text))
        {
            Cell cell1 = imageTable2.Cell(1, 1);
            //cell1.Range.InsertAfter(feature.Name + Environment.NewLine);
            cell1.Range.Bold = 1;
            cell1.Range.Underline = WdUnderline.wdUnderlineSingle;
            cell1.Range.Font.Size = 18;
            cell1.Range.Font.AllCaps = 1;
            cell1.Range.Font.Name = "Times New Roman";
            cell1.VerticalAlignment = WdCellVerticalAlignment.wdCellAlignVerticalCenter;
            cell1.Range.Text = "DEF";
        }

В приведенном выше коде переменная initialRange - это диапазон выбора в моем документе.С помощью приведенного выше кода я получаю перекрывающиеся таблицы, и только последняя таблица видна при открытии документа.Код создает все таблицы должным образом, но все таблицы размещаются в одном месте, и, следовательно, таблица, созданная последней, видна только.Я не могу понять, какие изменения необходимы в приведенном выше коде для отображения таблиц одна за другой.

Кроме того, я хотел бы добавить несколько строк текста между таблицами.Как я могу вставить текст, чтобы в моем документе была таблица, за которой следует соответствующий текст.

Спасибо

1 Ответ

0 голосов
/ 08 марта 2019

Проблема не в том, что таблицы перекрываются. Что происходит с кодом в вопросе, так это то, что следующая таблица вставляется в ячейку предыдущей таблицы. Причина в том, что initialRange не содержит всю таблицу, добавленную в Range - initialRange находится в первой ячейке таблицы.

Хитрость заключается в том, чтобы поместить объект Range в конец таблицы, примерно так:

initialRange = imageTable1.Range;
initialRange.Collapse(Word.WdCollapseDirection.wdCollapseEnd);
initialRange.InsertParagraphAfter();
initialRange.Collapse(Word.WdCollapseDirection.wdCollapseEnd);
...