PDA

View Full Version : ارسال خروجی به excel



ali512
دوشنبه 01 اسفند 1384, 10:16 صبح
با سلام
یونیت زیر شامل چند تابع است که با استفاده از آن می شه خورجی adoquary- adotableو یا یک dbgrid را به نرم افزار excel فرستاد امیدوارم که بتونید ازش استفاده کنید .



unit Unit_report;

interface

uses SysUtils,QuickRpt, Classes,QRCtrls,forms,CheckLst,StdCtrls,mask,print ers,ADODB, DB,Variants,DBGrids,Grids;

type

procedure SendqueryToExcel(temp_quary:TADOQuery;temp_form:TF orm);
procedure senddbgridtoexcel(temp_dbgrid:TDBGrid;temp_quary:T ADOQuery;temp_form:TForm);
procedure senddbgridtoexcel_table(temp_dbgrid:TDBGrid;temp_t able:TADOTable;temp_form:TForm);
procedure sendstringgridtoexcel(temp_stringgrid:TStringGrid; temp_form:TForm);

implementation

uses u_DataModule1, Controls,ActiveX, Excel2000; // or Excel97


//******************************
//******************************
//******************************
//******************************
procedure SendqueryToExcel(temp_quary:TADOQuery;temp_form:TF orm);
var
PreviewToExcel: TExcelApplication;
RangeE: ExcelRange;
I, Row: Integer;
harf:char;
s:string;
begin
PreviewToExcel := TExcelApplication.Create(temp_form);
PreviewToExcel.Connect;
PreviewToExcel.Workbooks.Add(NULL, 0);
RangeE := PreviewToExcel.ActiveCell;
I:=0;
while (i<temp_quary.FieldCount) do
begin
RangeE.Value:= temp_quary.Fields.Fields[i].FieldName;
RangeE:=RangeE.Next;
i:=i+1;
end;
Row := 2;
temp_quary.First;
while not temp_quary.EOF do
begin
RangeE := PreviewToExcel.ActiveCell;
harf:='A';
i:=0;
while (i<temp_quary.FieldCount) do
begin
RangeE := PreviewToExcel.Range[chr(i+ord(harf)) + IntToStr(Row), chr(i+ord(harf)) + IntToStr(Row)];
RangeE.Value:= temp_quary.FieldByName(temp_quary.Fields.Fields[i].FieldName).AsString;
RangeE:=RangeE.Next;
i:=i+1;
end;
temp_quary.Next;
inc(Row);
end;
RangeE := PreviewToExcel.Range['A1', chr(64 + temp_quary.FieldCount) + IntToStr(temp_quary.RecordCount + 1)];
RangeE.AutoFormat(8, NULL, NULL, NULL, NULL, NULL, NULL);
PreviewToExcel.Visible[0] := True;
PreviewToExcel.Disconnect;
end;
//******************************
procedure senddbgridtoexcel(temp_dbgrid:TDBGrid;temp_quary:T ADOQuery;temp_form:TForm);
var
PreviewToExcel: TExcelApplication;
RangeE: ExcelRange;
I, Row: Integer;
harf:char;
s:string;
begin
PreviewToExcel := TExcelApplication.Create(temp_form);
PreviewToExcel.Connect;
PreviewToExcel.Workbooks.Add(NULL, 0);
RangeE := PreviewToExcel.ActiveCell;
I:=0;
while (i<temp_dbgrid.FieldCount) do
begin
RangeE.Value:= temp_dbgrid.Columns.Items[i].Title.Caption;
RangeE:=RangeE.Next;
i:=i+1;
end;
Row := 2;
temp_quary.First;
while not temp_quary.EOF do
begin
RangeE := PreviewToExcel.ActiveCell;
harf:='A';
i:=0;
while (i<temp_dbgrid.FieldCount) do
begin
RangeE := PreviewToExcel.Range[chr(i+ord(harf)) + IntToStr(Row), chr(i+ord(harf)) + IntToStr(Row)];
RangeE.Value:= temp_quary.Fieldbyname(temp_dbgrid.Fields[i].FieldName).AsString;
RangeE:=RangeE.Next;
i:=i+1;
end;
temp_quary.Next;
inc(Row);
end;
RangeE := PreviewToExcel.Range['A1', chr(64 + temp_dbgrid.FieldCount) + IntToStr(temp_quary.RecordCount + 1)];
RangeE.AutoFormat(8, NULL, NULL, NULL, NULL, NULL, NULL);
PreviewToExcel.Visible[0] := True;
PreviewToExcel.Disconnect;
end;
//******************************
procedure senddbgridtoexcel_table(temp_dbgrid:TDBGrid;temp_t able:TADOTable;temp_form:TForm);
var
PreviewToExcel: TExcelApplication;
RangeE: ExcelRange;
I, Row: Integer;
harf:char;
s:string;
begin
PreviewToExcel := TExcelApplication.Create(temp_form);
PreviewToExcel.Connect;
PreviewToExcel.Workbooks.Add(NULL, 0);
RangeE := PreviewToExcel.ActiveCell;
I:=0;
while (i<temp_dbgrid.FieldCount) do
begin
RangeE.Value:= temp_dbgrid.Columns.Items[i].Title.Caption;
RangeE:=RangeE.Next;
i:=i+1;
end;
Row := 2;
temp_table.First;
while not temp_table.EOF do
begin
RangeE := PreviewToExcel.ActiveCell;
harf:='A';
i:=0;
while (i<temp_dbgrid.FieldCount) do
begin
RangeE := PreviewToExcel.Range[chr(i+ord(harf)) + IntToStr(Row), chr(i+ord(harf)) + IntToStr(Row)];
RangeE.Value:= temp_table.Fieldbyname(temp_dbgrid.Fields[i].FieldName).AsString;
RangeE:=RangeE.Next;
i:=i+1;
end;
temp_table.Next;
inc(Row);
end;
RangeE := PreviewToExcel.Range['A1', chr(64 + temp_dbgrid.FieldCount) + IntToStr(temp_table.RecordCount + 1)];
RangeE.AutoFormat(8, NULL, NULL, NULL, NULL, NULL, NULL);
PreviewToExcel.Visible[0] := True;
PreviewToExcel.Disconnect;
end;
//************************************************** *********************************
procedure sendstringgridtoexcel(temp_stringgrid:TStringGrid; temp_form:TForm);
var
PreviewToExcel: TExcelApplication;
RangeE: ExcelRange;
I, Row: Integer;
harf:char;
begin
PreviewToExcel := TExcelApplication.Create(temp_form);
PreviewToExcel.Connect;
PreviewToExcel.Workbooks.Add(NULL, 0);
RangeE := PreviewToExcel.ActiveCell;
Row := 0;
while row <temp_stringgrid.RowCount do
begin
RangeE := PreviewToExcel.ActiveCell;
harf:='A';
i:=0;
while (i<temp_stringgrid.ColCount) do
begin
RangeE := PreviewToExcel.Range[chr(i+ord(harf)) + IntToStr(Row+1), chr(i+ord(harf)) + IntToStr(Row+1)];
RangeE.Value:=temp_stringgrid.Cells[i,row];
RangeE:=RangeE.Next;
i:=i+1;
end;
inc(Row);
end;
RangeE := PreviewToExcel.Range['A1', chr(64 + temp_stringgrid.ColCount) + IntToStr(temp_stringgrid.RowCount)];
RangeE.AutoFormat(8, NULL, NULL, NULL, NULL, NULL, NULL);
PreviewToExcel.Visible[0] := True;
PreviewToExcel.Disconnect;
end;

end.

oghab
سه شنبه 02 اسفند 1384, 15:41 عصر
سلام
متشکر

هاجر
پنج شنبه 04 اسفند 1384, 11:25 صبح
سلام
ممنون از این یونیت . اما یه موردی هست وقتی این فایل رو توی اکسل درست میکنه ایا همون لحظه نمایش میده ؟یا اینکه تو یه ادرس مشخص میشینه و بعدا می تونی بازش کنی ؟
من این برنامه رو اجرا میکنم اما متاسفانه نه همون لحظه فرم مورد نظر رو نمایش میده نه اینکه یه ادرس مشخص داره ؟
اما اگر من برم و یه فایل اکسلی که قبلا درست شده رو باز کنم اطلاعاتی برنامه مورد نظرم رو میتونم ببینم .
اگه میشه منو راهنمایی کنید .
ممنون