DBGridToExcel(生成数据)

合集下载

delphidbgrid导出Excel表

delphidbgrid导出Excel表

delphi dbgrid 导出Excel表///////// 利用剪贴板,速度很快!适合装有Excel的机器///////////////////// USES Clipbrd,ComObj;procedure TForm1.Button1Click(Sender: TObject);varstr:string;i:Integer;excelapp,sheet:Variant;begin// lbl2.Caption:=DateTimeToStr(Now);str:='';dbgrd1.DataSource.DataSet.DisableControls;for i:=0 to dbgrd1.DataSource.DataSet.FieldCount-1 dostr:=str+dbgrd1.DataSource.DataSet.fields[i].DisplayLabel+char(9);str:=str+#13;dbgrd1.DataSource.DataSet.First;while not(dbgrd1.DataSource.DataSet.eof) do beginfor i:=0 to dbgrd1.DataSource.DataSet.FieldCount-1 dostr:=str+dbgrd1.DataSource.DataSet.Fields[i].AsString+char(9);str:=str+#13;dbgrd1.DataSource.DataSet.next;lbl1.Caption:=IntToStr(dbgrd1.DataSource.DataSet.RecNo);Application.ProcessMessages;end;//end whiledbgrd1.DataSource.DataSet.EnableControls;clipboard.Clear;Clipboard.Open;Clipboard.AsText:=str;Clipboard.Close;excelapp:=createoleobject('excel.application');excelapp.workbooks.add(1); // excelapp.workbooks.add(-4167);sheet:=excelapp.workbooks[1].worksheets[1];:='sheet1';sheet.paste;Clipboard.Clear;// :='宋体';// sheet.columns.font.size:=9;// sheet.Columns.AutoFit;excelapp.visible:=true;// lbl3.Caption:=DateTimeToStr(Now);end;/////////////////////////////////////////////////////////利用TStringList,速度很快!适合没有装Excel的机器////////////////////////procedure TForm1.Button1Click(Sender: TObject);vars:TStringList;str:string;i:Integer;begin// lbl1.Caption:=DateTimeToStr(Now);str:='';dbgrd1.DataSource.DataSet.DisableControls;for i:=0 to dbgrd1.DataSource.DataSet.FieldCount-1 dostr:=str+dbgrd1.DataSource.DataSet.fields[i].DisplayLabel+char(9);str:=str+#13;dbgrd1.DataSource.DataSet.First;while not(dbgrd1.DataSource.DataSet.eof) do beginfor i:=0 to dbgrd1.DataSource.DataSet.FieldCount-1 dostr:=str+dbgrd1.DataSource.DataSet.Fields[i].AsString+char(9);str:=str+#13;dbgrd1.DataSource.DataSet.next;// lbl3.Caption:=IntToStr(dbgrd1.DataSource.DataSet.RecNo);// Application.ProcessMessages;end;//end whiledbgrd1.DataSource.DataSet.EnableControls;s:=TStringList.Create;s.Add(str);s.SaveToFile('c:\temp.xls');//保存到c:\temp.xlss.Free;// lbl2.Caption:=DateTimeToStr(Now);end;////////////////////////////////////////////////***********************************************************(Delphi)Excel的快速导入***********************************************************(Delphi)Excel的快速导入//怎样可以提高EXCEL的导出速度?uses ADODB,excel97,adoint;function TForm1.ExportToExcel: Boolean;varxlApp,xlBook,xlSheet,xlQuery: Variant;adoConnection,adoRecordset: Variant;beginadoConnection := CreateOleObject('ADODB.Connection');adoRecordset := CreateOleObject('ADODB.Recordset');adoConnection.Open('Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\Tree.mdb;Persist Security Info=False');adoRecordset.CursorLocation := adUseClient;adoRecordset.Open('SELECT * FROM tree',adoConnection,1,3);tryxlApp := CreateOleObject('Excel.Application');xlBook := xlApp.Workbooks.Add;xlSheet := xlBook.Worksheets['sheet1'];//设置这一列为文本列,让"00123" 正确显示,而不是自动转换为"123"xlSheet.Columns['C:C'].NumberFormatLocal := '@';xlApp.Visible := True;//把查询结果导入EXCEL数据xlQuery := xlSheet.QueryTables.Add(adoRecordset,xlSheet.Range['A1']); //关键是这一句xlQuery.FieldNames := True;xlQuery.RowNumbers := False;xlQuery.FillAdjacentFormulas := False;xlQuery.PreserveFormatting := True;xlQuery.RefreshOnFileOpen := False;xlQuery.BackgroundQuery := True;//xlQuery.RefreshStyle := xlInsertDeleteCells;xlQuery.SavePassword := True;xlQuery.SaveData := True;xlQuery.AdjustColumnWidth := True;xlQuery.RefreshPeriod := 0;xlQuery.PreserveColumnInfo := True;xlQuery.FieldNames := True;xlQuery.Refresh;xlBook.SaveAs('d:\fromD.xls',xlNormal,'','',False,False);finallyif not VarIsEmpty(XLApp) then beginXLApp.displayAlerts:=false;XLApp.ScreenUpdating:=true;XLApp.quit;end;end;end;///////////////////////////////////////////////////procedure saveToExcel();varEclapp,workbook:variant;i,n:integer;beginif not adoquery1.Active then exit;if adoquery1.RecordCount<=0 then exit;if application.MessageBox('确认导出excel表吗?','提示',mb_okcancel+mb_iconinformation)=idcancel then exit;Eclapp := createoleobject('Excel.Application');Eclapp.workbooks.add;for i:=0 to dbgrid2.FieldCount-1 dobeginEclapp.cells[1,i+1]:=dbgrid2.Columns[i].Title.Caption;end;Eclapp.cells[1,5]:='签字';adoquery1.First;n:=2;while not adoquery1.Eof doeclapp.cells[n,1] := adoquery1.Fields[0].AsString;eclapp.cells[n,2] := adoquery1.Fields[1].AsString;eclapp.cells[n,3] := adoquery1.Fields[2].AsString;eclapp.cells[n,4] := adoquery1.Fields[4].AsString;eclapp.cells[n,6] :=' ';inc(n);adoquery1.Next;end;eclapp.cells[n,1] := '满足条件记录的总数为:'+inttostr(adoquery1.RecordCount)+'条';application.MessageBox('数据导出完成!','提示',mb_ok+mb_iconinformation);eclapp.visible := true;end;方法二procedure CopyDbDataToExcel(Args: array of const);variCount, jCount: Integer;XLApp: Variant;Sheet,range: Variant;I: Integer;beginScreen.Cursor := crHourGlass;if not VarIsEmpty(XLApp) thenbeginXLApp.DisplayAlerts := False;XLApp.Quit;VarClear(XLApp);end;tryXLApp:=CreateOleObject(Excel.Application);exceptScreen.Cursor := crDefault;Exit;end;XLApp.WorkBooks.Add;XLApp.SheetsInNewWorkbook := High(Args) + 1;for I := Low(Args) to High(Args) doXLApp.WorkBooks[1].WorkSheets[I+1].Name := TDBGrid(Args[I].VObject).Name;Sheet := XLApp.Workbooks[1].WorkSheets[TDBGrid(Args[I].VObject).Name];if not TDBGrid(Args[I].VObject).DataSource.DataSet.Active thenbeginScreen.Cursor := crDefault;Exit;end;TDBGrid(Args[I].VObject).DataSource.DataSet.first;for iCount := 0 to TDBGrid(Args[I].VObject).Columns.Count - 1 dorange:=sheet.range[sheet.cells[1,1],sheet.cells[1,iCount + 1]];range.select;range.merge;sheet.cells[1,1]:=[+fqueryhuman.dbedit2.text+]+个人报销记录(普通报销、特殊报销)查询;jCount :=2;for iCount := 0 to TDBGrid(Args[I].VObject).Columns.Count - 1 doSheet.Cells[2, iCount + 1]:=TDBGrid(Args[I].VObject).Columns.Items[iCount].Title.Caption; while not TDBGrid(Args[I].VObject).DataSource.DataSet.Eof dobeginfor iCount := 0 to TDBGrid(Args[I].VObject).Columns.Count - 1 doSheet.Cells[jCount + 1, iCount + 1] :=TDBGrid(Args[I].VObject).Columns.Items[iCount].Field.AsString;Inc(jCount);TDBGrid(Args[I].VObject).DataSource.DataSet.Next;end;XlApp.Visible := True;end;Screen.Cursor := crDefault;end;方法三delphi导入/导出excel2008年03月02日星期日16:39从Excel文件中,导入数据到SQL数据库中,很简单,直接用下面的语句:/*===================================================================*/--如果接受数据导入的表已经存在insert into 表select * fromOPENROWSET('MICROSOFT.JET.OLEDB.4.0','Excel 5.0;HDR=YES;DATABASE=c:\test.xls',sheet1$)--如果导入数据并生成表select * into 表fromOPENROWSET('MICROSOFT.JET.OLEDB.4.0','Excel 5.0;HDR=YES;DATABASE=c:\test.xls',sheet1$)/*===================================================================*/--如果从SQL数据库中,导出数据到Excel,如果Excel文件已经存在,而且已经按照要接收的数据创建好表头,就可以简单的用:insert into OPENROWSET('MICROSOFT.JET.OLEDB.4.0','Excel 5.0;HDR=YES;DATABASE=c:\test.xls',sheet1$)select * from 表--如果Excel文件不存在,也可以用BCP来导成类Excel的文件,注意大小写:--导出表的情况EXEC master..xp_cmdshell 'bcp 数据库名.dbo.表名out "c:\test.xls" /c -/S"服务器名" /U"用户名" -P"密码"'--导出查询的情况EXEC master..xp_cmdshell 'bcp "SELECT au_fname, au_lname FROM pubs..authors ORDER BY au_lname" queryout "c:\test.xls" /c -/S"服务器名" /U"用户名" -P"密码"'/*--说明:c:\test.xls 为导入/导出的Excel文件名.sheet1$ 为Excel文件的工作表名,一般要加上$才能正常使用.--*/--下面是导出真正Excel文件的方法:if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_exporttb]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)drop procedure [dbo].[p_exporttb]GO/*--数据导出EXCEL导出表中的数据到Excel,包含字段名,文件为真正的Excel文件,如果文件不存在,将自动创建文件,如果表不存在,将自动创建表基于通用性考虑,仅支持导出标准数据类型--邹建2003.10(引用请保留此信息)--*//*--调用示例p_exporttb @tbname='地区资料',@path='c:\',@fname='aa.xls'--*/create proc p_exporttb@tbname sysname, --要导出的表名@path nvarchar(1000), --文件存放目录@fname nvarchar(250)='' --文件名,默认为表名asdeclare @err int,@src nvarchar(255),@desc nvarchar(255),@out intdeclare @obj int,@constr nvarchar(1000),@sql varchar(8000),@fdlist varchar(8000)--参数检测if isnull(@fname,'')='' set @fname=@tbname+'.xls'--检查文件是否已经存在if right(@path,1)<>'\' set @path=@path+'\'create table #tb(a bit,b bit,c bit)set @sql=@path+@fnameinsert into #tb exec master..xp_fileexist @sql--数据库创建语句set @sql=@path+@fnameif exists(select 1 from #tb where a=1)set @constr='DRIVER={Microsoft Excel Driver (*.xls)};DSN='''';READONLY=FALSE' +';CREATE_DB="'+@sql+'";DBQ='+@sqlelseset @constr='Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties="Excel 8.0;HDR=YES' +';DATABASE='+@sql+'"'--连接数据库exec @err=sp_oacreate 'adodb.connection',@obj outif @err<>0 goto lberrexec @err=sp_oamethod @obj,'open',null,@constrif @err<>0 goto lberr/*--如果覆盖已经存在的表,就加上下面的语句--创建之前先删除表/如果存在的话select @sql='drop table ['+@tbname+']'exec @err=sp_oamethod @obj,'execute',@out out,@sql--*/--创建表的SQLselect @sql='',@fdlist=''select @fdlist=@fdlist+',['++']',@sql=@sql+',['++'] '+casewhen like '%char'then case when a.length>255 then 'memo'else 'text('+cast(a.length as varchar)+')' endwhen like '%int' or ='bit' then 'int'when like '%datetime' then 'datetime'when like '%money' then 'money'when like '%text' then 'memo'else endFROM syscolumns a left join systypes b on a.xtype=b.xusertypewhere not in('image','uniqueidentifier','sql_variant','varbinary','binary','timestamp') and object_id(@tbname)=idselect @sql='create table ['+@tbname+']('+substring(@sql,2,8000)+')',@fdlist=substring(@fdlist,2,8000)exec @err=sp_oamethod @obj,'execute',@out out,@sqlif @err<>0 goto lberrexec @err=sp_oadestroy @obj--导入数据set @sql='openrowset(''MICROSOFT.JET.OLEDB.4.0'',''Excel 8.0;HDR=YES;IMEX=1 ;DATABASE='+@path+@fname+''',['+@tbname+'$])'exec('insert into '+@sql+'('+@fdlist+') select '+@fdlist+' from '+@tbname)returnlberr:exec sp_oageterrorinfo 0,@src out,@desc outlbexit:select cast(@err as varbinary(4)) as 错误号,@src as 错误源,@desc as 错误描述select @sql,@constr,@fdlistgoif exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_exporttb]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)drop procedure [dbo].[p_exporttb]GO/*--数据导出EXCEL导出查询中的数据到Excel,包含字段名,文件为真正的Excel文件如果文件不存在,将自动创建文件如果表不存在,将自动创建表基于通用性考虑,仅支持导出标准数据类型--邹建2003.10(引用请保留此信息)--*//*--调用示例p_exporttb @sqlstr='select * from 地区资料',@path='c:\',@fname='aa.xls',@sheetname='地区资料'--*/create proc p_exporttb@sqlstr varchar(8000), --查询语句,如果查询语句中使用了order by ,请加上top 100 percent@path nvarchar(1000), --文件存放目录@fname nvarchar(250), --文件名@sheetname varchar(250)='' --要创建的工作表名,默认为文件名asdeclare @err int,@src nvarchar(255),@desc nvarchar(255),@out intdeclare @obj int,@constr nvarchar(1000),@sql varchar(8000),@fdlist varchar(8000)--参数检测if isnull(@fname,'')='' set @fname='temp.xls'if isnull(@sheetname,'')='' set @sheetname=replace(@fname,'.','#')--检查文件是否已经存在if right(@path,1)<>'\' set @path=@path+'\'create table #tb(a bit,b bit,c bit)set @sql=@path+@fnameinsert into #tb exec master..xp_fileexist @sql--数据库创建语句set @sql=@path+@fnameif exists(select 1 from #tb where a=1)set @constr='DRIVER={Microsoft Excel Driver (*.xls)};DSN='''';READONLY=FALSE'+';CREATE_DB="'+@sql+'";DBQ='+@sqlelseset @constr='Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties="Excel 8.0;HDR=YES' +';DATABASE='+@sql+'"'--连接数据库exec @err=sp_oacreate 'adodb.connection',@obj outif @err<>0 goto lberrexec @err=sp_oamethod @obj,'open',null,@constrif @err<>0 goto lberr--创建表的SQLdeclare @tbname sysnameset @tbname='##tmp_'+convert(varchar(38),newid())set @sql='select * into ['+@tbname+'] from('+@sqlstr+') a'exec(@sql)select @sql='',@fdlist=''select @fdlist=@fdlist+',['++']',@sql=@sql+',['++'] '+casewhen like '%char'then case when a.length>255 then 'memo'else 'text('+cast(a.length as varchar)+')' endwhen like '%int' or ='bit' then 'int'when like '%datetime' then 'datetime'when like '%money' then 'money'when like '%text' then 'memo'else endFROM tempdb..syscolumns a left join tempdb..systypes b on a.xtype=b.xusertypewhere not in('image','uniqueidentifier','sql_variant','varbinary','binary','timestamp') and a.id=(select id from tempdb..sysobjects where name=@tbname)if @@rowcount=0 returnselect @sql='create table ['+@sheetname+']('+substring(@sql,2,8000)+')',@fdlist=substring(@fdlist,2,8000)exec @err=sp_oamethod @obj,'execute',@out out,@sqlif @err<>0 goto lberrexec @err=sp_oadestroy @obj--导入数据set @sql='openrowset(''MICROSOFT.JET.OLEDB.4.0'',''Excel 8.0;HDR=YES ;DATABASE='+@path+@fname+''',['+@sheetname+'$])'exec('insert into '+@sql+'('+@fdlist+') select '+@fdlist+' from ['+@tbname+']')set @sql='drop table ['+@tbname+']'exec(@sql)returnlberr:exec sp_oageterrorinfo 0,@src out,@desc outlbexit:select cast(@err as varbinary(4)) as 错误号,@src as 错误源,@desc as 错误描述select @sql,@constr,@fdlistgo。

unigui unidbgrid导出excel实例

unigui unidbgrid导出excel实例

unigui unidbgrid导出excel实例全文共四篇示例,供读者参考第一篇示例:uniGUI是一个基于Delphi的全栈Web应用开发框架,它允许开发人员通过使用Delphi IDE创建Web应用程序。

其中uniDBGrid是uniGUI框架中的一个组件,用于显示数据库中的数据并提供丰富的数据操作功能。

本文将介绍如何使用uniGUI和uniDBGrid导出Excel数据的实例。

一、uniDBGrid简介uniGUI中的uniDBGrid是一个用于显示数据库表格数据的组件,它支持多种数据源(如FireDAC、BDE、ADO等),可以根据需求实现数据的显示、编辑、筛选、排序等功能。

开发人员可以通过简单的设置和调整,快速地创建一个功能强大的数据表格。

uniGUI中的uniDBGrid组件提供了导出数据到Excel的功能,使用户可以方便地将数据库中的数据以Excel表格的形式保存或分享。

这对于需要将数据进行进一步处理或与其他人共享数据非常方便。

导出Excel功能可以将uniDBGrid中显示的数据一键导出到Excel 文件中,保留数据的格式、样式和布局。

用户可以选择导出的数据范围(全部数据、当前页数据、选中的数据),以及导出的文件格式(Excel 97-2003格式.xls、Excel 2007及以上格式.xlsx)。

下面我们以一个简单的示例来介绍如何使用uniDBGrid导出Excel 的功能。

1. 准备工作我们需要搭建一个uniGUI的项目,并添加一个uniDBGrid组件以及一个Button按钮用于触发导出操作。

在uniDBGrid的属性中,设置数据源,绑定需要显示的数据表格。

在Button的OnClick事件中编写导出Excel的代码。

2. 编写导出Excel的代码在Button的OnClick事件中添加以下代码:// 设置导出文件的格式为Excel 97-2003格式uniDBGrid.Export.FileType := ftExcel97;ShowMessage('数据已成功导出到Excel 文件: ' + ExcelFileName);end;```以上代码中,我们创建了一个TUniDBGridExport对象,并设置了导出文件的格式为Excel 97-2003格式。

delphi dbgrid 保存为excel 简单方法

delphi dbgrid 保存为excel 简单方法

delphi dbgrid 保存为excel 简单方法你可以使用以下简单方法将Delphi的DBGrid保存为Excel:1. 首先,添加Excel的引用。

在Delphi的“工具”菜单下选择“导入类型库”,然后选择Microsoft Excel并点击“创建单元”。

这将在您的Delphi项目中添加对Excel的引用。

2. 在所需的单元(例如表单或数据模块)中,添加以下单元引用:- ComObj:用于与COM对象(例如Excel)进行交互的单元。

- DBGrids:用于访问和操作DBGrid的单元。

3. 创建一个导出数据的按钮(或其他事件),然后在事件处理程序中添加以下代码:```delphiusesComObj, DBGrids;procedure TForm1.Button1Click(Sender: TObject);varExcel, Workbook, Worksheet: Variant;i, j: Integer;begin// 创建Excel对象Excel := CreateOleObject('Excel.Application');Excel.Visible := True;// 创建Workbook和WorksheetWorkbook := Excel.Workbooks.Add;Worksheet := Workbook.Worksheets[1];// 输出DBGrid的标题行for i := 0 to DBGrid1.Columns.Count - 1 doWorksheet.Cells[1, i+1].Value :=DBGrid1.Columns[i].Title.Caption;// 输出DBGrid的数据行for i := 0 to DBGrid1.DataSource.DataSet.RecordCount - 1 dobeginfor j := 0 to DBGrid1.Columns.Count - 1 doWorksheet.Cells[i+2, j+1].Value :=DBGrid1.DataSource.DataSet.FieldByName(DBGrid1.Columns[j].FieldName).AsString;DBGrid1.DataSource.DataSet.Next;end;// 保存Workbook并关闭ExcelWorkbook.SaveAs('path\to\save\file.xlsx');Workbook.Close;Excel.Quit;end;```在上述代码中,使用`CreateOleObject`函数创建了Excel对象,并将其设置为可见。

dbgrideh快速导出excel

dbgrideh快速导出excel

dbgrideh快速导出excel采用BIFF8规发二进制导出写Excel文件的绿色函数,速度爆快. 收藏//采用BIFF8格式规范二进制流写入XLS文件function TsycFunctionSet.sycExportDateToExcel(ASender: TDBGrid): Boolean;var arXlsBegin: array[0..5] of Word ;var arXlsEnd: array[0..1] of Word;var arXlsString: array[0..5] of Word;var arXlsNumber: array[0..4] of Word;var arXlsInteger: array[0..4] of Word;var arXlsBlank: array[0..4] of Word;var i : Integer;var Col, Row: WORD;var aBookMark: TBookMark;var aFileStream: TFileStream;var aSaveDlg : TSaveDialog;var xlsFileName : string;//--------------内嵌写单元格函数开始-----------------------procedure XLSWriteStringCell(nRow,nCol : WORD;AValue: String);//写字符串数据var L: Word;var _str : AnsiString;begin_str:=AnsiString(AValue);//强制类型转换,兼容Delphi2009,采用String类型要乱码,Delphi2007以下此行代码无所谓L := Length(_str);//Length返回的字符个数,采用AnsiString也就是字节长度arXlsString[1] := 8 + L;arXlsString[2] := nRow;arXlsString[3] := nCol;arXlsString[5] := L;aFileStream.WriteBuffer(arXlsString, SizeOf(arXlsString));aFileStream.WriteBuffer(Pointer(_str)^, L);//字节长度end;procedure XLSWriteIntegerCell(nRow,nCol : WORD;AValue: Integer);//写整数var V: DWORD;beginarXlsInteger[2] := nRow;arXlsInteger[3] := nCol;aFileStream.WriteBuffer(arXlsInteger, SizeOf(arXlsInteger));V := (AValue shl 2) or 2;aFileStream.WriteBuffer(V, 4);end;procedure XLSWriteFloatCell(nRow,nCol : WORD;AValue: Double);//写浮点数beginarXlsNumber[2] := nRow;arXlsNumber[3] := nCol;aFileStream.WriteBuffer(arXlsNumber, SizeOf(arXlsNumber));aFileStream.WriteBuffer(AValue, 8);end;//--------------内嵌写单元格函数结束-----------------------begin//-----------------------主函数体开始------------------------//单元格记录的BIFF8定义,直所以用代码初始化数组,就是为了函数绿色嘛。

DBGRIDEH最完美导出数据到excel记录总结【转】

DBGRIDEH最完美导出数据到excel记录总结【转】

DBGRIDEH最完美导出数据到excel记录总结【转】uses DBGridEhImpExp;{-------------------------------------------------------------------------------过程名: TfrmEmplyExport.OutToFile作者: han⽇期: 2007.08.08参数: IADO : TADOQuery; DgEh : TDBGridEh返回值: ⽆说明: 导出查询结果到⽂件-------------------------------------------------------------------------------}procedure TfrmEmplyExport.OutToFile(IADO : TADOQuery; DgEh : TDBGridEh);varExpClass:TDBGridEhExportclass;Ext:String;FSaveDialog: TSaveDialog;begintryif not IADO.IsEmpty thenbeginFSaveDialog := TSaveDialog.Create(Self);FSaveDialog.Filter:='Excel ⽂档 (*.xls)|*.XLS|Text files (*.txt)|*.TXT|Comma separated values (*.csv)|*.CSV|HTML file (*.htm)|*.HTM|Word ⽂档 (*.rtf)|*.RTF';if FSaveDialog.Execute and (trim(FSaveDialog.FileName)<>'') thenbegincase FSaveDialog.FilterIndex of1: begin ExpClass := TDBGridEhExportAsXLS; Ext := 'xls'; end;2: begin ExpClass := TDBGridEhExportAsText; Ext := 'txt'; end;3: begin ExpClass := TDBGridEhExportAsCSV; Ext := 'csv'; end;4: begin ExpClass := TDBGridEhExportAsHTML; Ext := 'htm'; end;5: begin ExpClass := TDBGridEhExportAsRTF; Ext := 'rtf'; end;end;if ExpClass <> nil thenbeginif UpperCase(Copy(FSaveDialog.FileName,Length(FSaveDialog.FileName)-2,3)) <> UpperCase(Ext) thenFSaveDialog.FileName := FSaveDialog.FileName + '.' + Ext;if FileExists(FSaveDialog.FileName) thenbeginif application.MessageBox('⽂件名已存在,是否覆盖 ', '提⽰', MB_ICONASTERISK or MB_OKCANCEL)<>idok thenexit;end;Screen.Cursor := crHourGlass;SaveDBGridEhToExportFile(ExpClass,DgEh,FSaveDialog.FileName,true);Screen.Cursor := crDefault;MessageBox(Handle, '导出成功 ', '提⽰', MB_OK +MB_ICONINFORMATION);end;end;FSaveDialog.Destroy;end;excepton e: exception dobeginApplication.MessageBox(PChar(e.message), '错误', MB_OK + MB_ICONSTOP);end;end;end;。

将DBGrid中的数据导出Excel的函数

将DBGrid中的数据导出Excel的函数
ExcelApplicationData.Destroy;
end;
local_Int: Integer;
Field_ID: Array of Integer;
Field_Note: Array of String;
Field_Total: Integer;
begin
try
DeleteFile(ExeclName);
except
// ExcelWorksheetData.Cells.Item[local_Int + 1 , k] :=''''+dbgrid_in.Columns.Items[k-1]. ;
k := k + 1;
end;
Next;
end;
问题: 将DBGrid中的数据导出Excel,并且可以选择DBGrid中任何一列导出Excel(数据量非常大) ( 积分: 50 )
分类: OLE/Automation
来自: yan9708, 时间: 2004-09-21 12:18:00, ID: 2817183
例如:
DBGrid中有3列(a1,a2,a3) 和 10万条或者更多条的数据,想要在最短的时间内导出Excel,并且可以自由选择a1,a2,a3导出Excel.
ExcelWorksheetData.Destroy;
ExcelWorkbookData.Disconnect;
ExcelWorkbookData.Destroy;
ExcelApplicationData.Disconnect;
ExcelApplicationData.Quit;

unidbgrid导出excel实例-概述说明以及解释

unidbgrid导出excel实例-概述说明以及解释

unidbgrid导出excel实例-概述说明以及解释1.引言1.1 概述概述部分的内容可如下所写:引言部分是文章的开篇,用来介绍读者将要阅读的主题和内容。

本文的主题是"unidbgrid导出excel实例",该主题将围绕unidbgrid控件在实现导出Excel功能上的应用展开。

接下来的章节将会详细介绍unidbgrid控件以及它在导出Excel过程中的方法和实例。

通过本文,读者将了解如何使用unidbgrid控件实现将数据导出到Excel文件中的操作,为读者提供了一种简单高效的数据导出方式。

在正文部分,将首先介绍unidbgrid控件的基本概念、特点和优势,帮助读者对该控件有一个整体的了解。

然后,将详细讲解unidbgrid控件在导出Excel功能方面的方法和技巧,让读者能够灵活运用这些方法来实现自己的需求。

接着,结合具体实例,展示unidbgrid导出Excel的具体操作步骤,并对实例进行详细的分析和解读。

最后,通过总结和结果展望,对本文的内容进行回顾和展望,为读者提供进一步的参考和引导。

通过阅读本文,读者将会了解到unidbgrid控件的基本使用方法和导出Excel的具体操作步骤,掌握一种实用的数据导出技巧。

希望本文能为读者提供帮助和启发,促进对unidbgrid控件和Excel导出功能的深入理解和应用。

1.2 文章结构文章结构部分是指文章整体的组织架构和内容分布情况。

在本篇文章中,文章结构分为引言、正文和结论三个部分。

引言部分主要包括概述、文章结构和目的。

在概述中,对unidbgrid导出excel实例的主题进行简要介绍,指出该实例的重要性和应用场景。

文章结构部分介绍本文的整体组织架构,包括引言、正文和结论三个主要部分。

通过明确文章的结构,读者可以更好地理解和掌握文章的内容。

目的部分说明本文的写作目的,即通过介绍unidbgrid导出excel实例的方法,帮助读者了解如何使用unidbgrid实现数据导出功能。

DBGridEh导入到Excel

DBGridEh导入到Excel

-----------------------------------------HmExcel.pas-----------------------------------------Delphi中DBGridEh导出数据到Excel中,支持多级(最多三级)层级列标题、支持页脚汇总栏导出。

日期、数字等形式的字符串类型自动使用Text格式,保持原有数据类型,防止Excel自作多情删除数字前导0,或将“-”、识别为日期等。

用法:将HmExcel.pas放置在Delphi的搜索路径下,或程序路径下添加该单元到工程中,然后Use该单元,或者直接将HmExcel添加到uses中。

然后就可以使用ExpToExcel 函数了。

