gpt4 book ai didi

delphi - MS Word Ole Automation、ADO 和外来字符

转载 作者:行者123 更新时间:2023-12-01 22:57:47 27 4
gpt4 key购买 nike

我正在尝试将 WideString 文本从数据库 (ADO/MS Access) 导出到 MS Word 文档 (Delphi 7),但外来字符未正确传输(即“è”) “č”):

while not ADOQuery1.Eof do
begin
WordApplication1.Selection.TypeText(ADOQuery1Text.AsVariant); // TWideStringField
WordApplication1.Selection.TypeParagraph;
ADOQuery1.Next;
end;

我也尝试过直接使用CreateOleObject(),但没有区别。

我错过了什么?

谢谢!

最佳答案

我认为这不是Word的问题,而是字符串在数据库中存储方式的问题。它们可能保存为 Ansi 字符串,而不是 Unicode/WideString 字符串。如果这是真的,那么它们将以某种编码保存,如果您希望它们被正确解码,您必须知道这种编码。

下面是一个示例应用程序,演示如何将 Ansi 字符串转换为 WideString 并将其保存在 Word 中:

program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils,
ComObj,
ActiveX,
CodecUtilsWin32;

procedure Test();
var
wordApp, wordDoc: Variant;
ansiStr: string;
codec: TUnicodeCodec;

function str2WideStr(const s: string): WideString;
var
i: Integer;
begin
codec.DecodeStr(@s[1], Length(s), Result);
end;

begin
codec := TEncodingRepository.CreateCodecByAlias('ISO-8859-2');

ansiStr := #$BF#$F3#$B3#$E6; //"zólc"

wordApp := CreateOleObject('Word.Application');
wordDoc := wordApp.Documents.Add;
wordApp.Selection.TypeText(str2WideStr(ansiStr));
wordDoc.SaveAs('C:\sample.doc');
wordDoc.Close();
wordApp.Quit(False);
end;

begin
CoInitialize(nil);
Test();
end.

上面的代码使用来自Utility Library v.2.0.18的免费软件单元CodecUtilsWin32.pas

因此,我建议使用 TStringField 而不是 TWideStringField 并将字符串转换为 WideString,如上面的示例所示。

关于delphi - MS Word Ole Automation、ADO 和外来字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/940113/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com