Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Последние темы форума

Показать новые сообщения »

Почтовая рассылка

Подписчиков: 11653
Последний выпуск: 19.06.2015

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

В delphi 5, для обмена данными между Вашим приложением и excel можно использовать компонент texcelapplication, доступный на servers page в component palette.

На форме находится 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;

Оставить комментарий

Комментарий:
можно использовать BB-коды
Максимальная длина комментария - 4000 символов.
 
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог