[求助]Delphi7中导出SQL Server数据成Excel时中文显示为乱码该怎么解决?(100分)

  • 主题发起人 主题发起人 colorow
  • 开始时间 开始时间
C

colorow

Unregistered / Unconfirmed
GUEST, unregistred user!
环境:Delphi7+MS SQL Server 2000+Excel 2003
目的:取出数据库中的一行数据,Excel第一列显示各字段名称,第二列显示相应字段值。
问题:导出的Excel里面中文均显示成乱码,编码规则不清楚(如“受检者号码”显示成“”ÊܼìÕߺÅÂë)。
目前的代码:
procedure proExportExcel(DataSource: TDataSource;
AOwner: TComponent);
var
Bookmark: TBookmark;
Col: Integer;
//Row: Integer;
Str: String;
Memo: TMemo;
Ole: OleVariant;
begin
DataSource.DataSet.DisableControls;
Bookmark:= DataSource.DataSet.GetBookmark;
DataSource.DataSet.First;
Ole:= CreateOleObject('Excel.Application');
Ole.WorkBooks.Add;
Ole.WorkBooks[1].WorkSheets[1].Name:= 'Untitled';
Memo:= TMemo.Create(AOwner);
Memo.Visible:= true;
Memo.Parent:= f_questionnaire;
Memo.Clear;
{Str:= '';
for Col:= 0 to DataSource.DataSet.FieldCount- 1do
Str:= Str+ DataSource.DataSet.Fields[col].DisplayLabel+ #9;
Memo.Lines.Add(Str);
for Row:= 0 to DataSource.DataSet.RecordCount- 1do
begin
Str:= '';
for Col:= 0 to DataSource.DataSet.FieldCount-1do
Str:= Str+ DataSource.DataSet.Fields[Col].AsString+ #9;
Memo.Lines.Add(Str);
DataSource.DataSet.Next;
end;
}
for Col:= 0 to DataSource.DataSet.FieldCount- 1do
begin
Str:= '';
Str:= Str+ DataSource.DataSet.Fields[Col].DisplayLabel+ #9;
Str:= Str+ DataSource.DataSet.Fields[Col].AsString;
Memo.Lines.Add(Str);
end;

Memo.SelectAll;
Memo.CopyToClipboard;
Ole.Workbooks[1].WorkSheets['Untitled'].Paste;
//Ole.Workbooks[1].Save;
Ole.Visible:= true;
FreeAndNil(Memo);
DataSource.DataSet.GotoBookmark(Bookmark);
DataSource.DataSet.FreeBookmark(Bookmark);
DataSource.DataSet.EnableControls;
end;
 
MEMO有问题,可以直接写到EXCEL表里,干嘛用MEMO呢
 
不是MEMO的问题啊,
是输入法的问题!
把英文的输入法删了后,然后添加中文里面的美式键盘就可以了。
这个问题是windows残留多年的问题,一直没解决!
 
别用MEMO了,直接导出到EXCEL中岂不更方便,还不用去解决乱码的问题。
况且若用MEMO你把程序移植到其他机器上,还要更改输入法不成?
 
确实与输入法有关系。
suger提供的办法可以解决问题,不过我也打算采用xwf_lj、京毛毛的建议重写。
谢谢三位!
 
后退
顶部