我的表单上有ListView包含名称和数字,我必须提供打印MSWord文档,并将这些数据填入文档表中。一切都适用于英文字符,但当我尝试发送一些东欧或俄罗斯字符时,它在文档中可见为“?”或者一些“垃圾”。此外,我无法将这些字符从文档读回应用程序。
我的问题是:
"ЉЊĐŠŽČ"
等字符发送到Word文档?简而言之,代码如下所示:
word := CreateOleObject('Word.Application');
word.Visible := true;
doc := word.documents.Open(ExtractFilePath(Application.ExeName) + '\tpl.doc');
table := word.ActiveDocument.Tables.Item(1);
table.Cell(1,2).Range.Text := 'MY TEXT';
word.ActiveDocument.Close;
word.Quit;
word := UnAssigned;
doc := UnAssigned;
table := UnAssigned;
我可以更改字体的name
,size
和color
属性,但不能使用charset
属性进行更改。
任何人
已安装软件:
答案 0 :(得分:4)
问题来自于您使用后期绑定通过OLE自动化调用Word。
因此,Range.Text
不是一种期望WideString(Unicode)内容的方法,而是Delphi 7下的纯ASCII文本。
首先解决方案可能是使用Delphi 2009及更高版本。新的string
类型使这种Unicode赋值透明。
在Delphi 7下,强制将类型转换为WideString:
table.Cell(1,2).Range.Text := WideString('MY TEXT');
或使用临时变量,如下所示:
var tmp: WideString;
tmp := 'ЉЊĐŠŽČ'
table.Cell(1,2).Range.Text := tmp;
另一种可能是使用不后期绑定,但直接声明Office的OLE接口,从“项目”菜单导入“ Microsoft Word ???对象库” IDE。
导入的接口中将包含宽字符串类型,例如:
Range = interface(IDispatch)
['{0002095E-0000-0000-C000-000000000046}']
function Get_Text: WideString; safecall;
procedure Set_Text(const prop: WideString); safecall;
(...)
property Text: WideString read Get_Text write Set_Text;
所以你不再有任何关于Ansi charset的问题。