Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.10.08;
Скачать: CL | DM;

Вниз

Экспорт запроса в Excel   Найти похожие ветки 

 
RomanH ©   (2006-08-08 16:15) [0]

Доброго дня мастера. Всеми уважаемый В.Фаронов приводит такой метод экспорта из Query в Exel.
procedure TForm1.Button1Click(Sender: TObject);
var
 Range,Sheet: Variant; //Для хранения одноименных объектов
 Row: Integer;         //Счетчик строк
 BegTime: TDateTime;   //Хранит время начала работы
begin
 BegTime := Time;
 if not VarIsEmpty(Excel) then
   Exit;  //Игнорируем щелчок, если таблица уже создана
 //Пытаемся открыть НД
 try
   Books.Open;
 except
   ShowMessage("Невозможно открыть таблицу BOOKS.DB");
   Exit
 end;
 //Пытаемся создать главный объект Excel.Application
 try
   Excel := CreateOleObject("Excel.Application")
 except
   ShowMessage("Нет доступа к серверу Excel");
   Exit
 end;
 //Изменяем форму курсора перед длительной работой
 Screen.Cursor := crHourGlass;
 //Добавляем новую рабочую книгу с одним листом:
 Excel.SheetsInNewWorkbook := 1;
 Excel.Workbooks.Add;  
 //Устанавливаем в Sheet ссылку на первый лист:
 Sheet := Excel.Workbooks[1].Sheets[1];
 //Устанавливаем меньшие поля страницы
 Sheet.PageSetup.LeftMargin := 30;
 Sheet.PageSetup.RightMargin := 30;
 Sheet.PageSetup.TopMargin := 40;
 Sheet.PageSetup.BottomMargin := 30;
 //Разрешаем печать сетки
 Sheet.PageSetup.PrintGridLines := True;
 //Изменяем умалчиваемую ширину колонок:
 Range := Sheet.Columns;
 Range.Columns[1].ColumnWidth := 4;  //Колонка "Код"
 Range.Columns[2].ColumnWidth := 70; //Колонка "Название"
 Range.Columns[3].ColumnWidth := 3;  //Колонка "Пачка"
 Range.Columns[4].ColumnWidth := 4;  //Колонка "Год"
 Range.Columns[5].ColumnWidth := 4;  //Колонка "Страницы"
 Range.Columns[6].ColumnWidth := 4;  //Колонка "Цена"
 //Изменяем высоту шрифта для всех колонок:
 Range.Columns.Font.Size := 8;
 //Готовим заголовок прайс-листа:
 Range := Sheet.Range["a1:f1"];      //Диапазон для первого ряда
 Range.Font.Size := 15;              //Высота шрифта
 Range.Font.Bold := True;            //Шрифт жирный
 Range.Font.Italic := True;          // и курсив
 Range.Columns.Interior.ColorIndex := 6; //Фон желтый
 Range.HorizontalAlignment := 3;     //Текст по центру
 Sheet.Cells[1,2] := "Прайс-лист на "+DateToStr(Date);
 //Готовим заголовки колонок:
 Range := Sheet.Range["a2:f2"];
 Range.Font.Size := 10;
 Range.Font.Bold := True;
 Sheet.Cells[2,1] := "Код";
 Sheet.Cells[2,2] := "Название/ Автор/ Издательство";
 Sheet.Cells[2,3] := "Пачка";
 Sheet.Cells[2,4] := "Год";
 Sheet.Cells[2,5] := "Страниц";
 Sheet.Cells[2,6] := "Цена";
 pb.Show;
 pb.Max := Books.RecordCount;
 pb.Position := 0;
 Row := 3;
 while not Books.EOF do
 begin
   Sheet.Cells[Row,1] := BooksBookID.Value;
   Sheet.Cells[Row,2] := BooksBName.Value+"/ "+
     BooksBAuthor.Value+"/Value "+BooksBPublish.Value;
   Sheet.Cells[Row,3] := BooksBStand.Value;
   Sheet.Cells[Row,4] := BooksBYear.Value;
   Sheet.Cells[Row,5] := BooksBPages.Value;
   Sheet.Cells[Row,6] := BooksBOpt.Value;
   inc(Row);
   pb.Position := Row-3;
   Application.ProcessMessages;
   Books.Next
 end;
 pb.Hide;
 Screen.Cursor := crDefault;
 Excel.Visible := True;  //Показываем окно Excel с готовой таблицей
 lb.Caption := "Время работы: "+TimeToStr(Time-BegTime)
end;

Вопрос: существут ли более быстрые методы экспорта токого рода.


 
ANB ©   (2006-08-08 16:18) [1]

Угу.

1. Выгрузить в HTML, дать файлу расширение xls и открыть. Очень быстро, но ограничения по форматированию.

2. Выгрузить в XML формата самого Excel. Но формата я не знаю. Вроде как обещали его открыть.


 
Сергей М. ©   (2006-08-08 16:23) [2]


> существут ли более быстрые методы экспорта токого рода


Axolot XLSReadWriteII2
DevExpress TcxSpreadSheetBook


 
Desdechado ©   (2006-08-08 16:32) [3]

> Экспорт запроса
Так тебе текст запроса или результат его выполнения экспортировать?

Можешь открыть файл экселя, как таблицу БД, и писать в нее.


 
RomanH ©   (2006-08-08 16:38) [4]


> Desdechado ©

Мне результат выполнения. А как открыть файл Excel  как БД и результат
IBQuery записать в файл.


 
RomanH ©   (2006-08-08 16:46) [5]


> ANB ©

Подскажите пожайлусто как выгрузить результат запроса в HTML


 
evvcom ©   (2006-08-08 17:04) [6]

> существут ли более быстрые методы экспорта токого рода

Существуют. Данные записывать не поячеечно, а целиком массивом. См. VarArrayCreate и Sheet.Range[..].Value2


 
VadimSpb   (2006-08-08 17:12) [7]

Быстрый экспорт только через массив.
Примеры на http://delphiworld.narod.ru/_tech_.html


 
YurikGL ©   (2006-08-08 21:09) [8]


> Можешь открыть файл экселя, как таблицу БД, и писать в нее.

Если через ADO, то работает крайне медленно...


> 2. Выгрузить в XML формата самого Excel. Но формата я не
> знаю. Вроде как обещали его открыть.

Вроде здесь
http://www.microsoft.com/office/xml/default.mspx
но проще сохранить в xml и посмотреть его, скажем, блокнотом :)

Есть еще вариант 3
Экспорт в текстовый файл с разделителем ";" т.е. в файл *.csv



Страницы: 1 вся ветка

Текущий архив: 2006.10.08;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.049 c
5-1140527217
De
2006-02-21 16:06
2006.10.08
Куда и как разместить свою иконку для создаваемого компонента?


3-1154528943
VadimSpb
2006-08-02 18:29
2006.10.08
Число параметров


1-1156600280
nali
2006-08-26 17:51
2006.10.08
Мерцания при прорисовке ячеек грида


2-1158302368
Laymer
2006-09-15 10:39
2006.10.08
Lable


2-1158847463
milko
2006-09-21 18:04
2006.10.08
IntToHex