Вывод массива в Excel
uses
ComObj;
procedure TForm1.Button1Click(Sender: TObject);
const
M = 7;
N = 10;
var
exApp, exBook, exSheet : Variant;
Arr : array of array of Integer;
i, j, Row, Col : Integer;
begin try
//Попытка подключиться к уже запущенному экземпляру Excel.
exApp := GetActiveOleObject('Excel.Application'); except
try
//Попытка запустить и подключиться к Excel.
exApp := CreateOleObject('Excel.Application'); except
MessageDlg(
'Не удалось подключиться к Excel. Действие отменено.'
,mtError, [mbOK], 0
); Exit;
end;
end;
SetLength(Arr, M, N);
Randomize;
for i := 0 to M - 1 do
for j := 0 to N - 1 do begin
Arr[i, j] := Random(10); //0..9.
end;
exApp.Visible := True;
//Создаём рабочую книгу. exBook := exApp.Workbooks.Add;
//Подключаемся к первому листу раб. книги. exSheet := exBook.Worksheets[1];
//Для ускорения вывода данных в Excel, можно отключать обновление окна Excel.
//Это полезно выполнять в случае, когда на лист передаётся много данных -
//например, таблица из нескольких тысяч строк.
//exApp.ScreenUpdating := False;
exSheet.Cells[2, 2].Value := 'Таблица, переданная из внешней программы.';
Row := 3; Col := 3;
for j := 0 to N - 1 do begin
exSheet.Cells[Row, Col + j].Value := 'Колонка №' + IntToStr(j + 1); end;
Inc(Row);
for i := 0 to M - 1 do
for j := 0 to N - 1 do begin
exSheet.Cells[Row + i, Col + j].Value := Arr[i, j];
end;
//Выравниваем ширину столбцов таблицы по ширине содержащихся в них данных.
for j := 0 to N - 1 do begin exSheet.Columns[Col + j].AutoFit;
end;
//Включаем режим обновления окна Excel.
//exApp.ScreenUpdating := True;
//Отключаемся от объектов OLE-автоматизации.
//В этом примере это делать не обязательно, т. к. соответствующие
//переменные являются локальными и связанные с ними объекты будут
//освобождены автоматически при выходе из процедуры.
//Но если переменные являются глобальными и нам они в дальнейшем
//не понадобятся, то следует их освободить.
//Код обнуления, в случае глобальных переменных, следует добавить,
//например, в обработчик события OnDestroy формы. Или в раздел
//finalization модуля.
//Если объекты OLE-автоматизации не освободить, то процесс Excel и связанные
//объекты Excel так и останутся в памяти.
exSheet := UnAssigned; exBook := UnAssigned;
exApp := UnAssigned;
end; |