unit HmExcel;interfaceusesForms,ComObj,DBGridEh,SysUtils,DB,Variants;function ExpToExcel(dbg:TDBGridEh;title:string;subTitle:string=''):Boolean;implementation{编写:HanMon 2006-07-10 最后修改:2012-09-11功能:DBGridEh导出到Excel,支持多表头合并(最多三列),合计栏导出声明:Procedure ExpToExcel(dbg:TDBGridEh;title:string;subTitle:string='');参数:1.dbg :控件,三方控件EhLib控件包中DBGridEh控件实例2.title :字符,导出Excel的第一行,默认字体24号3.subTitle :字符:子标题,默认为当前日期,可以传入导出的时间段注意:1.只支持最多三层标题的合并(多了也是浪费)2.多层标题中如(ABC|A,ABC,ABC|C)在表格中支持合并,即第二行第二列为空ABCA, ,C由于没有实际意义,本单元不支持,只支持如(ABC|A,ABC|B,ABC|C)严格以分割符'|'来识别3.如果有Footer,本单元只支持一行Footer导出}// 01.将数字列转换为Excel格式的字母列function getXlsCol(const col:integer):string;varm,n:integer;beginif (col<=0)or(col>256) thenresult:='Error'//异常(Error)else if col<=26 then beginm:=col+64;result:=chr(m);end else beginm:=(col-1)div 26;n:=col-26*m+64;result:=getXlsCol(m)+chr(n);end;end;{-------------------------------------------------}// 02.获得分层标题的层次数function getLevel(aTitle:string):integer;vari:integer;beginResult:=1;for i:=1 to length(aTitle) doif aTitle[i]='|' thenResult:=Result+1;end;{-------------------------------------------------}// 03.获得分层标题的最大层次function getMaxLevel(dbg:TDBGridEh):integer;varm,i:integer;beginResult:=1;for i:=0 to dbg.Columns.Count-1 do beginm:=getLevel(dbg.Columns[i].Title.Caption);if m>Result thenResult:=m;end;end;{-------------------------------------------------}// 04.获得同一层的结束位置(level=1顶层level=2次顶层)procedure getBeginEndCol(dbg:TDBGridEh;start,level:integer;var c1,c2:integer); vars,s1:string;beginc1:=start;c2:=start;s:=dbg.Columns[start].Title.Caption;if level=1 then beginif pos('|',s)=0 thenexit;s:=copy(s,1,pos('|',s))end else if level=2 then begins1:=copy(s,1,pos('|',s));s:=copy(s,pos('|',s)+1,maxInt);if pos('|',s)=0 thenexit;s:=s1+copy(s,1,pos('|',s));end;while (c1>=0)and(pos(s,dbg.Columns[c1].Title.Caption)>0) doc1:=c1-1;c1:=c1+1;while (c2<=(dbg.Columns.Count-1))and(pos(s,dbg.Columns[c2].Title.Caption)>0) do c2:=c2+1;c2:=c2-1;end;{-------------------------------------------------}// A.导出到Excel:参数1:第三方控件表格,参数2:标题,参数3:副标题function ExpToExcel(dbg:TDBGridEh;title:string;subTitle:string=''):Boolean;vari,j,k,col,maxLevel:integer;app,bok,sht:variant;s,s1:string;beginResult:=False;trytryapp:=getActiveOleObject('excel.application');exceptapp:=createOleObject('excel.application');end;exceptexit;end;trybok:=app.workbooks.add;sht:=app.worksheets[1];col:=dbg.Columns.Count;sht.cells(1,1):=title;if subTitle='' thensubTitle:=FormatDateTime('yyyy-mm-dd',date);sht.cells(2,1):=subTitle;// 可转换成数字或日期时间的字符串,Excel会自动转换成对应数据类型,可牵制设置成文本方式显示for i:=0 to dbg.Columns.Count-1 doif dbg.Columns[i].Field.DataType in [ftString,ftMemo,ftFixedChar,ftWideString,ftFmtMemo] then beginsht.range[format('%s:%s',[getXlsCol(i+1),getXlsCol(i+1)])].NumberFormatLocal:='@';end;//在Excel获得和分层表格相同的单元格合并// 例: ID AB|A AB|B CDE|CD|C CDE|CD|D CDE|E FmaxLevel:=getmaxLevel(dbg);for i:=0 to dbg.Columns.Count-1 do begin//所有数字以字符表示,可以调整为某部分列数字以文本表示s:=dbg.Columns[i].Title.Caption;//单层垂直合并if pos('|',s)=0 then beginsht.cells(3,i+1):=s;if maxLevel>1 thensht.range[format('%s3:%s%d',[getXlsCol(i+1),getXlsCol(i+1),maxLevel+2])].merge;continue;end elses1:=copy(s,1,pos('|',s)-1);s:=copy(s,pos('|',s)+1,maxInt);getBeginEndCol(dbg,i,1,j,k);//第三行合并if i=j then beginsht.cells(3,i+1):=s1;if j<>k thensht.range[format('%s3:%s3', [getXlsCol(j+1),getXlsCol(k+1)])].merge;end;//双层垂直合并if pos('|',s)=0 then beginsht.cells(4,i+1):=s;if maxLevel>2 thensht.range[format('%s4:%s%d',[getXlsCol(i+1),getXlsCol(i+1),maxLevel+2])].merge;continue;end;//三层getBeginEndCol(dbg,i,2,j,k);if i=j then beginsht.cells(4,i+1):=copy(s,1,pos('|',s)-1);if j<>k thensht.range[format('%s4:%s4', [getXlsCol(j+1),getXlsCol(k+1)])].merge;end;sht.cells(5,i+1):=copy(s,pos('|',s)+1,maxInt);end;//导出数据dbg.DataSource.DataSet.First;i:=2+MaxLevel;while not dbg.DataSource.DataSet.Eof do begini:=i+1;sht.cells(i,1):=i-3;for j:=0 to col-1 doif dbg.Columns[j].Field<>nil then //忽略不与数据库字段对应的列sht.cells(i,j+1):=dbg.Columns[j].Field.DisplayText;dbg.DataSource.DataSet.Next;end;dbg.DataSource.DataSet.First;//导出页脚统计数据数据if dbg.FooterRowCount>0 then begini:=i+1;for j:=0 to col-1 doif dbg.Columns[j].Footer.ValueType=fvtStaticText thensht.cells(i,j+1):=dbg.Columns[j].Footer.Valueelse if dbg.Columns[j].Footer.ValueType=fvtNon thencontinueelsesht.cells(i,j+1):=varToStr(dbg.Columns[j].Footer.SumValue);end;//设置Excel格式s:=format('A1:%s1', [getXlsCol(col)]); //主标题(第一行)sht.range[s].merge;sht.range[s].font.size:=14;s:=format('A2:%s2',[getXlsCol(col)]); //副标题(第二行)sht.range[s].merge;sht.range[s].font.size:=10;s:=format('A1:%s%d',[getXlsCol(col),2+MaxLevel]); //主标题,副标题,列名(前三行)水平垂直居中,粗体sht.range[s].HorizontalAlignment:=-4108;sht.range[s].VerticalAlignment:=-4108;sht.range[s].font.bold:=true;if dbg.FooterRowCount>0 then //列名,数据区加边框(不包括页脚区)sht.range[format('A3:%s%d',[getXlsCol(col),i-1])].borders.lineStyle:=1 elsesht.range[format('A3:%s%d',[getXlsCol(col),i])].borders.lineStyle:=1;s:=format('A3:%s%d',[getXlsCol(col),i]); //列名,数据,统计行字体10,自动换行,加边框sht.range[s].font.size:=10;sht.columns[format('A:%s',[getXlsCol(col)])].EntireColumn.AutoFit; //自动适应列宽bok.saved:=true;app.visible:=true;excepton e:Exception do beginApplication.MessageBox(PChar(e.Message+#13+' 数据导出异常,操作取消!'),'提示');bok.saved:=true;app.quit;end;end;sht:=unAssigned;bok:=unAssigned;app:=unAssigned;Result:=True;end;end.。

gridview --导出execl 方法及身份证号灯数据类型被转换为数字导致数据错误。及导出数据方法。

gridview --导出execl 方法及身份证号灯数据类型被转换为数字导致数据错误。及导出数据方法。

gridview --导出execl 方法及身份证号灯数据类型被转换为数字导致数据错误。

及导出数据方法。

绍:将GridView的内容导出到Excel是很普通的应用,在很多网站上都有使用。

有各种不同的技术来实现GridView导出到Excel中,主要是看应用程序的具体情况。

在本文中我将演示一些你会觉得有用的技巧。

从GridView导出到Excel(基础代码)让我们从基础的导出方法开始。

首先,我们需要用一些数据填充GridView。

我创建了一个自定义的数据表,它包含了多个字段。

你可以在下面的截图中看到。

现在,下一步的任务是使用数据库中的数据来填充GridView。

试一试下面的代码,它使用DataSet来填充GridView。

1private void BindData()2{34SqlConnection myConnection = newSqlConnection("Server=localhost;Database=School;Trusted_Connection=true");56SqlDataAdapter ad = new SqlDataAdapter("SELECT * FROM Users", myConnection);78DataSet ds = new DataSet();910ad.Fill(ds);1112gvUsers.DataSource = ds;1314gvUsers.DataBind();1516}1718所以GridView现在已经填充了数据。

接下去的任务就是将GridView导出到Excel。

你可以在button的click事件中使用下面的代码。

1Response.ClearContent();23Response.AddHeader("content-disposition", "attachment; filename=MyExcelFile.xls");45Response.ContentType = "application/excel";67StringWriter sw = new StringWriter();89HtmlTextWriter htw = new HtmlTextWriter(sw);1011gvUsers.RenderControl(htw);1213Response.Write(sw.ToString());1415Response.End();16你同时还要重载VerifyRenderingInServerForm方法。

DBgrid导入Excel

DBgrid导入Excel

DBGrid导入到Excel中第一种这是一个表格导入到EXCEL的类,绝大部份代码归原作者所有,我只是在其上作了少量的修改,加入了标题。

unit DBGrid2Excel;interfaceusesWindows, Variants, Classes, SysUtils, Forms, DB, DBGrids, ComObj;typeTUpAniInfoProc = procedure (const sInfo: string) of object;function DBGridToExcel(dgrSource: TDBGrid;Title:string = '';UpAniInfo: TUpAniInfoProc = nil): Integer;implementationfunction DBGridToExcel(dgrSource: TDBGrid; Title:string; UpAniInfo: TUpAniInfoProc): Integer;const //从DBGrid导出到Excel(2005.8.23改进至可以导入几乎无限的数据) MAX_SHEET_ROWS = 65536-1; //Excel每Sheet最大行数MAX_VAR_ONCE = 1000; //一次导出的条数var //返回导出记录条数MyExcel, varCells: Variant;MySheet, MyCells, Cell1, Cell2, Range: OleVariant;iRow, iCol, iSheetIdx, iVarCount, iCurRow, iTitle: integer;CurPos: TBookmark;begindgrSource.DataSource.DataSet.DisableControls;CurPos := dgrSource.DataSource.DataSet.GetBookmark;dgrSource.DataSource.DataSet.First;MyExcel := CreateOleObject('Excel.Application');MyExcel.WorkBooks.Add;MyExcel.Visible := False;//如果要加入标题if Trim(Title)<>'' then iTitle:=1 else iTitle := 0;if dgrSource.DataSource.DataSet.RecordCount <= MAX_VAR_ONCE then iVarCount := dgrSource.DataSource.DataSet.RecordCount+iTitleelseiVarCount := MAX_VAR_ONCE;varCells := VarArrayCreate([1,iVarCount,1,dgrSource.FieldCount], varVariant);iSheetIdx := 1;iRow := 0;Result := 0;while not dgrSource.DataSource.DataSet.Eof dobeginif (iRow = 0) or (iRow > MAX_SHEET_ROWS + 1) thenbegin //新增一个Sheetif iSheetIdx <= MyExcel.WorkBooks[1].WorkSheets.Count thenMySheet := MyExcel.WorkBooks[1].WorkSheets[iSheetIdx]elseMySheet := MyExcel.WorkBooks[1].WorkSheets.Add(NULL, MySheet);//加在后面MyCells := MySheet.Cells;Inc(iSheetIdx);iRow := 1;//如果需要加入标题的话if Trim(Title)<>'' thenbeginMySheet.Cells[1,1] := Title;MySheet.Cells[1,1].Font.Bold := True;//MySheet.Cells[1,1].Font.Color := clRed;MySheet.Cells[1,1].Font.Size := 15;Inc(iRow);end;//生成列名for iCol := 1 to dgrSource.FieldCount dobeginMySheet.Cells[1+iTitle, iCol] := dgrSource.Fields[iCol-1].DisplayName;MySheet.Cells[1+iTitle, iCol].Font.Bold := True;{MySheet.Select;MySheet.Cells[iRow,iCol].Select;MyExcel.Selection.Font.Bold := true;}//这种方法也可(Sheet.Select不可少)MySheet.Columns[iCol].ColumnWidth := dgrSource.Fields[iCol-1].DisplayWidth;if (dgrSource.Fields[iCol - 1].DataType = ftString)or (dgrSource.Fields[iCol - 1].DataType = ftWideString) thenbegin //对于“字符串”型数据则设Excel单元格为“文本”型MySheet.Columns[iCol].NumberFormatLocal := ;end;end;Inc(iRow);end;iCurRow := 1;while not dgrSource.DataSource.DataSet.Eof dobeginfor iCol := 1 to dgrSource.FieldCount dobeginvarCells[iCurRow, iCol] := dgrSource.Fields[iCol-1].AsString;end;Inc(iRow);Inc(iCurRow);Inc(Result);dgrSource.DataSource.DataSet.Next;if (iCurRow > iVarCount) or (iRow > MAX_SHEET_ROWS + 1) thenbeginif Assigned(UpAniInfo) thenUpAniInfo(Format('(已导出%d条)', [Result])); //显示已导出条数Application.ProcessMessages;Break;end;end;Cell1 := MyCells.Item[iRow - iCurRow + 1 + iTitle, 1];Cell2 := MyCells.Item[iRow - 1,dgrSource.FieldCount];Range := MySheet.Range[Cell1 ,Cell2];Range.Value := varCells;if (iRow > MAX_SHEET_ROWS + 1) then //一个Sheet导出结束beginMySheet.Select;MySheet.Cells[1, 1].Select; //使得每一Sheet均定位在第一格end;Cell1 := Unassigned;Cell2 := Unassigned;Range := Unassigned;end;MyCells := Unassigned;varCells := Unassigned;MyExcel.WorkBooks[1].WorkSheets[1].Select; //必须先选Sheet 2005.8.23 MyExcel.WorkBooks[1].WorkSheets[1].Cells[1,1].Select;MyExcel.Visible := True;MyExcel.WorkBooks[1].Saved := True;MyExcel := Unassigned;if CurPos <> nil thenbegindgrSource.DataSource.DataSet.GotoBookmark(CurPos);dgrSource.DataSource.DataSet.FreeBookmark(CurPos);end;dgrSource.DataSource.DataSet.EnableControls;end;end.第二种******************************************************************* 函数名:DBGridT oExcel** 输入:TDBGrid *,AnsiString *** TDBGrid *:数据来源。

