Идёт загрузка страницы...

htp://aptem.net.ru





Excel

Подскажите мне основные функции OLE Automation для работы с Excel из Delphi.

Есть множество статей по этому вопросу. Смотри также материал по адресу http://vzone.virgin.net/graham.marshall/excel.htm#excel.htm.

Я не могу привести полный код моего проекта, здесь я поместил лишь его небольшую часть, создающую и форматирующую таблицу Excel на основе содержимого DBGrid, сгенеренного с помощью SQL запроса. Код содержит некоторое форматирование ячеек. Код проверен в работе с Delphi 3 и Excel 97:


    procedure TfrmBlank.btnExcelClick(Sender: TObject);
var
XL, XArr: Variant;
i : Integer;
j : Integer;
begin
{не забудьте включить ComObj в список используемых модулей}
// Создаем массив элементов, полученных в результате запроса
XArr:=VarArrayCreate([1,EmailQuery.FieldCount],varVariant);
XL:=CreateOLEObject('Excel.Application');     // Создание OLE объекта
XL.WorkBooks.add;
XL.visible:=true;

j := 1;
EmailQuery.First;
while not EmailQuery.Eof do begin
i:=1;
while i<=EmailQuery.FieldCount do begin
XArr[i] := EmailQuery.Fields[i-1].Value;
i := i+1;
end;
XL.Range['A'+IntToStr(j),
CHR(64+EmailQuery.FieldCount)+IntToStr(j)].Value := XArr;
EmailQuery.Next;
j := j + 1;
end;
XL.Range['A1',CHR(64+EmailQuery.FieldCount)+IntToStr(j)].select;
// XL.cells.select;                     // Выбираем все
XL.Selection.Font.Name:='Garamond';
XL.Selection.Font.Size:=10;
XL.selection.Columns.AutoFit;
XL.Range['A1','A1'].select;
end;

Дополнение

При однопроходной передачи полной страницы гораздо удобнее использовать двумерный Variant Array, чем запихивать данные туда построчно. Функция VarArrayCreate позволяет создать многомерные массивы при определении 2N (где N - кол-во измерений) границ массива в аргументе Bounds.

Konstantin Khripkov [000196]