Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Записать TDataSet в Excel файл

Delphi , Компоненты и Классы , TTable и TQuery

Записать TDataSet в Excel файл


{....} 

uses DB; 
{....} 

  private 
    procedure SendToExcel(aDataSet: TDataSet); 

{....} 


uses 
  ComObj, ActiveX, Excel2000; // or Excel97 

procedure TForm1.SendToExcel(aDataSet: TDataSet); 
var 
  PreviewToExcel: TExcelApplication; 
  RangeE: Excel2000.Range; //or RangeE: Excel97.Range 
  I, Row: Integer; 
  Bookmark: TBookmarkStr; 
begin 
  PreviewToExcel := TExcelApplication.Create(Self); 
  PreviewToExcel.Connect; 
  PreviewToExcel.Workbooks.Add(NULL, 0); 
  RangeE := PreviewToExcel.ActiveCell; 
  
  for I := 0 to aDataSet.Fields.Count - 1 do 
  begin 
    RangeE.Value := aDataSet.Fields[I].DisplayLabel; 
    RangeE := RangeE.Next; 
  end; 

  aDataSet.DisableControls; 
  try 
    Bookmark := aDataSet.Bookmark; 
    try 
      aDataSet.First; 
      Row := 2; 
      while not aDataSet.EOF do 
      begin 
        //Write down Record As Row in msExcel 
        RangeE := PreviewToExcel.Range['A' + IntToStr(Row), 'A' + IntToStr(Row)]; 
        for I := 0 to aDataSet.Fields.Count - 1 do 
        begin 
          RangeE.Value := aDataSet.Fields[I].AsString; 
          RangeE := RangeE.Next; 
        end; 
        aDataSet.Next; 
        Inc(Row); 
      end; 
    finally 
      aDataSet.Bookmark := Bookmark; 
    end; 
  finally 
    aDataSet.EnableControls; 
  end; 

  //Creating Preview from Range A1..ColumnX 
  //Calculating ASCII 64 (Character Before "A") With Dataset FieldsCount 
  //This Method can only handle range A1..Z?, if want to be excel column type 
  //support, exp "AA"/"IV" 
  RangeE := PreviewToExcel.Range['A1', chr(64 + aDataSet.Fields.Count) + IntToStr(Row - 1)]; 

  RangeE.AutoFormat(8, NULL, NULL, NULL, NULL, NULL, NULL); 
  PreviewToExcel.Visible[0] := True; 
  PreviewToExcel.Disconnect; 
end; 


// Beispiel: 
// Example: 
procedure TForm1.Button1Click(Sender: TObject); 
begin 
  SendToExcel(Table1); 
end;

Перевод кода на русский язык:

Код используется для экспорта данных из компонента TDataSet (dataset в Delphi) в файл Excel с помощью интерфейса COM-автоматизации.

Вот разбивка того, что код делает:

  1. Процедура SendToExcel принимает TDataSet в качестве входного параметра и экспортирует его данные в файл Excel.
  2. Создается новый экземпляр Excel, к нему подключается, добавляется новый рабочий стол.
  3. Итерируются поля dataset и устанавливаются их метки отображения в первой строке таблицы (A1:A, где - количество полей).
  4. Отключаются контролы dataset, закладка позиции, а затем итерируются записи dataset, каждая запись записывается как строка в файл Excel.
  5. После экспорта всех записей включается enable controls, освобождаются ресурсы, использованные приложением Excel, и отключается соединение с Excel.

Процедура Button1Click - пример использования процедуры SendToExcel. Она просто вызывает SendToExcel с Table1 в качестве входного параметра, предполагая, что Table1 - компонент TDataSet на форме.

Вот некоторые предложения по улучшению:

  • Вместо жесткого кодирования имени и пути файла Excel, рассмотрите возможность передачи его как необязательного параметра процедуры SendToExcel.
  • Используйте механизмы обработки ошибок (например, блоки try-finally) более эффективно. Например, вы можете освободить ресурсы даже если возникнет исключение.
  • Рассмотрите использование более надежной методики расчета буквы столбца Excel (например, вместо жесткого кодирования ASCII-значения).
  • Код не проверяет, является ли dataset открытым или имеет ли записи перед экспортом. Можете добавить проверки для этого.

Вот обновленная версия процедуры SendToExcel, которая включает некоторые из этих предложений:

procedure SendToExcel(const aDataSet: TDataSet; const aFileName: string);
var
  PreviewToExcel: TExcelApplication;
  RangeE: Excel2000.Range;
  I, Row: Integer;
  Bookmark: TBookmarkStr;
begin
  try
    PreviewToExcel := TExcelApplication.Create(Self);
    PreviewToExcel.Connect;
    PreviewToExcel.Workbooks.Add(NULL, 0);
    RangeE := PreviewToExcel.ActiveCell;

    // Установка меток отображения полей в первой строке
    for I := 0 to aDataSet.Fields.Count - 1 do
    begin
      RangeE.Value := aDataSet.Fields[I].DisplayLabel;
      RangeE := RangeE.Next;
    end;

    aDataSet.DisableControls;
    try
      Bookmark := aDataSet.Bookmark;
      try
        aDataSet.First;
        Row := 2;
        while not aDataSet.EOF do
        begin
          // Запись записи как строки в msExcel
          RangeE := PreviewToExcel.Range['A' + IntToStr(Row), 'A' + IntToStr(Row)];
          for I := 0 to aDataSet.Fields.Count - 1 do
          begin
            RangeE.Value := aDataSet.Fields[I].AsString;
            RangeE := RangeE.Next;
          end;
          aDataSet.Next;
          Inc(Row);
        end;
      finally
        aDataSet.Bookmark := Bookmark;
      end;
    finally
      aDataSet.EnableControls;
    end;

    // Создание предпросмотра от диапазона A1..ColumnX
    RangeE := PreviewToExcel.Range['A1', Chr(64 + aDataSet.Fields.Count) + IntToStr(Row - 1)];

    RangeE.AutoFormat(8, NULL, NULL, NULL, NULL, NULL, NULL);
    PreviewToExcel.Visible[0] := True;
    PreviewToExcel.Disconnect;
  except
    on E: Exception do
      ShowMessage('Ошибка экспорта данных в Excel: ' + E.Message);
  end;
end;

Статья описывает код на Delphi, который позволяет записать данные из компонента TDataSet в файл Microsoft Excel.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: TTable и TQuery ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2024-12-26 14:06:01/0.0038189888000488/0