Робота із шаблонами, розглянута вище, дозволяє створювати звіт тільки для окремого запису таблиці. Набагато частіше звіт створюється для декількох записів одночасно. При цьому дані представляються на одному аркуші у вигляді таблиці-списку. Для розгляду принципу формування списку у вигляді таблиці нам знадобиться ще ряд властивостей і методів сервера Microsoft Excel.
Для звертання до чарунки аркуша використовують властивість:
e.activeworkbook.sheets.item[i].cells[j,k].value
де i - номер рядка, j - номер стовпця.
Для виділення чарунки використовують команду:
e.activeworkbook.sheets.item[i].range['діапазон'].select;
У якості діапазону може виступати як окрема чарунка, так і діапазон чарунок, наприклад:
e.activeworkbook.sheets.item[i].range['A1'].select; //виділяється одна чарунка
e.activeworkbook.sheets.item[i].range['A1:D5'].select; //виділяється діапазон чарунок
Для копіювання виділеного діапазону використовують команду:
e.activeworkbook.sheets.item[i].range['діапазон'].copy;
Для вставки скопійованої інформації з буфера використовують команду:
e.activeworkbook.sheets.item[i].paste;
Приклад. Нехай є шаблон spisok.xlt, який знаходиться в теці shablon. Шаблон має шапку таблиці з полями № з/п, прізвище, ім'я, дата народження. Шапка розташована в першому рядку аркуша.
На підставі даних таблиці БД сформувати список із записів.
try
//підключаємося до Excel
e:=getactiveoleobject('excel.application');
except
//якщо підключення не вдалося (Excel не запущений)
//створюємо новий об'єкт, запускаючи Excel
e:=createoleobject('excel.application');
end;
//виключаємо повідомлення excel
e.displayalerts:=false;
//створюємо нову книгу на підставі шаблону
e.workbooks.add(extractfilepath(application.Exename)+'shablon\spisok.xlt');
//виділяємо шапку таблиці в 1 рядку
e.activeworkbook.sheets.item[1].range['a1:e1'].select;
//копіюємо виділену шапку в буфер обміну
e.activeworkbook.sheets.item[1].range['a1:e1'].copy;
//переходимо на перший запис таблиці
adotable1.first;
//i - номер рядка, у якому перебуває шапка таблиці
i:=1;
//n - номер рядка в списку
n:=0;
//організовуємо цикл по таблиці
while not adotable1.eof do
begin
//збільшуємо число рядків у таблиці
i:=i+1;
//збільшуємо число виведених записів
n:=n+1;
//виділяємо першу чарунку в наступному рядку
e.activeworkbook.sheets.item[1].range['a'+inttostr(i)].select;
//вставляємо у виділену чарунку скопійовану шапку таблиці
e.activeworkbook.sheets.item[1].paste;
//у стовпчик № з/п вставляємо значення лічильника записів
e.activeworkbook.sheets.item[1].cells[i,1].value:=n;
//у стовпчик прізвище вставляємо значення поля fam таблиці БД
e.activeworkbook.sheets.item[1].cells[i,2].value:=adotable1.fieldbyname('fam').asstring;
//у стовпчик ім'я вставляємо значення поля imya таблиці БД
e.activeworkbook.sheets.item[1].cells[i,3].value:=adotable1.fieldbyname('imya').asstring;
//у стовпчик Дата народження вставляємо значення поля datar таблиці БД
e.activeworkbook.sheets.item[1].cells[i,4].value:=adotable1.fieldbyname('datar').asstring;
//переходимо на наступний запис у таблиці
adotable1.Next;
end;
Робота із формулами
Одним з основних переваг Excel є використання формул. Якщо в чарунці написати текст формули, то вона автоматично буде розрахована самою програмою Microsoft Excel.
Для введення формули використовують властивість виду:
e.activeworkbook.sheets.item[1].cells[i,j].formula:='=текст формули';
При введенні формул потрібно враховувати ряд особливостей:
- ім'я чарунки записується у вигляді RiCj - де i - номер рядка, а j - номер стовпця;
- кожна функція Excel записується в її англомовному варіанті.
Наприклад. У чарунці A3 порахувати суму чарунок A1 і A2.
e.activeworkbook.sheets.item[1].cells[1,3].formula:='=r1c1+r1c2';
Нехай у чарунках A1:A6 знаходяться деякі числові значення. Необхідно порахувати суму значень у цих чарунках і відобразити результат у чарунці А7.
e.activeworkbook.sheets.item[1].cells[7,1].formula:='=sum(r1c1+r6c1)';