Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > Экспорт данных с Дельфи в Excel


Автор: Asia 15.9.2006, 07:32
Здравствуйте, уважаемые программисты Дельфи!

У меня вот такая проблема:
я создала проект в Дельфи, состоящий из табличек (Paradox созданных в Database Desktop), запроса к ним (который высвечивает по заданному конкретному полю необходимые данные с этой таблички), данные запроса отображаются на отдельной форме, но затем результаты запроса надо отобразить в виде отчета, чтобы можно было их распечатать, я умею подсоединять результаты данного запроса к QuickReport, но преподаватель требует, чтобы их (результаты запроса с формы)можно было отобразить (экспортировать) в Microsoft Excel, с чем я ни разу не сталкивалась.

Навыки в Дельфи у меня на уровне начинающего программиста - могу установить необходимые компоненты, прописать в них код.

Не могли бы вы более подробно проинструктировть как можно экспортировать результаты запроса с Дельфи в Microsoft Excel.

Могу выслать свой проект и форму отчета в Microsoft Excel.

Заранее благодарна.
Жду ваших ответов (е-мэйл: [email protected]).

Автор: Fedia 15.9.2006, 08:15
Asia, а статья http://forum.vingrad.ru/index.php?showtopic=111993 не помогла ? Я наверное не точно выразился. Для создания отчетов в Excel очень хорошо подойдет использование компонента TExcelApplication или OLE (Excel.Application). Например:
Код

var
   Excel: variant;
//.....................  
   Excel:=CreateOleObject('Excel.Application');
   Excel.visible:=false;
   Excel.DisplayAlerts:=false;
   Excel.WorkBooks.Add();
   Excel.Workbooks[1].WorkSheets[1].Cells.Item[1, 1]:='test';
   try
     Excel.Workbooks.item[1].SaveAs(OutFile);
   finally
     Excel.Quit;
     Excel:=null;
   end;

Посмотри все же статью.

Автор: Vas 15.9.2006, 12:00
Может подойдет
Код

Procedure TForm1.Button2Click(Sender: TObject);
var
    ExcelApp, Workbook, Range, Cell1, Cell2, ArrayData  : Variant;
    BeginCol, BeginRow, i, j : integer;
    RowCount, ColCount : integer;
Begin
   Screen.Cursor:=crHourGlass;
   // Координаты левого верхнего угла области, в которую будем выводить данные
   BeginCol:=1;
   BeginRow:=2;
   // Размеры выводимого массива данных
   RowCount:=Query1.RecordCount+2;
   ColCount:=Query1.Fields.Count;
   // Создание Excel
   ExcelApp:=CreateOleObject('Excel.Application');
   // Отключаем реакцию Excel на события, чтобы ускорить вывод информации
   ExcelApp.Application.EnableEvents := false;
   //  Создаем Книгу (Workbook)
   //  Если заполняем шаблон, то Workbook := ExcelApp.WorkBooks.Add('C:\MyTemplate.xls');
   Workbook := ExcelApp.WorkBooks.Add;
   // Создаем Вариантный Массив, который заполним выходными данными
   ArrayData := VarArrayCreate([1, RowCount, 1, ColCount], varVariant);
   // Заполняем массив
   for j:=0 to ColCount-1 do
       ArrayData[1,J+1]:=DBGrid1.Columns[j].Title.Caption;
   i:=2;
   Query1.DisableControls;
   Query1.First;
   while not Query1.Eof do
   begin
      for J:=0 to ColCount-1 do
           ArrayData[I,J+1]:=Query1.Fields[j].Value;
      Query1.Next;
      i:=i+1;
      ProgressBar1.Position:=ProgressBar1.Position+ProgressBar1.Step;
   end;
   ArrayData[RowCount,1]:='Всего записей: '+IntToStr(Query1.RecordCount);
   Query1.First;
   Query1.EnableControls;
   // Левая верхняя ячейка области, в которую будем выводить данные
   Cell1:=WorkBook.WorkSheets[1].Cells[BeginRow, BeginCol];
   // Правая нижняя ячейка области, в которую будем выводить данные
   Cell2:=WorkBook.WorkSheets[1].Cells[BeginRow+RowCount-1,BeginCol+ColCount-1];
   // Область, в которую будем выводить данные
   Range := WorkBook.WorkSheets[1].Range[Cell1, Cell2];
   // А вот и сам вывод данных
   // Намного быстрее поячеечного присвоения
   Range.Value := ArrayData;
   // Делаем Excel видимым
   ExcelApp.Visible := true;
   ExcelApp:=Unassigned;
   Screen.Cursor:=crDefault;
End;

А вообще в интернете много про экспорт в эксель написано 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)