01.06.2008, 22:45
|
Активный
|
|
Регистрация: 24.03.2008
Сообщения: 227
Версия Delphi: Delphi 7
Репутация: 30
|
|
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
XL, Cell1, Cell2, ArrayData: Variant;
RowCount: integer;
BeginCol, BeginRow,i,ColCount:byte;
begin
BeginCol := 1; // Начальные координаты ячейки
BeginRow := 3;
With ADOQuery2 do begin//Делаем наш запрос
Close;
SQL.Clear;
SQL.Add('SELECT diagnos, COUNT(diagnos) as cnt FROM main');
SQL.Add('GROUP BY diagnos');
Open;
end;
RowCount := ADOQuery2.RecordCount; //Количество строк
ColCount := 2; //Количество столбцов
XL := CreateOleObject('Excel.Application'); //создаем Excel
XL.Application.EnableEvents := false; // Отключаем реакцию Excel на события (для ускорения)
XL.WorkBooks.Add; // Добавляем книгу
XL.Rows.Rows[2].Font.Bold:=true; //жирный шрифт
XL.Rows.Rows[2].Font.Size:=10; //размер шрифта
XL.Rows.Rows[2].WrapText := True; //перенос текста по словам
XL.Rows.Rows[2].HorizontalAlignment := 3;//Выравнивание по центру по горизонтали
XL.Rows.Rows[2].VerticalAlignment := 2;//Выравнивание по центру по вертикали
XL.Cells[2,1]:= 'Диагноз';//делаем шапку таблицы
XL.Cells[2,2]:='Количество';
XL.Columns.Columns[1].ColumnWidth:=50;//устанавливаем ширину столбцов
XL.Columns.Columns[2].ColumnWidth:=10;
ArrayData := VarArrayCreate([1, RowCount, 1, ColCount], varVariant); // созданем вариантный массив для заполнения данных из запроса
ADOQuery2.First;
for i := 1 to RowCount do
begin
ArrayData[i,1] := ADOQuery2['diagnos'];
ArrayData[i,2] := ADOQuery2['cnt'];
ADOQuery2.Next;
end;
Cell1 := XL.Cells[BeginRow-1, BeginCol]; // левая верхняя ячейка области в которую будем выводить данные
Cell2 := XL.Cells[BeginRow+RowCount-1, BeginCol + ColCount-1];//Правая нижняя ячейка области
XL.Range[XL.Cells[BeginRow, BeginCol], Cell2].Value := ArrayData; //вывод данных
XL.Range[Cell1, Cell2].Borders.LineStyle := 1;
XL.Visible := true;//делаем Excel видимым
end;
|