Word Interop копировать форматированный текст ячейки таблицы
Я пишу дополнение для word для автоматизации редактирования шаблона протокола.
в шаблоне есть таблица, и я хочу извлечь/скопировать отформатированный текст ячейки внутри таблицы.
сейчас я делаю это так:
Range formattedText = agendaTable.Rows[i].Cells[1].Range;
string temp = formattedText.WordOpenXML;
позже я хочу вставить текст в другую ячейку таблицы:
otherTablesRow.Cells[1].Range.InsertXML(temp);
формирование является правильным, за исключением linebreak ("ra") в конце, который происходит из диапазона, где я извлекаю текст из клетка. Похоже, word использует linebreak для обозначения конца ячеек.
таким образом, после вставки текста в ячейку других таблиц у меня есть два linebreaks. Как я могу избежать дублирования переносы? Кто-нибудь знает альтернативный метод извлечения содержимого ячеек?
Update: может быть, я задаю свой вопрос по-другому.
моя общая проблема заключается в том, чтобы скопировать более одного отформатированного текстового диапазона в память и позже вставить его где-то в том же документ.
2 ответов
попробуйте следующий код, он копирует текст и форматирование из одной ячейки в другую:
var copyFrom = agendaTable.Rows[i].Cells[1].Range;
var copyTo = otherTablesRow.Cells[1].Range;
copyFrom.MoveEnd(WdUnits.wdCharacter, -1);
copyTo.FormattedText = copyFrom.FormattedText;
есть конец ячейки символов в agendaTable диапазоне, который портит целевую ячейку в вашем примере; используя MoveEnd мы копируем все, кроме конца ячейку символ (последний символ).
вы можете скопировать и вставить выбор таким образом:
public void Copy()
{
var selection = (Range)Application.Selection;
selection.Copy();
}
public void Paste()
{
var selection = (Range)Application.Selection;
selection.PasteSpecial();
}
где первый выбор-это место, откуда вы копируете, а второй-место, где будет вставлена копия.
EDIT: копирование форматированного текста без использования буфера обмена (это простая копия XML):
List<string> copies = new List<string>();
public void Copy()
{
Microsoft.Office.Interop.Word.Selection wordSelection = Application.Selection;
if (wordSelection != null && wordSelection.Range != null)
{
copies.Add(wordSelection.get_XML());
}
}
public void Paste(int index)
{
Microsoft.Office.Interop.Word.Selection wordSelection = Application.Selection;
if (wordSelection != null && copies.Count > index)
{
wordSelection.InsertXML(copies[index]);
}
}