Delphi—将TDBGrid数据导出至Excel(支持多sheet)

Delphi—将TDBGrid数据导出至Excel(支持多sheet)

Delphi—将TDBGrid数据导出至Excel(支持多sheet)procedureTfrmList.SaveT oExcel(dg:TDBGrid;ado:TADOQuery);varMsExcel,sheet:variant;dialogSave:TSaveDialog;i:integer;s,str:string;strlist:TStringList;fExist:boolean;begindialogsave:=TSaveDialog.Create(Application);dialogsave.Filter:='Excel文件(*.xls) |*.xls';str:=formatdatetime('yymmddhhmmss',now);if dialogsave.Execute thenbeginscreen.Cursor:=crHourGlass;//****创建MSEXCEL对象tryMsExcel:=CreateOleObject('Excel.Application');exceptshowmessage('请确定您的计算机是否已正确安装Microsoft Excel ?');freeandnil(dialogsave);screen.Cursor:= crDefault;exit;end;try//****为新工作表命名,默认为当前的日期时间if InputQuery('输入工作表名称','该类文件允许以多个工作表的形式进行保存,请输入该工作表的名称',str) thenbegin//****以下代码先检测导出的文件是否已存在,如果已存在,则打开并增加一工作表,否则新建if fileExists(dialogsave.FileName) thenbeginfExist:=true;msexcel.workbooks.open(dialogsave.FileName); //打开已存在的文件sheet:=msexcel.worksheets.add; //新增一工作表endelsebeginfExist:=false;msexcel.workbooks.add; //新建一工作簿sheet:=msexcel.workbooks[1].worksheets[1];end;//****以下代码将DBGrid内容复制到粘贴板中strlist:=Tstringlist.Create;s:='';for i:=0 to dg.FieldCount-1 do //将标题行加入字符串S中s:=s+dg.Fields[i].FieldName+#9;strlist.Add(S); //将标题行加入至字符串列表strList中ado.First;while not ado.Eof do //穷举数据库,并加入字符串列表中begins:='';for i:=0 to dg.FieldCount-1 dos:= s+dg.Fields[i].AsString+#9;strlist.Add(s);ado.Next;end;clipboard.AsText:=strlist.Text; //将字符串列表内容加入到粘贴板sheet.cells.NumberFormatLocal:='@'; //设置工作表字体格式为文本sheet.cells.Font.Size:='10'; //设置字体大小sheet.Paste; //粘贴:=str; //为工作表命名if fExist then //保存文件msexcel.workbooks[1].saveelsemsexcel.workbooks[1].SaveAs(dialogsave.filename);showmessage(文件已成功导出至以下位置: '+dialogsave.filename);end;exceptshowmessage(文件不可用,请稍后重试!');freeandnil(strlist);msexcel.quit; //退出Excelmsexcel:=Unassigned ; //释放MSEXCEL对象freeandnil(dialogsave);screen.Cursor:= crDefault;exit;end;freeandnil(strlist);msexcel.quit; //退出Excelmsexcel:=Unassigned ; //释放MSEXCEL对象freeandnil(dialogsave);screen.Cursor:= crDefault; end;end;。

C++DBGrid中据出到Word和Excel

C++DBGrid中据出到Word和Excel

一、将DBGrid中的内容导出到Word文档//---------------------------------------------------------------------------// 将DBGrid中的数据导出到Word文档//---------------------------------------------------------------------------void __fastcall DBGrid2Word(TDBGrid *dbg, String strDocFile){if(!dbg->DataSource->DataSet->Active) // 数据集没有打开就返回return;Variant vWordApp, vTable, VCell;try{vWordApp = Variant::CreateObject("Word.Application");}catch(...){MessageBox(0, "启动 Word 出错, 可能是没有安装Word.","DBGrid2Word", MB_OK | MB_ICONERROR);vWordApp = Unassigned;return;}// 隐藏Word界面vWordApp.OlePropertySet("Visible", false);// 新建一个文档vWordApp.OlePropertyGet("Documents").OleFunction("Add");Variant vSelect = vWordApp.OlePropertyGet("Selection");// 设置一下字体,大小vSelect.OlePropertyGet("Font").OlePropertySet("Size", dbg->Font->Size);vSelect.OlePropertyGet("Font").OlePropertySet("Name", dbg->Font->Name.c_str());// 要插入表格的行数int nRowCount(dbg->DataSource->DataSet->RecordCount + 1);nRowCount = nRowCount < 2? 2: nRowCount;// 要插入表格的列数int nColCount(dbg->Columns->Count);nColCount = nColCount < 1? 1: nColCount;// 在Word文档中插入与DBGrid行数列数基本相同的一个表格vWordApp.OlePropertyGet("ActiveDocument").OlePropertyGet("Tables").OleProcedure("Add", vSelect.OlePropertyGet("Range"),nRowCount, // 行数nColCount, // 列数1, // DefaultTableBehavior:=wdWord9TableBehavior0); // AutoFitBehavior:=wdAutoFitFixed// 操作这个表格vTable = vWordApp.OlePropertyGet("ActiveDocument").OleFunction("Range").OlePropertyGet("Tables").OleFunction("Item", 1);// 设置单元格的宽度for(int i=0; i<nColCount; i++){int nColWidth = dbg->Columns->Items[i]->Width;vTable.OlePropertyGet("Columns").OleFunction("Item", i + 1).OlePropertySet("PreferredWidthType", 3); // wdPreferredWidthPoints vTable.OlePropertyGet("Columns").OleFunction("Item", i + 1).OlePropertySet("PreferredWidth", nColWidth);}// 先将列名写入Word表格for(int j=0; j<dbg->Columns->Count; j++){vCell = vTable.OleFunction("Cell", 1, j + 1);vCell.OlePropertySet("Range", dbg->Columns->Items[j]->FieldName.c_str());// 列名单元格背景颜色 // wdColorGray125vCell.OlePropertyGet("Shading").OlePropertySet("BackgroundPatternColor", 14737632); }// 将DBGrid中的数据写入Word表格dbg->DataSource->DataSet->First();for(int i=0; i<nRowCount; i++){// 63 63 72 75 6E 2E 63 6F 6Dfor(int j=0; j<dbg->Columns->Count; j++){vCell = vTable.OleFunction("Cell", i + 2, j + 1);vCell.OlePropertySet("Range",dbg->DataSource->DataSet->FieldByName(dbg->Columns->Items[j]->FieldName)->AsString.c_str());}dbg->DataSource->DataSet->Next();}// 保存Word文档并退出vWordApp.OlePropertyGet("ActiveDocument").OleProcedure("SaveAs", strDocFile.c_str());vWordApp.OlePropertyGet("ActiveDocument").OleProcedure("Close");Application->ProcessMessages();vWordApp.OleProcedure("Quit");Application->ProcessMessages();vWordApp = Unassigned;// 工作结束MessageBox(0, "DBGrid2Word 转换结束!","DBGrid2Word", MB_OK | MB_ICONINFORMATION);}二、将DBGrid中的内容导出到Excel文档//---------------------------------------------------------------------------// 将DBGrid中的数据导出到Excel文档//---------------------------------------------------------------------------void __fastcall DBGrid2Excel(TDBGrid *dbg, String strXlsFile){if(!dbg->DataSource->DataSet->Active) // 数据集没有打开就返回return;Variant vExcelApp, vSheet;try{vExcelApp = Variant::CreateObject("Excel.Application");}catch(...){MessageBox(0, "启动 Excel 出错, 可能是没有安装Excel.","DBGrid2Excel", MB_OK |MB_ICONERROR);return;}// 隐藏Excel界面vExcelApp.OlePropertySet("Visible", false);// 新建一个工作表vExcelApp.OlePropertyGet("Workbooks").OleFunction("Add", 1); // 工作表// 操作这个工作表vSheet = vExcelApp.OlePropertyGet("ActiveWorkbook").OlePropertyGet("Sheets", 1);// 设置Excel文档的字体vSheet.OleProcedure("Select");vSheet.OlePropertyGet("Cells").OleProcedure("Select");vExcelApp.OlePropertyGet("Selection").OlePropertyGet("Font").OlePropertySet("Size",dbg->Font->Size);vExcelApp.OlePropertyGet("Selection").OlePropertyGet("Font").OlePropertySet("Name",dbg->Font ->Name.c_str());vExcelApp.OlePropertyGet("Selection").OlePropertyGet("Font").OlePropertySet("FontStyle", "常规");vSheet.OlePropertyGet("Cells", 1, 1).OleProcedure("Select");// 表格的行数int nRowCount(dbg->DataSource->DataSet->RecordCount + 1);nRowCount = nRowCount < 2? 2: nRowCount;// 表格的列数int nColCount(dbg->Columns->Count);nColCount = nColCount < 1? 1: nColCount;// 设置单元格的宽度for(int i=0; i<nColCount; i++){int nColWidth = dbg->Columns->Items[i]->Width;vExcelApp.OlePropertyGet("Columns", i + 1).OlePropertySet("ColumnWidth", nColWidth / 7);}// 先将列名写入Excel表格for(int j=0; j<dbg->Columns->Count; j++){// 标题行的行高vExcelApp.OlePropertyGet("Rows", 1).OlePropertySet("RowHeight", 20);vSheet.OlePropertyGet("Cells", 1, j + 1).OlePropertySet("Value", dbg->Columns->Items[j]->FieldName.c_str());// 设置列名单元格的背景色Variant vInter = vSheet.OlePropertyGet( "Cells", 1, j + 1).OlePropertyGet("Interior");vInter.OlePropertySet("ColorIndex", 15); // 灰色vInter.OlePropertySet("Pattern", 1); // xlSolidvInter.OlePropertySet("PatternColorIndex", -4105); // xlAutomatic}// 将DBGrid中的数据写入Excel表格dbg->DataSource->DataSet->First();for(int i=0; i<nRowCount; i++){// 普通数据行的行高16vExcelApp.OlePropertyGet("Rows", i + 2).OlePropertySet("RowHeight", 16);// 63 63 72 75 6E 2E 63 6F 6Dfor(int j=0; j<dbg->Columns->Count; j++){vSheet.OlePropertyGet("Cells", i + 2, j + 1).OlePropertySet("Value",dbg->DataSource->DataSet->FieldByName(dbg->Columns->Items[j]->FieldName)->AsString.c_str());}dbg->DataSource->DataSet->Next();}// 保存Excel文档并退出vExcelApp.OlePropertyGet("ActiveWorkbook").OleFunction("SaveAs", strXlsFile.c_str());vExcelApp.OleFunction("Quit");vSheet = Unassigned;vExcelApp = Unassigned;// 工作结束MessageBox(0, "DBGrid2Excel 转换结束!","DBGrid2Excel", MB_OK | MB_ICONINFORMATION); }。

