Как скопировать строки из таблицы в другую таблицу в Word 2007 с помощью взаимодействия и C # - PullRequest
0 голосов
/ 19 января 2012

У меня есть главная таблица в одном документе слова.

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

Пользователь может выбрать ключ (строку) более одного раза.

Table1:

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, так как при этом форматирование теряется.

1 Ответ

0 голосов
/ 24 января 2012

Сначала я попробовал использовать Word.Selection, но я не мог понять, каким образом я могу взять одну строку за раз и скопировать и вставить ее. Это может быть возможно сделать с помощью Word.Selection.

Следующим, о чем я подумал, было копирование, вставляющее ячейку за раз, но свойство Range сохраняет структуру ячейки таблицы. Я посмотрел на модель Word и попытался выяснить, есть ли какой-нибудь символ завершения после каждой строки, чтобы отличить его как конец строки. Есть такой персонаж, но он для всех клеток. Чтобы найти этот символ, нажмите на кнопку «Офис» (кроме «Домой»), нажмите «Параметры слова», нажмите «Показать», в разделе всегда отображать эти метки форматирования на экране , отметьте галочкой все метки форматирования. Это отображает все непечатаемые символы в текстовом документе. Это символ, который вы сможете увидеть ¤.

Этот символ содержит структурную информацию ячейки, а открытые символы ANSI - 13 + 7. 13 - знак абзаца, а 7 - маркер конца ячейки. Это содержит дополнительную информацию, которая указывает на управление структурой ячейки в файле. В Word 2007 эти два символа отображаются как один символ, поэтому нам нужно удалить этот символ из диапазона ячейки.

Я создал список для хранения всех нужных ячеек из основной таблицы.

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

После этого следующий код удаляет последний символ из диапазона

                    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, мы можем указать только на структуру этой конкретной ячейки, а не на целые таблицы.

Если вы попытаетесь запустить цикл с использованием только свойства отформатированного текста, вы получите ошибку повреждения таблицы. Надеюсь, это поможет.

...