|
|
|
Данный пример показывает каким образом можно вывести в эксель содержимое | |
1. Любимая программа бухгалтера - эксель ;-) Поэтому советую в качестве report-а | |
2. Представленная методика хорошо подходит для вывода небольшого количества данных | |
в ексель. Если необходимо вывести тысячи ячеек, то этот способ будет медленным. Помните, | |
что каждое обращение(команда) к екселю из внешней программы заимает время. | |
Если скорость критична и(или) данных много используете методы позволяющие передать | |
Для вывода нескольких печатных страниц текста данный способ вполне подходит ;-) | |
TForm1 = class(TForm) | |
... | |
//Не забудьте поместить на форму эти компаненты | |
ExcelApplication1: TExcelApplication; | |
ExcelWorkbook1: TExcelWorkbook; | |
... | |
procedure TForm1.exportToExcel(DataSet:TDataset); | |
var Template,NewTemplate,ItemIndex:OleVariant; | |
Template := EmptyParam; | |
NewTemplate := True; | |
ItemIndex := 0; | |
//Пробуем подключиться к екселю | |
try | |
ExcelApplication1.Connect; | |
except | |
MessageDlg('к Excel-ю не удалось подключиться ', mtError, [mbOk], 0); | |
Abort; | |
end; | |
//делаем приложение видимым. По умолчанию его не видимое. %) | |
ExcelApplication1.Visible[ItemIndex] := True; | |
//Устанавливаем имя окна | |
ExcelApplication1.Caption := 'Title label'; | |
Template := EmptyParam; | |
NewTemplate := False; | |
//Добавляем пустую книжку | |
wb:=ExcelApplication1.Workbooks.Add(Template, ItemIndex); | |
ExcelWorkbook1.ConnectTo(wb); | |
//Получаем ссылку на первый лист книжки | |
sheet:=wb.Sheets[1]; | |
//Итерируемся по колонкам | |
for i:=0 to Dataset.FieldCount-1 do | |
begin | |
//выводим имя колонок | |
sheet.cells[1,i+1].value:=Dataset.Fields[i].DisplayName; | |
end; | |
i2:=1; | |
//Итерируемся по записям в Dataset-е | |
While not(Dataset.eof) do | |
begin | |
inc(i2); | |
for i:=0 to Dataset.FieldCount-1 do | |
begin | |
//выводим значение каждого поля записи | |
sheet.cells[i2,i+1].value:= Dataset.Fields[i].Asstring; | |
end; | |
Dataset.Next; | |
end; | |
//Выполняем автовыравнивание по ширине | |
sheet.Cells.Select; | |
sheet.Columns.AutoFit; | |
sheet.Range['A1'].select; | |
xSize:=Dataset.FieldCount-1; | |
//изменяем стиль бордюра ячеек в которые был осуществлен вывод данных | |
sheet.Range['A1:'+chr(65+xSize)+inttostr(ySize)].Borders[$00000008].LineStyle:= $00000001; | |
sheet.Range['A1:'+chr(65+xSize)+inttostr(ySize)].Borders[$0000000A].LineStyle:= $00000001; | |
sheet.Range['A1:'+chr(65+xSize)+inttostr(ySize)].Borders[$00000007].LineStyle:= $00000001; | |
sheet.Range['A1:'+chr(65+xSize)+inttostr(ySize)].Borders[$00000009].LineStyle:= $00000001; | |
sheet.Range['A1:'+chr(65+xSize)+inttostr(ySize)].Borders[$0000000C].LineStyle:= $00000001; | |
sheet.Range['A1:'+chr(65+xSize)+inttostr(ySize)].Borders[$0000000B].LineStyle:= $00000001; | |
//выделяем жирным названия колонок | |
sheet.Range['A1:'+chr(65+xSize)+'1'].font.bold:=true; | |
on E: Exception do | |
begin | |
//В случае ошибки выводим шибку и отконекчиваемся от экселя | |
ShowMessage(E.Message); | |
ExcelApplication1.Disconnect; | |
end; | |
//отконекчиваемся от экселя | |
ExcelApplication1.Disconnect; | |
procedure TForm1.Button1Click(Sender: TObject); | |
//собственно вызов функции | |