unigui unidbgrid导出excel实例

unigui unidbgrid导出excel实例

unigui unidbgrid导出excel实例在UniGUI中,UniDBGrid是一个非常常用的组件,用于展示数据库中的数据。

有时候我们需要将UniDBGrid中的数据导出到Excel文件中,以便进行数据分析或者与其他人分享数据。

本文将介绍如何使用UniGUI中的UniDBGrid组件来实现数据导出到Excel的功能。

准备工作在开始之前,确保你已经安装了Delphi和UniGUI,并且已经创建了一个UniGUI项目并连接了数据库。

确保你的UniDBGrid已经绑定了数据源,并且数据源已经连接到数据库中的表。

导出Excel步骤步骤一:添加导出按钮首先,在UniGUI的Form中添加一个按钮,命名为“ExportExcelButton”,用于触发导出Excel的操作。

步骤二:编写导出Excel的代码在“ExportExcelButton”的OnClick事件中编写导出Excel的代码。

以下是一个示例代码:示例代码star:编程语言:delphiusesVcl.OleAuto, System.Variants;procedure TForm1.ExportExcelButtonClick(Sender: TObject);varExcelApp: Variant;i, j: Integer;beginExcelApp := CreateOleObject('Excel.Application');ExcelApp.Workbooks.Add;ExcelApp.Visible := True;// 导出表头for i := 0 to UniDBGrid1.Columns.Count - 1 dobeginExcelApp.Cells[1, i + 1] :=UniDBGrid1.Columns[i].Title.Caption;end;// 导出数据UniDBGrid1.DataSource.DataSet.First;i := 2;while not UniDBGrid1.DataSource.DataSet.Eof dobeginfor j := 0 to UniDBGrid1.Columns.Count - 1 dobeginExcelApp.Cells[i, j + 1] :=UniDBGrid1.DataSource.DataSet.FieldByName(UniDBGrid1.Columns[ j].FieldName).AsString;end;Inc(i);UniDBGrid1.DataSource.DataSet.Next;end;end;示例代码end步骤三:测试导出功能运行你的UniGUI应用程序,点击“ExportExcelButton”按钮,即可将UniDBGrid中的数据导出到Excel文件中。

DBGridEhToExcel(一个导出Excel非常快的类)

DBGridEhToExcel(一个导出Excel非常快的类)

