Показать сообщение отдельно
  #7  
Старый 23.10.2015, 15:55
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Код:
unit Friday;

interface

uses
  ComObj, Variants, DB;

procedure DataSetToExcel(DataSet: TDataSet; Name: string;
  FieldsName: Boolean = True; AFileName: string = ''; AutoFit: Boolean = True);

implementation

const
  xlWBATWorksheet = $FFFFEFB9;

  xlExcel2 = $00000010;
  xlExcel3 = $0000001D;
  xlExcel4 = $00000021;
  xlExcel5 = $00000027;
  xlExcel7 = $00000027;
  xlExcel9795 = $0000002B;

procedure DataSetToExcel(DataSet: TDataSet; Name: string;
  FieldsName: Boolean = True; AFileName: string = ''; AutoFit: Boolean = True);
var
  ExcelApplication: OleVariant;
  ExcelWorkbook: OleVariant;
  ExcelWorksheet: OleVariant;
  row, col: Integer;
  i: Integer;
begin
  ExcelApplication:=CreateOleObject('Excel.Application');
  try
    ExcelWorkbook:=ExcelApplication.Workbooks.Add(xlWBATWorksheet);
    ExcelWorksheet:=ExcelWorkbook.Sheets.Item[1];
    ExcelWorksheet.Name:=Name;

    row:=1;
    col:=1;
    if FieldsName then
    begin
      for i:=0 to DataSet.FieldDefs.Count-1 do
      begin
        ExcelWorksheet.Cells.Item[row, col]:=DataSet.FieldDefs[i].Name;
        Inc(col);
      end;
      Inc(row);
    end;

    DataSet.DisableControls;
    DataSet.First;
    try
      while not DataSet.Eof do
      begin
        col:=1;
        for i:=0 to DataSet.Fields.Count-1 do
        begin
          ExcelWorksheet.Cells.Item[row, col]:=DataSet.Fields[i].AsString;
          Inc(col);
        end;
        Inc(row);
        DataSet.Next;
      end;
    finally
      DataSet.EnableControls;
    end;

    if AutoFit then ExcelWorksheet.Columns.EntireColumn.AutoFit;
    ExcelApplication.Visible:=True;

    if AFileName<>'' then
      ExcelWorkbook.SaveAs(Filename:=AFileName, FileFormat:=xlExcel7);
  finally
    ExcelApplication.Quit;
    ExcelApplication:=Null;
  end;
end;

end.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием