2012-01-19 3 views
0

У меня есть главная таблица в одном документе слова.Как скопировать строки из таблицы в другую таблицу в Word 2007 с помощью interop и C#

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

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

Таблица1:

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

имя_задание колонна является ключевым столбцом, пользователь может выбрать ABC, PQR, ABC, PQR, ЛМН

Это должно создать таблицу следующим образом:

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

Я не могу использовать table.Cell().Range.Text, так как это форматирование теряется.

+0

Когда вы говорите, что не можете использовать table.Cell(). Range.Text, у вас есть код, в котором вы его пробовали, и он не работает. согласно MS это можно сделать даже с форматированием. Оформить эту ссылку для стартеров http://msdn.microsoft.com/en-us/library/aa537149%28v=office.11%29.aspx – MethodMan

+0

Мне нужно обеспечить форматирование основной таблицы, которую я переношу, Я не думаю, что это можно было бы сделать с Range.Text – gizgok

+0

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

ответ

0

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

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

Этот символ хранит структурную информацию ячейки, а отображаемые символы 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; 

       } 

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

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