drahmadtaraffoo
پنج شنبه 19 فروردین 1389, 11:40 صبح
بسم الله الرحمن الرحیم
من یک برنامه دارم که با دلفی نوشتم و برای بانک اطلاعات آن هم از اکسس استفاده کرده ام حالا می خواهم جداول برنامه ام را به شکل اکسل ذخیره کنم.
یعنی کاربر برای تهیه گزارش ، جدول را به شکل اکسل ذخیره کند.
لطفاً اگر کسی یک نمونه برنامه دارد به من کمک کند.
پیشاپیش از دوستان عزیز تشکر می کنم.
daffy_duck376
پنج شنبه 19 فروردین 1389, 22:33 عصر
کامپوننت smexport گزینه خوبی هست اگه نه که کد زیر رو یه نگاهی بنداز
unit DBGridExportToExcel;
interface
uses
 Windows, Messages, SysUtils, Classes, Graphics,
Controls, Forms, Dialogs, 
 ExtCtrls, StdCtrls, ComCtrls, DB, IniFiles, Buttons, dbgrids
, ADOX_TLB, ADODB;
 
type TScrollEvents = class 
      BeforeScroll_Event: TDataSetNotifyEvent; 
      AfterScroll_Event: TDataSetNotifyEvent;
      AutoCalcFields_Property: Boolean; 
 end; 
procedure DisableDependencies(DataSet: TDataSet; 
var ScrollEvents: TScrollEvents); 
procedure EnableDependencies(DataSet: TDataSet;
ScrollEvents: TScrollEvents); 
procedure DBGridToExcelADO(DBGrid: TDBGrid; FileName: string; 
SheetName: string);
 
implementation 
//Support procedures: I made that in order to increase speed in 
//the process of scanning large amounts 
//of records in a dataset 
procedure DisableDependencies(DataSet: TDataSet; var
ScrollEvents: TScrollEvents); 
begin 
    with DataSet do 
         begin 
              DisableControls; 
              ScrollEvents := TScrollEvents.Create();
              with ScrollEvents do 
                   begin 
                        BeforeScroll_Event := BeforeScroll; 
                        AfterScroll_Event := AfterScroll; 
                        AutoCalcFields_Property := AutoCalcFields; 
                        BeforeScroll := nil;
                        AfterScroll := nil; 
                        AutoCalcFields := False; 
                   end; 
         end; 
end; 
procedure EnableDependencies(DataSet: TDataSet;
ScrollEvents: TScrollEvents); 
begin 
    with DataSet do 
         begin 
              EnableControls;
              with ScrollEvents do 
                   begin 
                        BeforeScroll := BeforeScroll_Event; 
                        AfterScroll := AfterScroll_Event; 
                        AutoCalcFields := AutoCalcFields_Property; 
                   end;
         end; 
end; 
//This is the procedure which make the work: 
procedure DBGridToExcelADO(DBGrid: TDBGrid;
FileName: string; SheetName: string); 
var 
 cat: _Catalog; 
 tbl: _Table; 
 col: _Column; 
 i: integer;
 ADOConnection: TADOConnection; 
 ADOQuery: TADOQuery; 
 ScrollEvents: TScrollEvents; 
 SavePlace: TBookmark; 
begin 
 //
 //WorkBook creation (database) 
 cat := CoCatalog.Create; 
 cat._Set_ActiveConnection('Provider=Microsoft.Jet. OLEDB.4.0; 
Data Source=' + FileName + ';Extended Properties=Excel 8.0'); 
 //WorkSheet creation (table) 
 tbl := CoTable.Create;
 tbl.Set_Name(SheetName); 
 //Columns creation (fields) 
 DBGrid.DataSource.DataSet.First; 
 with DBGrid.Columns do 
   begin 
     for i := 0 to Count - 1 do
       if Items[i].Visible then 
       begin 
         col := nil; 
         col := CoColumn.Create; 
         with col do 
           begin
             Set_Name(Items[i].Title.Caption); 
             Set_Type_(adVarWChar); 
           end; 
         //add column to table 
         tbl.Columns.Append(col, adVarWChar, 20); 
       end;
   end; 
 //add table to database 
 cat.Tables.Append(tbl); 
 col := nil; 
 tbl := nil;
 cat := nil; 
 //exporting 
 ADOConnection := TADOConnection.Create(nil); 
 ADOConnection.LoginPrompt := False; 
 ADOConnection.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;
Data Source=' + FileName + ';Extended Properties=Excel 8.0'; 
 ADOQuery := TADOQuery.Create(nil); 
 ADOQuery.Connection := ADOConnection; 
 ADOQuery.SQL.Text := 'Select * from [' + SheetName + '$]'; 
 ADOQuery.Open; 
 
 DisableDependencies(DBGrid.DataSource.DataSet, ScrollEvents); 
 SavePlace := DBGrid.DataSource.DataSet.GetBookmark; 
 try 
 with DBGrid.DataSource.DataSet do 
   begin
     First; 
     while not Eof do 
       begin 
         ADOQuery.Append; 
         with DBGrid.Columns do 
           begin
             ADOQuery.Edit; 
             for i := 0 to Count - 1 do 
               if Items[i].Visible then 
                 begin 
                   ADOQuery.FieldByName(Items[i].Title.Caption).
AsString := FieldByName(Items[i].FieldName).AsString;
                 end; 
             ADOQuery.Post; 
           end; 
         Next; 
       end; 
   end;
 finally 
 DBGrid.DataSource.DataSet.GotoBookmark(SavePlace); 
 DBGrid.DataSource.DataSet.FreeBookmark(SavePlace); 
 EnableDependencies(DBGrid.DataSource.DataSet, ScrollEvents); 
 ADOQuery.Close; 
 ADOConnection.Close; 
 ADOQuery.Free; 
 ADOConnection.Free; 
 end; 
end; 
end.
farnooshhp
شنبه 11 اردیبهشت 1389, 14:25 عصر
ممنونم بخاطر راه حلتون اما در این کد از کلمه ADOX_TLB ایراد میگیره میشه بگید فایلش رو از کجا میشه گیر آورد؟
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.