我使用 OLE 自动化处理 Word 文档。我可以使用获取单元格的内容
Table.Cell(rowIndex, colIndex).Range.FormattedText
它返回 OleVariant。我不确定我是否使用了正确的属性并且不知道如何在 TRichEdit 中粘贴此文本而不会丢失格式(例如上标文本)
我设置了一个模型表单,上面只有一个 Richedit 和一个按钮。下面的代码可能不是实现这一目标的最佳方法,但它适用于 Win XP 上的 Word 2007。
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 自动化解决这个问题。TRichView 提供了所需的功能,但它不是免费的......