Самый эффективный способ создания и расширения таблиц в Word - это «сбросить» содержимое в текстовом формате с разделителями, а затем преобразовать его в таблицу. Делать что-либо еще - например, создавать таблицу, затем записывать ячейку за ячейкой или добавлять строку за строкой - сравнительно медленно. И чем длиннее стол, тем медленнее он становится! Это связано с тем, что Word динамически размещает страницы при каждом изменении.
Если вы хотите начать со строки заголовка, уже существующей в документе, или вам необходимо расширить существующую таблицу, вставьте содержимое с разделителями непосредственно под существующей таблицей и преобразуйте в таблицу. В тестах столбцы таблицы не всегда точно совмещаются с использованием этого метода. В качестве обходного пути таблицу можно вставить в другое место, а затем переместить в существующую таблицу, где она должна адаптировать правильную ширину столбцов.
Выборка данных с разделителем полей с запятой и разделителем записей char (13). Обратите внимание, что в качестве разделителя полей может использоваться любой символ, но в качестве разделителя записей требуется ANSI 13:
Test; один; 3; Конец
Новая строка; Два; 4; Конец
Вставьте и создайте новую таблицу в закладке с именем Tbl
. Предполагается, что doc
в качестве Word.Document
и missing
в качестве объекта уже определены и созданы:
string tableData = "Test;One;3;End\nNew line;Two;4;End";
string bkmName = "TableTarget";
if (doc.Bookmarks.Exists(bkmName))
{
Word.Range rngTable = doc.Bookmarks[bkmName].Range;
rngTable.Text = tableData;
Word.Table tbl = rngTable.ConvertToTable(";", missing, missing, missing, missing,
missing, missing, missing, missing, missing, missing, missing, missing, missing,
missing, Word.WdDefaultTableBehavior.wdWord8TableBehavior);
}
Добавить к существующей таблице (первой в документе):
string tableData = "Test;One;3;End\nNew line;Two;4;End";
//Target table, to be extended
Word.Table tbl = doc.Tables[1];
Word.Range rngTbl = tbl.Range;
rngTbl.Collapse(Word.WdCollapseDirection.wdCollapseEnd);
//Target for inserting the data (end of the document)
Word.Range rng = doc.Content;
rng.Collapse(Word.WdCollapseDirection.wdCollapseEnd);
rng.Text = tableData;
Word.Table tblExtend = rng.ConvertToTable(";", missing, missing, missing, missing,
missing, missing, missing, missing, missing, missing, missing, missing, missing,
missing, Word.WdDefaultTableBehavior.wdWord8TableBehavior);
//Move the new table content to the end of the target table
tblExtend.Range.Cut();
rngTbl.PasteAppendTable();