DBGridEhToExcel(一个导出Excel非常快的类)一个导出Excel非常快的类unit DBGridEhT oExcel;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, DB, ComCtrls, ExtCtrls, StdCtrls, Gauges, DBGridEh, ShellApi;typeTTitleCell = array of array of String;//分解DBGridEh的标题TDBGridEhTitle = classprivateFDBGridEh: TDBGridEh; //对应DBGridEhFColumnCount: integer; //DBGridEh列数(指visible为True的列数)FRowCount: integer; //DBGridEh多表头层数(没有多表头则层数为1)procedure SetDBGridEh(const Value: TDBGridEh);function GetTitleRow: integer; //获取DBGridEh多表头层数function GetTitleColumn: integer; //获取DBGridEh列数public//分解DBGridEh标题,由TitleCell二维动态数组返回procedure GetTitleData(var TitleCell: TTitleCell);publishedproperty DBGridEh: TDBGridEh read FDBGridEh write SetDBGridEh;property ColumnCount: integer read FColumnCount;property RowCount: integer read FRowCount;end;TDBGridEhToExcel = class(TComponent)privateFCol: integer;FRow: integer;FProgressForm: TForm; {进度窗体}FGauge: TGauge; {进度条}Stream: TStream; {输出文件流}FBookMark: TBookmark;FShowProgress: Boolean; {是否显示进度窗体}FDBGridEh: TDBGridEh;FBeginDate: TCaption; {开始日期}FTitleName: TCaption; {Excel文件标题} FEndDate: TCaption; {结束日期}FUserName: TCaption; {制表人}FFileName: String; {保存文件名}procedure SetShowProgress(const Value: Boolean);procedure SetDBGridEh(const Value: TDBGridEh);procedure SetBeginDate(const Value: TCaption);procedure SetEndDate(const Value: TCaption);procedure SetTitleName(const Value: TCaption);procedure SetUserName(const Value: TCaption);procedure SetFileName(const Value: String);procedure IncColRow;procedure WriteBlankCell; {写空单元格}{写数字单元格}procedure WriteFloatCell(const AValue: Double; const IncStatus: Boolean=True);{写整型单元格}procedure WriteIntegerCell(const AValue: Integer; const IncStatus: Boolean=True);{写字符单元格}procedure WriteStringCell(const AValue: string; const IncStatus: Boolean=True);procedure WritePrefix;procedure WriteSuffix;procedure WriteHeader; {输出Excel标题} procedure WriteTitle; {输出Excel列标题} procedure WriteDataCell; {输出数据集内容} procedure WriteFooter; {输出DBGridEh 表脚}procedure SaveStream(aStream: TStream);procedure CreateProcessForm(AOwner: TComponent); {生成进度窗体}{根据表格修改数据集字段顺序及字段中文标题}procedure SetDataSetCrossIndexDBGridEh;publicconstructor Create(AOwner: TComponent); override;destructor Destroy; override;procedure ExportT oExcel; {输出Excel文件}publishedproperty DBGridEh: TDBGridEh read FDBGridEh write SetDBGridEh;property ShowProgress: Boolean read FShowProgress write SetShowProgress;property TitleName: TCaption read FTitleName write SetTitleName;property BeginDate: TCaption read FBeginDate writeSetBeginDate;property EndDate: TCaption read FEndDate write SetEndDate;property UserName: TCaption read FUserName write SetUserName;property FileName: String read FFileName write SetFileName;end;varCXlsBof: array[0..5] of Word = ($809, 8, 0, $10, 0, 0);CXlsEof: array[0..1] of Word = ($0A, 00);CXlsLabel: array[0..5] of Word = ($204, 0, 0, 0, 0, 0);CXlsNumber: array[0..4] of Word = ($203, 14, 0, 0, 0);CXlsRk: array[0..4] of Word = ($27E, 10, 0, 0, 0);CXlsBlank: array[0..4] of Word = ($201, 6, 0, 0, $17);implementation{ TDBGridEhTitle }function TDBGridEhTitle.GetTitleColumn: integer;vari, ColumnCount: integer;beginColumnCount := 0;for i := 0 to DBGridEh.Columns.Count - 1 dobeginif DBGridEh.Columns[i].Visible thenInc(ColumnCount);end;Result := ColumnCount;end;procedure TDBGridEhTitle.GetTitleData(var TitleCell: TTitleCell);vari, Row, Col: integer;Caption: String;beginFColumnCount := GetTitleColumn;FRowCount := GetTitleRow;SetLength(TitleCell,FColumnCount,FRowCount);Row := 0;for i := 0 to DBGridEh.Columns.Count - 1 dobeginif DBGridEh.Columns[i].Visible thenbeginCol := 0;Caption := DBGridEh.Columns[i].Title.Caption;while POS('|', Caption) > 0 dobeginTitleCell[Row,Col] := Copy(Caption, 1, Pos('|',Caption)-1);Caption := Copy(Caption,Pos('|', Caption)+1, Length(Caption));Inc(Col);end;TitleCell[Row, Col] := Caption;Inc(Row);end;end;end;function TDBGridEhTitle.GetTitleRow: integer;vari, j: integer;MaxRow, Row: integer;beginMaxRow := 1;for i := 0 to DBGridEh.Columns.Count - 1 dobeginRow := 1;for j := 0 to Length(DBGridEh.Columns[i].Title.Caption) dobeginif DBGridEh.Columns[i].Title.Caption[j] = '|' thenInc(Row);end;if MaxRow < Row thenMaxRow := Row;end;Result := MaxRow;end;procedure TDBGridEhTitle.SetDBGridEh(const Value: TDBGridEh);beginFDBGridEh := Value;end;{ TDBGridEhToExcel }constructor TDBGridEhToExcel.Create(AOwner: TComponent);begininherited Create(AOwner);FShowProgress := True;end;procedure TDBGridEhToExcel.SetShowProgress(const Value: Boolean);beginFShowProgress := Value;procedure TDBGridEhT oExcel.SetDBGridEh(const Value: TDBGridEh);beginFDBGridEh := Value;end;procedure TDBGridEhT oExcel.SetBeginDate(const Value: TCaption);beginFBeginDate := Value;end;procedure TDBGridEhT oExcel.SetEndDate(const Value: TCaption);beginFEndDate := Value;end;procedure TDBGridEhT oExcel.SetTitleName(const Value: TCaption);beginFTitleName := Value;end;procedure TDBGridEhT oExcel.SetUserName(const Value: TCaption);beginFUserName := Value;end;procedure TDBGridEhT oExcel.SetFileName(const Value: String);beginFFileName := Value;procedure TDBGridEhToExcel.IncColRow;beginif FCol = DBGridEh.DataSource.DataSet.FieldCount - 1 then beginInc(FRow);FCol := 0;endelseInc(FCol);end;procedure TDBGridEhToExcel.WriteBlankCell;beginCXlsBlank[2] := FRow;CXlsBlank[3] := FCol;Stream.WriteBuffer(CXlsBlank, SizeOf(CXlsBlank));IncColRow;end;procedure TDBGridEhToExcel.WriteFloatCell(const AValue: Double; const IncStatus: Boolean=True);beginCXlsNumber[2] := FRow;CXlsNumber[3] := FCol;Stream.WriteBuffer(CXlsNumber, SizeOf(CXlsNumber));Stream.WriteBuffer(AValue, 8);if IncStatus thenIncColRow;end;procedure TDBGridEhToExcel.WriteIntegerCell(const AValue: Integer; const IncStatus: Boolean=True);V: Integer;beginCXlsRk[2] := FRow;CXlsRk[3] := FCol;Stream.WriteBuffer(CXlsRk, SizeOf(CXlsRk));V := (AValue Shl 2) Or 2;Stream.WriteBuffer(V, 4);if IncStatus thenIncColRow;end;procedure TDBGridEhToExcel.WriteStringCell(const AValue: string; const IncStatus: Boolean=True);varL: integer;beginL := Length(AValue);CXlsLabel[1] := 8 + L;CXlsLabel[2] := FRow;CXlsLabel[3] := FCol;CXlsLabel[5] := L;Stream.WriteBuffer(CXlsLabel, SizeOf(CXlsLabel));Stream.WriteBuffer(Pointer(AValue)^, L);if IncStatus thenIncColRow;end;procedure TDBGridEhToExcel.WritePrefix;beginStream.WriteBuffer(CXlsBof, SizeOf(CXlsBof));end;procedure TDBGridEhToExcel.WriteSuffix;beginStream.WriteBuffer(CXlsEof, SizeOf(CXlsEof));end;procedure TDBGridEhToExcel.WriteHeader;varOpName, OpDate: String;begin//标题FCol := 3;WriteStringCell(TitleName,False);FCol := 0;Inc(FRow);if Trim(BeginDate) <> '' thenbegin//开始日期FCol := 0;WriteStringCell(BeginDate,False);FCol := 0end;if Trim(EndDate) <> '' thenbegin//结束日期FCol := 5;WriteStringCell(EndDate,False);FCol := 0;end;if (Trim(BeginDate) <> '') or (Trim(EndDate) <> '') then Inc(FRow);//制表人OpName := '制表人:' + UserName;FCol := 0;WriteStringCell(OpName,False);FCol := 0;//制表时间OpDate := '制表时间:' + DateTimeT oStr(Now); FCol := 5;WriteStringCell(OpDate,False);FCol := 0;Inc(FRow);end;procedure TDBGridEhToExcel.WriteTitle;vari, j: integer;DBGridEhTitle: TDBGridEhTitle;TitleCell: TTitleCell;beginDBGridEhTitle := TDBGridEhTitle.Create;tryDBGridEhTitle.DBGridEh := FDBGridEh; DBGridEhTitle.GetTitleData(TitleCell);tryfor i := 0 to DBGridEhTitle.RowCount - 1 do beginfor j := 0 to DBGridEhTitle.ColumnCount - 1 do beginFCol := j;WriteStringCell(TitleCell[j,i],False);end;Inc(FRow);end;FCol := 0;exceptend;finallyDBGridEhTitle.Free;end;end;procedure TDBGridEhToExcel.WriteDataCell;vari: integer;beginDBGridEh.DataSource.DataSet.DisableControls;FBookMark := DBGridEh.DataSource.DataSet.GetBookmark;tryDBGridEh.DataSource.DataSet.First;while not DBGridEh.DataSource.DataSet.Eof dobeginfor i := 0 to DBGridEh.DataSource.DataSet.FieldCount - 1 do beginif DBGridEh.DataSource.DataSet.Fields[i].IsNull or (not DBGridEh.DataSource.DataSet.Fields[i].Visible) thenWriteBlankCellelsebegincase DBGridEh.DataSource.DataSet.Fields[i].DataType offtSmallint, ftInteger, ftWord, ftAutoInc, ftBytes:WriteIntegerCell(DBGridEh.DataSource.DataSet.Fields[i].AsIn teger);ftFloat, ftCurrency, ftBCD:WriteFloatCell(DBGridEh.DataSource.DataSet.Fields[i].AsFloa t);elseif DBGridEh.DataSource.DataSet.Fields[i] Is TBlobfield then // 此类型的字段(图像等)暂无法读取显示WriteStringCell('')elseWriteStringCell(DBGridEh.DataSource.DataSet.Fields[i].AsStri ng);end;end;end;//显示进度条进度过程if ShowProgress thenbeginFGauge.Progress := DBGridEh.DataSource.DataSet.RecNo;FGauge.Refresh;end;DBGridEh.DataSource.DataSet.Next;end;finallyif DBGridEh.DataSource.DataSet.BookmarkValid(FBookMark) thenDBGridEh.DataSource.DataSet.GotoBookmark(FBookMark);DBGridEh.DataSource.DataSet.EnableControls;end;end;procedure TDBGridEhToExcel.WriteFooter;vari, j: integer;beginif DBGridEh.FooterRowCount = 0 then exit;FCol := 0;if DBGridEh.FooterRowCount = 1 thenbeginfor i := 0 to DBGridEh.Columns.Count - 1 dobeginif DBGridEh.Columns[i].Visible thenbeginWriteStringCell(DBGridEh.Columns[i].Footer.Value,False); Inc(FCol);end;end;endelse if DBGridEh.FooterRowCount > 1 thenbeginfor i := 0 to DBGridEh.Columns.Count - 1 dobeginif DBGridEh.Columns[i].Visible thenbeginfor j := 0 to DBGridEh.Columns[i].Footers.Count - 1 do beginWriteStringCell(DBGridEh.Columns[i].Footers[j].Value ,False); Inc(FRow);end;Inc(FCol);FRow := FRow - DBGridEh.Columns[i].Footers.Count; end;end;end;FCol := 0;end;procedure TDBGridEhToExcel.SaveStream(aStream: TStream);beginFCol := 0;FRow := 0;Stream := aStream;//输出前缀WritePrefix;//输出表格标题WriteHeader;//输出列标题WriteTitle;//输出数据集内容WriteDataCell;//输出DBGridEh表脚WriteFooter;//输出后缀WriteSuffix;end;procedure TDBGridEhToExcel.ExportToExcel;varFileStream: TFileStream;Msg: String;begin//如果数据集为空或没有打开则退出if (DBGridEh.DataSource.DataSet.IsEmpty) or (not DBGridEh.DataSource.DataSet.Active) thenexit;//如果保存的文件名为空则退出if Trim(FileName) = '' thenexit;//根据表格修改数据集字段顺序及字段中文标题SetDataSetCrossIndexDBGridEh;Screen.Cursor := crHourGlass;trytryif FileExists(FileName) thenbeginMsg := '已存在文件(' + FileName + '),是否覆盖?';if Application.MessageBox(PChar(Msg),'提示',MB_YESNO+MB_ICONQUESTION+MB_DEFBUTTON2) = IDYES thenbegin//删除文件DeleteFile(FileName)endelseexit;end;//显示进度窗体if ShowProgress thenCreateProcessForm(nil);FileStream := TFileStream.Create(FileName, fmCreate);try//输出文件SaveStream(FileStream);finallyFileStream.Free;end;//打开Excel文件ShellExecute(0, 'Open', PChar(FileName), nil, nil, SW_SHOW);exceptend;finallyif ShowProgress thenFreeAndNil(FProgressForm);Screen.Cursor := crDefault;end;end;destructor TDBGridEhToExcel.Destroy;begininherited Destroy;end;procedure TDBGridEhT oExcel.CreateProcessForm(AOwner: TComponent);varPanel: TPanel;Prompt: TLabel; {提示的标签}beginif Assigned(FProgressForm) thenexit;FProgressForm := TForm.Create(AOwner);with FProgressForm dobegintry := '宋体'; {设置字体}Font.Size := 9;BorderStyle := bsNone;Width := 300;Height := 100;BorderWidth := 1;Color := clBlack;Position := poScreenCenter;Panel := TPanel.Create(FProgressForm); with Panel dobeginParent := FProgressForm;Align := alClient;BevelInner := bvNone;BevelOuter := bvRaised;Caption := '';end;Prompt := TLabel.Create(Panel);with Prompt dobeginParent := Panel;AutoSize := True;Left := 25;Top := 25;Caption := '正在导出数据,请稍候......'; Font.Style := [fsBold];end;FGauge := TGauge.Create(Panel);with FGauge dobeginParent := Panel;ForeColor := clBlue;Left := 20;Top := 50;Height := 13;Width := 260;MinValue := 0;MaxValue := DBGridEh.DataSource.DataSet.RecordCount;end;exceptend;end;FProgressForm.Show;FProgressForm.Update;end;procedureTDBGridEhToExcel.SetDataSetCrossIndexDBGridEh;vari: integer;beginfor i := 0 to DBGridEh.Columns.Count - 1 dobeginDBGridEh.DataSource.DataSet.FieldByName(DBGridEh.Colu mns.Items[i].FieldName).Index := i;DBGridEh.DataSource.DataSet.FieldByName(DBGridEh.Colu mns.Items[i].FieldName).DisplayLabel:= DBGridEh.Columns.Items[i].Title.Caption;DBGridEh.DataSource.DataSet.FieldByName(DBGridEh.Colu mns.Items[i].FieldName).Visible :=DBGridEh.Columns.Items[i].Visible;end;for i := 0 to DBGridEh.DataSource.DataSet.FieldCount - 1 do beginifPOS('*****',DBGridEh.DataSource.DataSet.Fields[i].DisplayLabel) > 0 thenDBGridEh.DataSource.DataSet.Fields[i].Visible := False;end;end;end./************************************************************** ***/调用的例子varDBGridEhT oExcel: TDBGridEhToExcel;beginDBGridEhT oExcel := TDBGridEhToExcel.Create(nil);tryDBGridEhT oExcel.TitleName := '标题;DBGridEhT oExcel.BeginDate := '开始日期:2005-07-01';DBGridEhT oExcel.EndDate := '结束日期:2005-07-18';DBGridEhT erName := '系统管理员';DBGridEhT oExcel.DBGridEh := DBGridEh1;DBGridEhT oExcel.ShowProgress := True;DBGridEhT oExcel.FileName := 'c:\123.xls';DBGridEhT oExcel.ExportT oExcel;finallyDBGridEhT oExcel.Free;end;。

df.to_excel的用法

df.to_excel的用法

df.to_excel的用法在Python的pandas库中,DataFrame对象有一个非常实用的方法叫做to_excel。

这个方法可以将DataFrame对象保存为Excel文件,这对于数据分析和机器学习任务非常有用。

本文将详细介绍df.to_excel的用法,包括参数介绍、示例以及注意事项。

一、参数介绍1. sheet_name:可选参数,指定要保存的Excel工作表的名称。

如果不指定,则默认保存为第一个工作表。

2. index:布尔类型参数,指定是否将索引写入Excel文件。

默认情况下,索引会被写入。

3. header:布尔类型参数,指定是否将列名写入Excel文件。

默认情况下,列名会被写入。

4. index_label:可选参数,指定写入Excel文件的索引标签名称。

如果未指定,则默认与索引值相同。

5. format:可选参数,指定要使用的Excel文件格式。

常见的格式有xls和xlsx。

6. engine:可选参数,指定用于写入Excel文件的引擎。

默认使用‘openpyxl’引擎。

二、示例假设我们有一个名为df的DataFrame对象,现在想要将其保存为Excel文件。

以下是一个简单的示例代码:```pythondf.to_excel('output.xlsx', index=False, header=True)```上述代码将DataFrame对象df保存为名为output.xlsx的Excel 文件,并使用默认的工作表名称(第一个工作表)。

通过设置参数index=False,我们指示不将索引写入文件。

同时,通过设置header=True,我们指示将列名写入文件。

三、注意事项1. 要使用df.to_excel方法,需要安装pandas和openpyxl库。

