delphi dbgrideh导入excel 中

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了delphi dbgrideh导入excel 中相关的知识,希望对你有一定的参考价值。

要求:1、要保存以前的数据 2、保存的路径在代码中要注明,不再更改。不显示保存的过程。

参考技术A procedure Tfcxtj.saveClick(Sender: TObject);
var
ExpClass : TDBGridEhExportClass ;
yy : String;
begin

if (not dm.qjymx.Active) or (dm.qjymx.RecordCount=0) then
begin
showmessage('无数据可导出!');
exit;
end;

SaveDialog1.Filter:='xls工作簿(*.xls)|*.xls'+
'csv文件(*.csv)|*.csv|'+
'网页(*.htm)|*.htm|'+
'rtf文件(*.rtf)|*.rtf|'+
'文本文件(*.txt)|*.txt|';

if SaveDialog1.Execute then
begin
case SaveDialog1.FilterIndex of
1: begin ExpClass := TDBGridEhExportAsXLS; yy := 'xls'; end;
2: begin ExpClass := TDBGridEhExportAsCSV; yy := 'csv'; end;
3: begin ExpClass := TDBGridEhExportAshtml; yy := 'htm'; end;
4: begin ExpClass := TDBGridEhExportAsRTF; yy := 'rtf'; end;
5: begin ExpClass := TDBGridEhExportAsText; yy := 'txt'; end;
else
ExpClass := nil; yy := '';
end;

if ExpClass <> nil then
begin
if UpperCase(Copy(SaveDialog1.FileName,Length(SaveDialog1.FileName)-2,3)) <> UpperCase(yy) then
SaveDialog1.FileName := SaveDialog1.FileName + '.' + yy;
SaveDBGridEhToExportFile(ExpClass,DBGridEh1,SaveDialog1.FileName,True);//其false时,为局部数据
//导出文件名及保存的路径来自SaveDialog1.FileName,即文件保存控件激活时会叫你选择保存的目录并让你录入文件名
showmessage('数据导入成功!');
end;
end;
参考技术B SaveDBGridEhToExportFile(TDBGridEhExportAsXls,DBGridEh1,sReceiptFileName,true);追问

怎么在导出时,Excel中的中文显示乱码,该怎么解决。

追答

檢查你的數據庫語言和本機語言是否一致...
查看註冊表NLS_LANG的值與本機的語言設置比較下...

本回答被提问者采纳
参考技术C dbgrideh本身有导出到Excel的功能。

修改DBGridEh1的字体=宋体 试试追问

DBGrideh1的字体就是宋体

追答

宋体+charset=GB2312_charset试试,要不就是版本的问题了。
我现在用4.2.16,没有该问题。

Delphi 的DBGridEH 中,几个列栏位值相加

如图所示: 我希望 列 总金额里面 自动显示: 1月+2月+3月+4月......的值 怎么做??

要么sql语句里 加一个left join
要么DBGridEH 的OnDrawDataCell 判断一下
如果该列是12月 就累加前11月 总金额显示在总金额里追问

ONDRAWDATACELL,怎么判断,,求代码

追答

OnDrawDataCell已经失效 换用OnDrawColumnCell吧

假如 你的 1月 2月 。。。。。
对应的字段是 Y1 Y2 。。。。
也就是说 sql语句是 select Z ,Y1,Y2,Y2....... ,Y12 from table ...
Z是总金额字段
用 adoquery打开
执行
K1:=0; //类全局变量
adoquery.close;
adoquery.sql.text:=sql;
adoquery.open;

假如你希望 当12月的OnDrawColumnCell发生时 统计数据
那样的话 你可以在 OnDrawColumnCell里写
if K1< adoquery.RecNo then
begin
K1:= adoquery.RecNo;
if Column.Field.FieldName='Y12' then
begin
adoquery.edit;
adoquery.fieldByname('Z').value:= adoquery.fieldByname('Y1').asFloat+adoquery.fieldByname('Y2').asFloat...........adoquery.fieldByname('Y12').asFloat;
adoquery.post;
end;
end;

以上只是笨办法 K1的存在只是为了确保每行只统计一次 否则程序要死循环

参考技术A 用sql server写好

以上是关于delphi dbgrideh导入excel 中的主要内容,如果未能解决你的问题,请参考以下文章

delphi dbgrideh部分导出excel出错

delphi dbgrideh 点击一行数据行是,在第一行数据行上面出现一行显示我点击的数据

delphi DBGridEh 删除指定列

delphI中如何设置DBGRID奇偶行的颜色不同?

delphi DBgridEh多行单元格如何实现~急!!

Delphi 的DBGridEH 中,几个列栏位值相加