Обмен данными с Excel

В delphi 5, для обмена данными между Вашим приложением и excel можно использовать компонент texcelapplication, доступный на servers page в component palette.
Совместимость: delphi (5.x или выше). На форме находится tstringgrid, заполненный некоторыми данными и две кнопки, с названиями to excel и from excel. Так же на форме находится компонент texcelapplication со свойством name, содержащим xlapp и свойством connectkind, содержащим cknewinstance. Когда нам необходимо работать с excel, то обычно мы открываем excelapplication, затем открываем workbook и в конце используем worksheet. Итак, несомненный интерес представляет для нас листы (worksheets) в книге (workbook).

Давайте посмотрим как всё это работает.

Посылка данных в excel

Это можно сделать с помощью следующей процедуры :


procedure tform1.bitbtntoexcelonclick(sender: tobject);  
var  
workbk : _workbook; // определяем workbook  
worksheet : _worksheet; // определяем worksheet  
i, j, k, r, c : integer;  
iindex : olevariant;  
tabgrid : variant;  
begin  
if genericstringgrid.cells[0,1] <> '' then  
begin  
iindex := 1;  
r := genericstringgrid.rowcount;  
c := genericstringgrid.colcount;  
// Создаём массив-матрицу  
tabgrid := vararraycreate([0,(r - 1),0,(c - 1)],varolestr);  
i := 0;  
// Определяем цикл для заполнения массива-матрицы  
repeat  
for j := 0 to (c - 1) do  
tabgrid[i,j] := genericstringgrid.cells[j,i];  
inc(i,1);  
until  
i > (r - 1);  
// Соединяемся с сервером texcelapplication  
xlapp.connect;  
// Добавляем workbooks в excelapplication  
xlapp.workbooks.add(xlwbatworksheet,0);  
// Выбираем первую workbook  
workbk := xlapp.workbooks.item[iindex];  
// Определяем первый worksheet  
worksheet := workbk.worksheets.get_item(1) as _worksheet;  
// Сопоставляем delphi массив-матрицу с матрицей в worksheet  
worksheet.range['a1',worksheet.cells.item[r,c]].value := tabgrid;  
// Заполняем свойства worksheet  
worksheet.name := 'customers';  
worksheet.columns.font.bold := true;  
worksheet.columns.horizontalalignment := xlright;  
worksheet.columns.columnwidth := 14;  
// Заполняем всю первую колонку  
worksheet.range['a' + inttostr(1),'a' + inttostr(r)].font.color := clblue;  
worksheet.range['a' + inttostr(1),'a' + inttostr(r)].horizontalalignment := xlhalignleft;  
worksheet.range['a' + inttostr(1),'a' + inttostr(r)].columnwidth := 31;  
// Показываем excel  
xlapp.visible[0] := true;  
// Разрываем связь с сервером  
xlapp.disconnect;  
// unassign the delphi variant matrix  
tabgrid := unassigned;  
end;  
end;  
Получение данных из excel  
Это можно сделать с помощью следующей процедуры :  
procedure tform1.bitbtnfromexcelonclick(sender: tobject);  
var  
workbk : _workbook;  
worksheet : _worksheet;  
k, r, x, y : integer;  
iindex : olevariant;  
rangematrix : variant;  
nomfich : widestring;  
begin  
nomfich := ‘c:mydirectorynameoffile.xls’;  
iindex := 1;  
xlapp.connect;  
// Открываем файл excel  
xlapp.workbooks.open(nomfich,emptyparam,emptyparam,emptyparam,emptyparam,  
emptyparam,emptyparam,emptyparam,emptyparam,emptyparam,emptyparam,  
emptyparam,emptyparam,0);  
workbk := xlapp.workbooks.item[iindex];  
worksheet := workbk.worksheets.get_item(1) as _worksheet;  
// Чтобы знать размер листа (worksheet), т.е. количество строк и количество // столбцов, мы активируем его последнюю непустую ячейку  
worksheet.cells.specialcells(xlcelltypelastcell,emptyparam).activate;  
// Получаем значение последней строки  
x := xlapp.activecell.row;  
// Получаем значение последней колонки  
y := xlapp.activecell.column;  
// Определяем количество колонок в tstringgrid  
genericstringgrid.colcount := y;  
// Сопоставляем матрицу worksheet с нашей delphi матрицей  
rangematrix := xlapp.range['a1',xlapp.cells.item[x,y]].value;  
// Выходим из excel и отсоединяемся от сервера  
xlapp.quit;  
xlapp.disconnect;  
// Определяем цикл для заполнения tstringgrid  
k := 1;  
repeat  
for r := 1 to y do  
genericstringgrid.cells[(r - 1),(k - 1)] := rangematrix[k,r];  
inc(k,1);  
genericstringgrid.rowcount := k + 1;  
until  
k > x;  
// unassign the delphi variant matrix  
rangematrix := unassigned;  
end;  
Теги:
Excel
Добавлено: 04 Августа 2018 07:59:30 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...