可以使用以下命令进行安装:```pythonpip install pandas openpyxl```2. 如果要保存为xlsx格式的文件,需要安装xlwt库。

vbsqldatagrid数据导出到excel

vbsqldatagrid数据导出到excel

vbsqldatagrid数据导出到excel你新建一数据工程,在其窗体中添加ADODC数据控件和DATAGRID控件。

添加COMMAND控件,将按钮控件的属性TABINDEX设置为0使用以下代码,可将在DATAGRID控件显示的数据导出到EXCEL,将下列代码中的数据库连接语句和表名改为你自己的数据库和表名:Option ExplicitDim i, j, k As IntegerDim strConn As StringDim pubConn As New adodb.ConnectionDim rsTable As New adodb.RecordsetDim strSQL As StringDim xlapp As VariantDim xlBook As VariantDim xlSHEET As VariantPrivate Sub Command1_Click()Set xlapp = CreateObject("excel.application")Set xlBook = xlapp.workbooks.AddSet xlSHEET = xlBook.worksheets(1)xlapp.Visible = TrueOn Error Resume NextIf Err.Number <> 0 Then Set xlapp = CreateObject("Excel.Application")Set xlBook = xlapp.workbooks.AddSet xlSHEET = xlBook.ActiveSheetFor k = 1 To DataGrid1.Columns.CountxlSHEET.Cells(1, k) = DataGrid1.Columns(k - 1).CaptionNext kFor i = 1 To Adodc1.Recordset.RecordCount + 1For j = 0 To DataGrid1.Columns.CountxlSHEET.Cells(i + 1, j + 1) = Adodc1.Recordset(j) 'Next jAdodc1.Recordset.MoveNextNext iEnd SubPrivate Sub Form_Load()strSQL = "select * from mdlk_sj where 批号='D012'"Adodc1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\hxrkgl.mdb;Persist Security Info=False"Adodc1.RecordSource = strSQLAdodc1.RefreshEnd Sub。

to_excel用法

to_excel用法

to_excel用法to_excel 是 pandas 库中用于将 DataFrame 对象保存为 excel 文件的函数。

语法:DataFrame.to_excel(excel_writer, sheet_name='Sheet1', na_rep='', float_format=None, header=True, index=True,index_label=None, startrow=0, startcol=0, engine=None,merge_cells=True, encoding=None, inf_rep='inf', verbose=True, freeze_panes=None)参数说明:- excel_writer:保存到的 excel 文件名或者文件-like 对象(例如:StringIO、BytesIO)。

- sheet_name:要保存的 sheet 名称,默认为 'Sheet1'。

- na_rep:用于替代缺失值的字符串,默认为空字符串。

- float_format:浮点数格式字符串,默认为None。

- header:是否包含列名,默认为True。

- index:是否包含索引,默认为True。

- index_label:索引列的列名,默认为None。

- startrow:开始写入数据的行号,默认为0。

- startcol:开始写入数据的列号,默认为0。

- engine:写入文件时要使用的引擎,默认为None,即自动选择最适合的引擎。

- merge_cells:是否合并列,默认为True。

- encoding:写入文件时使用的编码,默认为 None,表示使用系统默认编码。

- inf_rep:表示无穷大的字符串,默认为 'inf'。

- verbose:默认为True,表示在写入之前打印加载项。

DB与Excel相互转换的实现方法

DB与Excel相互转换的实现方法

DB与Excel相互转换的实现方法在实际工作中,常常需要把某些相关数据导入到DB(数据库)中,以便实现数据的共享与查询,如何利用已有的Excel数据已成为一个棘手问题;另外,由于Excel具有强大的数据处理和数据分析功能,也常需要将DB中的数据导入到Excel中进行相应地统计分析。

本文通过具体实例讨论了DB与Excel 之间实现相互转换的方法。

1 Excel与DB的相互转换软件开发工具为VB,数据库为Access。

VB是微软公司开发的、事件驱动的编程语言,具有强大的数据处理功能。

它提供了对多种数据库的访问方法,可以方便地访问SQL Server、Oracle、Access等数据库。

Access 是微软公司开发的基于Windows的桌面关系数据库管理系统。

它为建立功能完善的数据库管理系统提供了方便。

1.1 DB To Excel实现数据库表中数据自动转存到Excel表中。

例如,已有一文件名“AA.mdb”的Access数据库文件,该数据库中有一名为“番禺区农用地标准样地属性数据表”的数据表,数据表如图1所示。

在VB中,引用“Microsoft ActiveX Data Objects 2.6 Library”和“Microsoft Excel 11.0 Object Library”,即ADO对象和Excel对象。

通过ADO对象访问数据库实现DB到Excel的转换。

程序代码如下:Dim cnn As New ADODB.Connection '数据库连接对象Dim rs As New Recordset '记录集对象Dim VBExcel As Excel.Application '定义一个Excel应用Dim Excelbook As Excel.Workbook '定义一个Excel工作簿Dim ExcelSheet As Excel.Worksheet '定义一个Excel工作表Dim ExcelFilename As String'Excel文件名Dim TableName As String '数据库表名Dim s As StringDim i, j As IntegerDim row As Integer '记录数TableName = "番禺区农用地标准样地属性数据表"Set VBExcel = CreateObject("Excel.Application") '创建Excel对象Set Excelbook = VBExcel.Workbooks().Add '生成工作簿Set ExcelSheet = Excelbook.Worksheets("Sheet1") '生成工作表s = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\AA.mdb" '连接Access cnn.Open s '打开Accessrs.Open "select * from " & TableName, cnn'......统计记录数rs.MoveFirstDo While Not rs.EOFrow = row + 1rs.MoveNextLoopWith Excelbook.ActiveSheet'......Excel表中第1行存放字段名i = 1For j = 1 To rs.Fields.Count.Cells(i, j) = rs.Fields(j - 1).NameNext j'......Excel表中第2行开始存放记录rs.MoveFirstFor i = 1 To rowFor j = 1 To rs.Fields.Count.Cells(i + 1, j) = rs.Fields(j - 1).ValueNext jrs.MoveNextNext iEnd WithVBExcel.Application.Visible = TrueExcelbook.SaveAs App.Path & "\" & TableName '生成的Excel文件名与数据表文件名一致Set VBExcel = NothingSet Excelbook = NothingSet ExcelSheet = Nothing程序运行后,在当前应用所在路径下自动创建名为“番禺区农用地标准样地属性数据表”的Excel文件,实现了将Access数据库相应数据表中的数据自动导入到Excel表中,结果如图2所示。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

procedure TStock_Viewer.SpeedButton3Click(Sender: TObject);
var
ExcelApplication1:TExcelApplication;
ExcelWorkbook1:TExcelWorkbook;
ExcelWorksheet1:TExcelWorksheet;
i,j:integer;
count:integer;
begin
DBGridEH2.Visible:=False;
try
if StockViewDataset.RecordCount<=0 then begin
application.MessageBox('库存没有记录!','警告',Mb_iconwarning+mb_OK);
exit;
end;
except
Application.MessageBox('发生错误,请联系管理员!','错误',Mb_iconerror+mb_ok);
exit;
end;
try
ExcelApplication1:=TExcelApplication.Create(application);
ExcelWorkbook1:=TExcelWorkbook.Create(application);
ExcelworkSheet1:=TExcelworkSheet.Create(application);
except
application.MessageBox('电脑未安装Office中的Excel,必须安装才能使用Excel导出数据功能!','错误',Mb_iconError+MB_OK);
exit;
end;
SaveDialog1.FileName:=SaveDialog1.FileName+FormatDateTime('yyyymmddhhmmss',now);
try
if SaveDialog1.Execute then begin
StockViewDataset.DisableControls;
count:=StockViewDataset.RecordCount;
ProgressBar1.Max:=count;
ProgressBar1.Position:=ProgressBar1.Min;
ProgressBar1.Visible:=True;
ExcelApplication1.Connect;
ExcelApplication1.Workbooks.Add(Null,0);
ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks[1]);
ExcelWorkSheet1.ConnectTo(ExcelWorkbook1.Sheets[1] as _worksheet);
for i:=0 to DbGridEH1.Columns.Count-1 do begin
Excelworksheet1.Cells.Item[1,i+1]:=DBGridEH1.Columns[i].Title.Caption;
// Excelworksheet1.Cells.Item[1,i+1].
end;
StockViewDataset.First;
j:=3;
while not StockViewDataset.Eof do begin
//Excelworksheet1.Cells.Item[j,3]:=
StockViewDataset.FieldByName('Quantity').AsFloat;
for i:=0 to DBGridEH1.Columns.Count-1 do begin
Excelworksheet1.Cells.Item[j,i+1]:=VarToStr(StockViewDataset.FieldByName(DBGridEH1.Colu mns[i].FieldName).Value);
end;
// Excelworksheet1.Cells.Item[j,3]:=0;
// sleep(1000);
inc(j);
for i:=0 to DBGridEH2.Columns.Count-1 do
ExcelworkSheet1.Cells.Item[j,i+3]:=DBGridEH2.Columns[i].Title.Caption;
inc(j);
AdoStoredProc1.Active:=False;
AdoStoredProc1.ProcedureName:='StockViewDetail';
AdoStoredProc1.Parameters.Refresh;
AdoStoredProc1.Parameters.ParamByName('@MedicineNo').Value:=StockViewDataset.FieldBy Name('MedicineNo').AsString;
AdoStoredProc1.Parameters.ParamByName('@SupplierID').Value:=StockViewDataset.FieldByNa me('SupplierID').AsString;
AdoStoredProc1.Open;
while not AdoStoredProc1.Eof do begin
for i:=0 to DBGridEH2.Columns.Count-1 do
ExcelworkSheet1.Cells.Item[j,i+3]:=Vartostr(AdoStoredProc1.Fields[i].Value);
{ Excelworksheet1.Cells.Item[j,3]:=AdoStoredproc1.Fields[0].AsString;
Excelworksheet1.Cells.Item[j,4]:=AdoStoredproc1.Fields[1].AsFloat;
Excelworksheet1.Cells.Item[j,5]:=AdoStoredproc1.Fields[2].AsFloat;
Excelworksheet1.Cells.Item[j,6]:=AdoStoredproc1.Fields[3].AsFloat;
Excelworksheet1.Cells.Item[j,7]:=AdoStoredproc1.Fields[4].AsDateTime;
Excelworksheet1.Cells.Item[j,8]:=AdoStoredproc1.Fields[5].AsDateTime; }
inc(j);
AdoStoredProc1.Next;
end;
ProgressBar1.Position:=ProgressBar1.Position+1;
StockViewDataset.Next;
inc(j);
end;
ProgressBar1.Visible:=False;
Excelworkbook1.SaveCopyAs(SaveDialog1.FileName+'.xls');
Excelworkbook1.Close(false);
Excelapplication1.Disconnect;
end;
finally
SaveDialog1.FileName:='Stock';
StockViewDataset.EnableControls;
StockViewDataset.First;
ExcelApplication1.Free;
ExcelWorkbook1.Free;
ExcelWorkSheet1.Free;
end;
end;。

相关文档
最新文档