数据库中的数据导出到excel中时出现的问题 ( 积分: 200 )

  • 主题发起人 主题发起人 Kinki
  • 开始时间 开始时间
K

Kinki

Unregistered / Unconfirmed
GUEST, unregistred user!
我在将ADOQuery中的数据导出到Excel中时,中文会出现乱码,英文和数字是好的,而且有的机器也没这个问题,现在请各位大虾,给个解决办法
谢谢了
 
我在将ADOQuery中的数据导出到Excel中时,中文会出现乱码,英文和数字是好的,而且有的机器也没这个问题,现在请各位大虾,给个解决办法
谢谢了
 
不会吧,你用的是什么方法?是用这个TExcelApplication操作吗
 
用什么方法导的,可否贴出代码看看
 
用什么数据库,用什么方法
 
有的机器没有这个问题,恐怕就是你的机子上少了相关的语言包的原因吧,你试一下从你的DELPHI中将你的代码拷贝到写字板里面,看看你写的代码里的中文注释能不能正确显示出来,然后再看看你的控制面版里的地区设置是不是设为简体中文了?
 
应该不是导出的方法问题,是你的语言设置问题,简体版操作系统和繁体的数据
资料,或者反过来,就会出现乱码。
 
我们用的都是同样的系统同样的office2000,我想应该是设置的问题,请那位大虾告知
谢谢
代码:
S:='';
try
Excel:=CreateOLEobject('Excel.Application');
MyBook:=CreateOLEObject('Excel.sheet');
except
Application.Messagebox('请先安装Excel!','提示',48);
ABORT;
end;
EXCEL.VISIBLE:=FALSE;
EXCEL.WORKBOOKS.ADD;
Main_frm.ADOQuery_Main.FIRST;
for I:=0 to Main_frm.ADOQuery_Main.RECORDCOUNT-1 do
begin
for J:=0 to Main_frm.ADOQuery_Main.FIELDCOUNT-1 do
S:=S+Main_frm.ADOQuery_Main.FIELDS[J].DISPLAYTEXT +#9;
S:=S+#13;
Main_frm.ADOQuery_Main.NEXT;
end;
CLIPBOARD.CLEAR;
CLIPBOARD.ASTEXT:=S;
EXCEL.SHEETS[1].PASTE;
CLIPBOARD.CLEAR;
EXCEL.VISIBLE:=TRUE;
 
就算是一样的系统,但也可能出现设置不同的问题,你看看你的系统上的默认输入法是什么?将其改为默认的CH中文模式看看,你的代码我看不出有什么大问题;
下面这有一个资料你可参看一下的
hyj (2002-08-06 9:50:00)
下面是我写的一个过程将数据库的数据导到EXCEL中,你可以借鉴一下

PROCEDURE getdatefromdbintoexcel(dataset:tdataset;dbgrid:tdbgrid;title:string);
var i,row,column:integer;
CELLESRANGE,X1:OLEVARIANT;
ASCCOLS:CHAR;
begin
Try
ExcelApplication1.Connect;
Except
MessageDlg('Excel 可能没有安装!',
mtError, [mbOk], 0);
Abort;
End;
ExcelApplication1.Visible[0]:=True;
ExcelApplication1.Caption:='Excel Application';
ExcelApplication1.Workbooks.Add(Null,0);
ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks[1]);
ExcelWorksheet1.ConnectTo
(ExcelWorkbook1.Worksheets[1] as _Worksheet);
row:=1;
ExcelWorksheet1.Cells.Item[row,1]:=title;
//一共有多少列
ASCCOLS:=CHAR(dbgrid.Columns.Count+64);
ExcelWorksheet1.Range['A1',ASCCOLS+'1'].Merge(X1);
ExcelWorksheet1.Range['A1',ASCCOLS+'1'].HorizontalAlignment:=xlCenter;
row:=2;
for i:=0 to dbgrid.Columns.Count-1 do
ExcelWorksheet1.Cells.Item[row,i+1]:=dbgrid.Columns.Title.Caption;
row:=3;
While Not(dataset.Eof) do
begin
column:=1;
for i:=1 to dataset.FieldCount do
begin
ExcelWorksheet1.Cells.Item[row,column]:=dataset.fields[i-1].AsString;
column:=column+1;
end;
dataset.Next;
row:=row+1;
end;
//设置自动适应列宽
with ExcelWorksheet1.Range['A2',ASCCOLS+INTTOSTR(2+DATASET.RECORDCOUNT)] do
begin
Columns.AutoFit;
//设置边线
Borders.LineStyle:=xlcontinuous;
Borders.weight:=xlthin;
Borders.colorindex:=xlautomatic;
end;
//设置TITLE行高 AND FONTS
ExcelWorksheet1.Range['A1','A1'].RowHeight:=28;
ExcelWorksheet1.Cells.Item[1,1].FONT.NAME:='黑体';
ExcelWorksheet1.Cells.Item[1,1].FONT.size:=20;
ExcelWorksheet1.PageSetup.RightFooter:='&9第&P页 共&N页';
ExcelWorksheet1.PageSetup.PrintTitleRows:='$1:$2';
// 设置单元格格式

for i:=1 to dataset.FieldCount do
begin
ASCCOLS:=CHAR(I+64);
if dataset.fields[i-1].DataType in [ftUnknown,ftstring] then
ExcelWorksheet1.Range[ASCCOLS+'3',ASCCOLS+INTTOSTR(2+dataset.RecordCount)].NumberFormatLocal:='000000';
end;

ExcelWorksheet1.Disconnect;
ExcelWorkbook1.Disconnect;
ExcelApplication1.Disconnect;

END;

 
后退
顶部