S
sing_cee
Unregistered / Unconfirmed
GUEST, unregistred user!
use excel97 (excel2000也不行),OleServer;
..
..
procedure TForm1.BitBtn6Click(Sender: TObject);
var
ModuleName:string; //Excel 模板文件名 *.Xlt
FileName: String ;
Col,Row : Integer;
ExlApp : TExcelApplication ;
ExlBook : TExcelWorkBook ;
ExlSheet : TExcelWorkSheet ;
i, j : Integer ;
temp1, temp2 : OleVariant ;
Begin
if ADOQuery1.Active and (ADOQuery1.RecordCount < 500) then //大于500不导出
begin
nocan:= savedialog1.Execute; //判断SAVEDIALOG是否为取消
if (saveDialog1.FileName <> '') and nocan then
begin
FileName:=saveDialog1.FileName;
row:=1;
col:=1;
ModuleName := extractfilepath(paramstr(0))+'/图书报表模板.xls';
If FileExists(ModuleName)= False Then // 判断指定的模板文件是否存在
begin
ShowMessage( 'EXCEL模板文件: '+ ModuleName + ' 不存在! 请重新安装程序!' ) ;
Exit ;
end ;
// 创建 Excel 服务器控件
ExlApp := TExcelApplication.Create(nil);
ExlBook := TExcelWorkBook.Create (nil);
ExlSheet := TExcelWorkSheet.Create (nil) ;
// 连接 Excel 服务器
Try
ExlApp.Connect ;
Except
ShowMessage ('连接失败,可能你没有安装Excle') ;
Abort ;
End ;
// 从指定的模板文件*.xlt 新建一 Excel 文档
temp1 := ModuleName ; temp2 := 1 ;
ExlApp.Workbooks.Add( temp1, temp2) ;
ExlBook.ConnectTo(ExlApp.Workbooks[1] );
ExlSheet.ConnectTo(ExlBook.Worksheets[1] As _WorkSheet ); // 把 TDBGrid 的数据导入 Excel 中
ADOQuery1.First;
i := Row ;
sb1.SimpleText :=' 信息: 正在把查询结果写入到EXCEL文件中,需要时间 请勿中断! 请稍侯...... ';
While Not(DBGrid1.DataSource.DataSet.Eof) Do
Begin
For j:=Col To DBGrid1.FieldCount+ Col-1 Do
ExlSheet.Cells.Item[i+1,j]:= DBGrid1.Fields[j-col].AsString ; //+1保留列标题
DBGrid1.DataSource.DataSet.Next ;
i := i+1 ;
End ;
// 保存到 指定的文件
FileName := Trim(FileName) ;
IF FileExists(FileName) Then
DeleteFile(FileName) ;
ExlSheet.SaveAs(FileName);
// 关闭 Excel 服务器
ExlApp.Disconnect ;
ExlApp.Quit ;
ExlApp.Free;
ExlBook.Free;
ExlSheet.Free;
sb1.SimpleText :=' 信息: 数据导入完毕! 保存在你的 '+FileName+'.xls 文件中,请查看! '
End;
end;
end;
这是把DBGRID的数据导出到按模板文件创建的EXCEL文件中,在装OFFICE2000/XP的机器上都能正常编译执行,但是在
安装OFFICE97的机器上执行或编译后执行时都报告‘格式太旧,或类型无效’ 换USE EXCEL97 加COMOBJ也一样。
出错在ExlApp.Workbooks.Add( temp1, temp2) ;
ExlBook.ConnectTo(ExlApp.Workbooks[1] );
这一处 WHY?
..
..
procedure TForm1.BitBtn6Click(Sender: TObject);
var
ModuleName:string; //Excel 模板文件名 *.Xlt
FileName: String ;
Col,Row : Integer;
ExlApp : TExcelApplication ;
ExlBook : TExcelWorkBook ;
ExlSheet : TExcelWorkSheet ;
i, j : Integer ;
temp1, temp2 : OleVariant ;
Begin
if ADOQuery1.Active and (ADOQuery1.RecordCount < 500) then //大于500不导出
begin
nocan:= savedialog1.Execute; //判断SAVEDIALOG是否为取消
if (saveDialog1.FileName <> '') and nocan then
begin
FileName:=saveDialog1.FileName;
row:=1;
col:=1;
ModuleName := extractfilepath(paramstr(0))+'/图书报表模板.xls';
If FileExists(ModuleName)= False Then // 判断指定的模板文件是否存在
begin
ShowMessage( 'EXCEL模板文件: '+ ModuleName + ' 不存在! 请重新安装程序!' ) ;
Exit ;
end ;
// 创建 Excel 服务器控件
ExlApp := TExcelApplication.Create(nil);
ExlBook := TExcelWorkBook.Create (nil);
ExlSheet := TExcelWorkSheet.Create (nil) ;
// 连接 Excel 服务器
Try
ExlApp.Connect ;
Except
ShowMessage ('连接失败,可能你没有安装Excle') ;
Abort ;
End ;
// 从指定的模板文件*.xlt 新建一 Excel 文档
temp1 := ModuleName ; temp2 := 1 ;
ExlApp.Workbooks.Add( temp1, temp2) ;
ExlBook.ConnectTo(ExlApp.Workbooks[1] );
ExlSheet.ConnectTo(ExlBook.Worksheets[1] As _WorkSheet ); // 把 TDBGrid 的数据导入 Excel 中
ADOQuery1.First;
i := Row ;
sb1.SimpleText :=' 信息: 正在把查询结果写入到EXCEL文件中,需要时间 请勿中断! 请稍侯...... ';
While Not(DBGrid1.DataSource.DataSet.Eof) Do
Begin
For j:=Col To DBGrid1.FieldCount+ Col-1 Do
ExlSheet.Cells.Item[i+1,j]:= DBGrid1.Fields[j-col].AsString ; //+1保留列标题
DBGrid1.DataSource.DataSet.Next ;
i := i+1 ;
End ;
// 保存到 指定的文件
FileName := Trim(FileName) ;
IF FileExists(FileName) Then
DeleteFile(FileName) ;
ExlSheet.SaveAs(FileName);
// 关闭 Excel 服务器
ExlApp.Disconnect ;
ExlApp.Quit ;
ExlApp.Free;
ExlBook.Free;
ExlSheet.Free;
sb1.SimpleText :=' 信息: 数据导入完毕! 保存在你的 '+FileName+'.xls 文件中,请查看! '
End;
end;
end;
这是把DBGRID的数据导出到按模板文件创建的EXCEL文件中,在装OFFICE2000/XP的机器上都能正常编译执行,但是在
安装OFFICE97的机器上执行或编译后执行时都报告‘格式太旧,或类型无效’ 换USE EXCEL97 加COMOBJ也一样。
出错在ExlApp.Workbooks.Add( temp1, temp2) ;
ExlBook.ConnectTo(ExlApp.Workbooks[1] );
这一处 WHY?