Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Экспорт запроса в Excel [D7, IB7.5]


RomanH ©   (2006-08-08 16:15:00) 

Доброго дня мастера. Всеми уважаемый В.Фаронов приводит такой метод экспорта из 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;

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


YurikGL   (2006-08-08 21:09:00) [1]


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

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


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

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

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


VadimSpb   (2006-08-08 17:12:00) [2]

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


evvcom   (2006-08-08 17:04:00) [3]

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

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


RomanH   (2006-08-08 16:46:00) [4]


> ANB ©

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


RomanH   (2006-08-08 16:38:00) [5]


> Desdechado ©

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


Desdechado   (2006-08-08 16:32:00) [6]

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

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


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


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


Axolot XLSReadWriteII2
DevExpress TcxSpreadSheetBook


ANB   (2006-08-08 16:18:00) [8]

Угу.

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

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо