jst
پنج شنبه 25 فروردین 1390, 17:19 عصر
با سلام خدمت همه دوستان
در یک پروژه لازم بود خروجی یک query رو داخل فایل ورد نمایش بدهم .علی رغم وجود مقالات مختلف در سایتها , هیچ نمونه کاملی که بتوان این کار رو با کیفیت بالا توسط اون انجام داد پیدا نشد . کد زیر با جستجو در اینترنت و اندکی تغییر توسط اینجانب این کار رو به خوبی انجام می دهد .امیدوارم مورد استفاده دوستان عزیز قرار بگیرد
کافیست یک یونیت جدید ایجاد و محتوای زیر رو در اون کپی کنید و فایل ایجاد شده رو به پروژه اضافه و از تابع GRidToword استفاده کنید (لازم به توضیح است که مقدار FormatNum در تایع عددی است که جهت نوع فرمت جدول خروجی در نظر گرفته شده که عدد 22 مناسب ترین فرمت می باشد .):
unit Unit_gridtoword;
interface
uses SysUtils, StdCtrls,Classes, Graphics,
Db, Grids, DBGrids, ComObj, BaseGrid, AdvGrid, DBAdvGrid,wordxp;
procedure GridToWord (Grid :TdbGrid ; FormatNum :integer);
implementation
procedure GridToWord (Grid :TdbGrid ; FormatNum :integer);
var
x :integer ;
y: integer ;
Word : Olevariant ;
GColCount : integer ;
GRowCount : integer;
begin
Word := CreateOLEobject('Word.Application') ;
(* چنانچه نخواسته باشید پنجره ورد در هنگام ساخت فایل باز باشد می توانید مقدار زیر را FALSE در نظر بگیرید *)
Word.Visible := True ;
Word.Documents.Add ;
GColCount := Grid.Columns.Count ;
GRowCount := Grid.DataSource.DataSet.RecordCount ;
Word.ActiveDocument.Range.Font.Size := Grid.Font.Size;
Word.ActiveDocument.Range.Font.NAME := Grid.Font.NAME;
Word.ActiveDocument.PageSetup.Orientation := 1 ;
Word.ActiveDocument.Tables.Add( Word.ActiveDocument.Range,GRowCount+1,GColCount);
Word.ActiveDocument.Range.InsertAfter('Date ' + Datetimetostr(Now));
Word.ActiveDocument.Range.Tables.Item(1).AutoForma t(FormatNum,1,1,1,1,1,0,0,0,1);
for y := 1 to GColCount
do Word.ActiveDocument.Tables.Item(1).Cell(1,y).Range .InsertAfter(Grid.Columns[y-1].Title.Caption) ;
x :=1 ;
with Grid.DataSource.DataSet do begin
First ;
while not Eof do begin
x := x + 1 ;
for y := 1 to GColCount
do Word.ActiveDocument.Tables.Item(1).Cell(x,y).Range .InsertAfter(FieldByName(Grid.Columns[y-1].FieldName).Asstring);
Next ;
end;
end;
Word.ActiveDocument.Range.Tables.Item(1).UpdateAut oFormat ;
end;
end.
عبارت زیر هم برای ذخیره خودکار فایل و خروج از ورد استفاده می شود
Word.activeDocument.SaveAs('C:\TEST.Doc',False) ;
Word.Quit(False)
در یک پروژه لازم بود خروجی یک query رو داخل فایل ورد نمایش بدهم .علی رغم وجود مقالات مختلف در سایتها , هیچ نمونه کاملی که بتوان این کار رو با کیفیت بالا توسط اون انجام داد پیدا نشد . کد زیر با جستجو در اینترنت و اندکی تغییر توسط اینجانب این کار رو به خوبی انجام می دهد .امیدوارم مورد استفاده دوستان عزیز قرار بگیرد
کافیست یک یونیت جدید ایجاد و محتوای زیر رو در اون کپی کنید و فایل ایجاد شده رو به پروژه اضافه و از تابع GRidToword استفاده کنید (لازم به توضیح است که مقدار FormatNum در تایع عددی است که جهت نوع فرمت جدول خروجی در نظر گرفته شده که عدد 22 مناسب ترین فرمت می باشد .):
unit Unit_gridtoword;
interface
uses SysUtils, StdCtrls,Classes, Graphics,
Db, Grids, DBGrids, ComObj, BaseGrid, AdvGrid, DBAdvGrid,wordxp;
procedure GridToWord (Grid :TdbGrid ; FormatNum :integer);
implementation
procedure GridToWord (Grid :TdbGrid ; FormatNum :integer);
var
x :integer ;
y: integer ;
Word : Olevariant ;
GColCount : integer ;
GRowCount : integer;
begin
Word := CreateOLEobject('Word.Application') ;
(* چنانچه نخواسته باشید پنجره ورد در هنگام ساخت فایل باز باشد می توانید مقدار زیر را FALSE در نظر بگیرید *)
Word.Visible := True ;
Word.Documents.Add ;
GColCount := Grid.Columns.Count ;
GRowCount := Grid.DataSource.DataSet.RecordCount ;
Word.ActiveDocument.Range.Font.Size := Grid.Font.Size;
Word.ActiveDocument.Range.Font.NAME := Grid.Font.NAME;
Word.ActiveDocument.PageSetup.Orientation := 1 ;
Word.ActiveDocument.Tables.Add( Word.ActiveDocument.Range,GRowCount+1,GColCount);
Word.ActiveDocument.Range.InsertAfter('Date ' + Datetimetostr(Now));
Word.ActiveDocument.Range.Tables.Item(1).AutoForma t(FormatNum,1,1,1,1,1,0,0,0,1);
for y := 1 to GColCount
do Word.ActiveDocument.Tables.Item(1).Cell(1,y).Range .InsertAfter(Grid.Columns[y-1].Title.Caption) ;
x :=1 ;
with Grid.DataSource.DataSet do begin
First ;
while not Eof do begin
x := x + 1 ;
for y := 1 to GColCount
do Word.ActiveDocument.Tables.Item(1).Cell(x,y).Range .InsertAfter(FieldByName(Grid.Columns[y-1].FieldName).Asstring);
Next ;
end;
end;
Word.ActiveDocument.Range.Tables.Item(1).UpdateAut oFormat ;
end;
end.
عبارت زیر هم برای ذخیره خودکار فایل و خروج از ورد استفاده می شود
Word.activeDocument.SaveAs('C:\TEST.Doc',False) ;
Word.Quit(False)