Скопируйте форматированный текст из ячейки в документе "Таблица в Word" в TRichEdit
Я использую OLE Automation для работы с документом Word. Я могу получить содержимое ячейки, используя
Table.Cell (rowIndex, colIndex).Range.FormattedText
он возвращает OleVariant. Я не уверен, что использую правильное свойство, и понятия не имею, как вставить этот текст в TRichEdit, не теряя форматирование (например, текст в верхнем индексе)
2 ответа
Я создал макет формы только с рихедитом и кнопкой на нем. Приведенный ниже код, возможно, не лучший способ добиться этого, но он работает с Word 2007 на Win XP.
uses Word_TLB;
procedure TForm1.Button1Click(Sender: TObject);
var
wordApp : _Application;
doc : WordDocument;
table : Word_TLB.Table;
filename : OleVariant;
aRange : Range;
aWdUnits : OleVariant;
count : OleVariant;
begin
//need to back up 2 characters from range object to exclude table border.
//Remove 1 character only if using selection
count := -2;
aWdUnits := wdCharacter;
filename := '"H:\Documents and Settings\HH\My Documents\testing.docx"';
RichEdit1.Clear;
try
wordApp := CoWordApplication.Create;
wordApp.visible := False;
doc := wordApp.documents.open( filename, emptyparam,emptyparam,emptyparam,
emptyparam,emptyparam,emptyparam,emptyparam,
emptyparam,emptyparam,emptyparam,emptyparam,
emptyparam,emptyparam,emptyparam,emptyparam );
table := doc.tables.item(1);
aRange := table.cell(3,1).Range;
aRange.MoveEnd(aWdUnits, count); //This is needed so border is not included
aRange.Copy;
RichEdit1.PasteFromClipboard;
RichEdit1.Lines.Add('');
finally
wordApp.quit(EmptyParam, EmptyParam, EmptyParam);
end;
end;
И это результат:,
Единственное, что многострочный текст появился в richedit как одна строка.
Я отказался от решения этой проблемы с OLE Automation. TRichView дает желаемую функциональность, но это не бесплатно...