把DBGrid中的数据写到Excel中,并保存为一个新的文件就可以了
至于报表的格式可以自己定
至于报表的格式可以自己定
解决方案 »
- delphi软件哪个版本最好?
- 有个问题请教一下
- 求助:點擊DBGrid中CELL下面的下拉框觸發什麼事件?
- 如何读取二进制文件?有Foxpro源程序,怎么翻译成Delphi的啊。。。。。。
- 用inno制作基于access单机版的安装程序时,出现下面的问题。
- 请问如果窗体有滚动条,我如何把包含了滚动条的部分和可见的窗体部分合成一张图片?
- 网上调查,新年到了,想问问大家一年要买多少钱的和编程有关的书,最喜欢哪个出版社的,买了以后不后悔的有几本
- dbchart
- 一个DBChart控件问题急等帮助,我还是不知道啊因为series下无data source
- 如何在Delphi中打开.Dll文件?
- !!!哪位有 树的遍历算法的程序,等着急用!!(最好是pascal写的)
- 怎样连接远程数据库?
var
RangeE: Excel97.Range;
I, Row: integer;
Book: TBookStr;
begin
//create and show
try
ExcelApplication1.Visible [0] := true;
ExcelApplication1.Workbooks.Add (null,0);
except
InformNoDB('没有安装Excel程序,所以不能导出!');
exit;
end;
//fill the first row with field titles
RangeE := ExcelApplication1.ActiveCell;
for I := 0 to DataModule1.DataSet1.Fields.Count - 1 do
begin
RangeE.Value := DataModule1.DataSet1.Fields[I].DisplayLabel;
RangeE := RangeE.Next;
end;
//add field data in folling rows
DataModule1.DataSet1.DisableControls;
try
Book := DataModule1.DataSet1.Book;
try
DataModule1.DataSet1.First;
Row := 2;
while not DataModule1.DataSet1.Eof do
begin
RangeE := ExcelApplication1.Range ['A' + IntToStr (Row), 'A' + IntToStr (Row)];
for I := 0 to DataModule1.DataSet1.Fields.Count - 1 do
begin
RangeE.Value := DataModule1.DataSet1.Fields[I].AsString;
RangeE := RangeE.Next;
end;
DataModule1.DataSet1.Next;
Inc (Row);
end; finally
DataModule1.DataSet1.Book := Book;
end; finally
DataModule1.DataSet1.EnableControls;
end;
end;
导入到excel的代码
作者: Bear
功能:保存数据集,如TTable,TQuery,TClientDataSet等为Excel文件,
包含标题,可以只将一部分字段导出
这一点通过设置DataSet中要不导出字段的Tag值大于某一个值来处理
原理:调用 Microsoft Excel Ole对象
调用方式:
Function DataSetToExcel(
DataSet:TDataSet;FieldTagMax:Integer;
Visible:Boolean;ExcelFileName:String=''): Boolean;
--------------------------------------------------------------------------------------------------}unit UExcelTools;interfaceuses
classes, comctrls, stdctrls, windows, Dialogs, controls, SysUtils,
Db,forms,DBClient,ComObj;//把数据集导入ExcelSheet的核心函数
function DataSetToExcelSheet
(
DataSet :TDataSet;
FieldTagMax :Integer; // 字段的Tag值如果大于这个值,就不导出到Excel
Sheet :OleVariant
): Boolean;//实际使用的函数,内部调用了DataSetToExcelSheet,在外面加入UI接口和错误处理
function DataSetToExcel
(
DataSet :TDataSet; // 要转换的数据集
FieldTagMax :Integer; // 字段的Tag值如果大于这个值,就不导出到Excel
Visible :Boolean; // 是否让做转换工作的Excel可见
ExcelFileName:String='' // Excel文件名,*.xls
): Boolean;implementationFunction DataSetToExcelSheet(DataSet:TDataSet;FieldTagMax:Integer;Sheet:OleVariant): Boolean;
var
Row,Col,FieldIndex :Integer;
BK:TBookMark;
begin
Result := False;
if not Dataset.Active then exit;
BK:=DataSet.GetBookMark;
DataSet.DisableControls; Sheet.Activate;
try // 列标题
Row:=1;
Col:=1;
for FieldIndex:=0 to DataSet.FieldCount-1 do
begin
if DataSet.Fields[FieldIndex].Tag <= FieldTagMax then
begin
Sheet.Cells(Row,Col) :=DataSet.Fields[FieldIndex].DisplayLabel;
Inc(Col);
end;
end;
// 表内容
DataSet.First;
while Not DataSet.Eof do
begin
Row:=Row+1;
Col:=1;
for FieldIndex:=0 to DataSet.FieldCount-1 do
begin
if DataSet.Fields[FieldIndex].Tag <= FieldTagMax then
begin
Sheet.Cells(Row,Col):=DataSet.Fields[FieldIndex].AsString;
Inc(Col);
end;
end;
DataSet.Next;
end; Result := True;
finally
DataSet.GotoBookMark(BK);
DataSet.EnableControls;
end;
end;
Function DataSetToExcel(
DataSet:TDataSet;FieldTagMax:Integer;
Visible:Boolean;ExcelFileName:String=''): Boolean;
var
ExcelObj, Excel, WorkBook, Sheet: OleVariant;
OldCursor:TCursor;
SaveDialog:TSaveDialog;
begin
Result := False;
if not Dataset.Active then exit; OldCursor:=Screen.Cursor;
Screen.Cursor:=crHourGlass; try
ExcelObj := CreateOleObject('Excel.Sheet');
Excel := ExcelObj.Application;
Excel.Visible := Visible ;
WorkBook := Excel.Workbooks.Add ;
Sheet:= WorkBook.Sheets[1];
except
MessageBox(GetActiveWindow,'无法调用Mircorsoft Excel! '+chr(13)+chr(10)+
'请检查是否安装了Mircorsoft Excel。','提示',MB_OK+MB_ICONINFORMATION);
Screen.Cursor:=OldCursor;
Exit;
end; Result:=DataSetToExcelSheet(DataSet,FieldTagMax,Sheet) ;
if Result then
if Not Visible then
begin
if ExcelFileName<>''
then WorkBook.SaveAs(FileName:=ExcelFileName)
else begin
SaveDialog:=TSaveDialog.Create(Nil);
SaveDialog.Filter := 'Microsoft Excel 文件¦*.xls';
Result:=SaveDialog.Execute;
UpdateWindow(GetActiveWindow);
if Result then
WorkBook.SaveAs(FileName:=SaveDialog.FileName);
SaveDialog.Free;
end;
Excel.Quit;
end;
Screen.Cursor:=OldCursor;
end;end.