Implementation

{$R *.DFM}

uses
ComObj;

procedure TMainForm.FormCreate (Sender: TObject};
begin // Получаем список всех зарегистрированных баз данных
Session.GetDatabaseNames(ComboBoxDatabase.Items);
end;

procedure TMainForm.ButtonExitClick(Sender: TObject);
begin // Выход из программы
Close;
end;

procedure TMainForm.OpenTable;
begin // Открыть выбранную таблицу
try
Panelstatus.Caption:=''; // Очистить строку статуса
Table.Close; // Закрыть ранее открытую таблицу
Table.DatabaseName:=ComboBoxDatabase.Text; //Указать имя базы данных
Тable.TableName:=ComboBoxTable.Text; // Указать имя таблицы
Тable.Open; // Открыть таблицу
except
on E:Exception do // Выдать сообщение об ошибкt в строку статуса
PanelStatus.Caption:=E.Message;
end;
end;

procedure TMainForm.ComboBoxDatabaseChange(Sender: TObject);
begin // Выбрана новая база данных из списка
try // Для заданной базы данных извлекаем все имена таблиц
Session.GetTableNames (ComboBoxDatabase.Text,'', True, True, ComboBoxTable.Items)
except
ComboBoxTable.Items.Clear;
end;
OpenTable;
end;

procedure TMainForm.ComoboBoxTableChange(Sender: TObject);
begin // Выбрана новая таблица, открыть ее для просмотра
OpenTable;
end;

procedure TMainForm.ButtonFolderClick(Sender: TObject);
begin // Нажата кнопка "Выбрать..."
if OpenDialog.Execute then
begin
ComoboBoxDatabase.Text:=ExtractFilePath(OpenDialog.FileName);
ComboBoxTable.Text:=ExtractFileName(OpenDialog.FileName);
OpenTable;
end;
end;

procedure TMainForm.ButtonGenerateClick(Sender: TObject);
function ColToStr(Col:integer):string;
begin // Преобраэовать номер колонки в её имя в терминологии Microsoft Excel
Result:=Chr(ord('A') + (Col-1) mod 26);
if Col>26 then Result:=Chr(ord('A')+(Col-1) div 26)+Result;
end;
var Excel, WorkBook, Sheet: Variant; OldBookmark, S: string; Row, Col: integer;
begin // Нажата кнопка "Создать отчет..."
if not Table.Active then
ShowMessage('Таблица не указана')
else
try
Screen.Cursor:=crHourGlass; // Выводим курсор в виде песочных часов
try
PanelStatus.Caption:='';
try // Подключение к уже запущенному Microsoft Excel
Excel:=GetActive01eObject('Excel.Application');
except
try // Запуск Microsoft Excel и подключение к нему
Excel:=Create01eObоect ('Excel.Application');
except
raise Exception.Create('Ошибка доступа к Microsoft Excel (он не установлен!)');
end;
end;
WorkBook:=Excel.WorkBooks.Add; // Создание книги Microsoft Excel
Sheet:=WorkBook.Sheets[1]; // Отчет будем создавать на первой странице
Sheet.EnableCalculaion:= False; // Запретить внутренние вычисления Excel
try
Sheet.Cells[1,1]:=Format('Таблица "%s" (база данных "%s ")',
[Table.TableName, Table.DatabaseName]);
Table.DisableControls; // Запретить работу визуальных компонент, связанных с таблицей
try
01dBookmark:=Table.Bookmark; // Запомнить предыдушее положение в таблице
try
// Передаем в Excel все записи
Row:=3;
Table.First; // Переместиться в таблице на начало
while not Table.EOF do // Пока не конец таблицы делаем цикл
begin
for Col:=l to Table.FieldCount do // В цикле по всем полям таблицы
Sheet.Cells[Row,Col]:=Table.Fields[Col-l].DisplayText;
Table.Next; // Переместиться в таблице на следующую запись
inc(Row);
end;
if Row>3 then
begin
// Создаем формулы для сумирования числовых полей всех записей
inc(Row);
for Col:=l to Table.FieldCount do
begin
S:=ColToStr(Col);
if Table.Fields[Col-l] is TNumericField then
begin // Подведем сумму для числовых полей
Sheet.Cells[Row, Col].Formula:=Format ('=Sum(%s3:%s%d)', [S,S,Row-1]);
Sheet.Columns[Col].HorizontalAlignment:=xlHAlignRight;
end
else
Sheet.Columns[Col].HorizontalAlignment:=xlHAiignLeft;
// Указать ширину колонки
Sheet.Columns[Coll.ColumnWidth:=Table.Fields[Col-1].DisplayWidth;
end;
inc(Row);
end;
Sheet.Cells[Row+1,1]:='Общее количество записей = ' +IntToStr (Row);
finally
Table.Bookmark:=01dBookmark; // Восстановить предыдущее положение в таблице
end;
finally
Table.EnableControls; // Разрешить работу связанных визуальных компонентов
end;
finally
Sheet.EnableCalculation:= True; // Разрешить внутренние вычисления Excel
end;
WorkBook.Activate; // Сделать созданную книгу текущей в Microsoft Excel
Exсе1.Visib1е:=Тrue; // Активизировать Microsoft Excel
finally
Screen.Cursor:=crDefault; // Восстановить курсор
end;
except // Вывести сообщение об ошибке в строке статуса
on E:Exception do PanelStatus.Caption:=E.Message;
end;
end;

end.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: