![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Экспорт запроса в 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. Но формата я не знаю. Вроде как обещали его открыть.