Шаблони є самим зручним способом формування книг Excel. Розроблювач може створити багато шаблонів, у яких задати розташування текстових блоків і їх форматування. Шаблон може містити як постійні елементи, так і елементи-змінні, на місце яких буде підставлятися інший текст при формуванні документа. Такі змінні повинні мати якісь унікальні в межах шаблону імена (наприклад: #fam#, #imya#, #otch# і т.п.).
Програма може знайти ці імена змінних на i-му аркуші й замінити їх на зазначений текст за допомогою коду:
e.activeworkbook.sheets.item[i].cells.replace(what:='зразок', replacement:='заміна');
Наприклад, нехай у шаблоні anketa.xlt з теки shablon на першому аркуші є змінні: #fam#, #imya#, #otch#. Необхідно на їхнє місце підставити значення Іванов, Іван, Іванович.
try
//підключаємося до Excel
e:=getactiveoleobject('excel.application');
except
//якщо підключення не вдалося (Excel не запущений)
//створюємо новий об'єкт, запускаючи Excel
e:=createoleobject('excel.application');
end;
//створюємо нову книгу на основі шаблону
e.workbooks.add(extractfilepath(application.Exename)+'shablon\anketa.xlt');
//заміняємо #fam# на Іванов
e.activeworkbook.sheets.item[1].cells.replace(what:='#fam#', replacement:='Іванов');
//заміняємо #imya# на Іван
e.activeworkbook.sheets.item[1].cells.replace(what:='#imya#', replacement:='Іван');
//заміняємо #otch# на Іванович
e.activeworkbook.sheets.item[1].cells.replace(what:='#otch#', replacement:='Іванович');
//робимо книгу видимої
e.visible:=true;
Замість змінних у шаблоні можна підставляти не тільки конкретні значення, а й вміст полів таблиці БД. Такий підхід дозволяє створювати звіти по БД із експортом їх в Excel.
Приклад. Нехай у шаблоні anketa.dot з теки shablon є змінні: #fam#, #imya#, #otch#, #datar#. Необхідно на їхнє місце підставити значення полів fam, tab, otch, datar з поточного запису таблиці БД. Для цього напишемо код:
try
//підключаємося до Excel
e:=getactiveoleobject('excel.application');
except
//якщо підключення не вдалося (Excel не запущений)
//створюємо новий об'єкт, запускаючи Excel
e:=createoleobject('excel.application');
end;
//створюємо новий документ на основі шаблону
e.workbooks.add(extractfilepath(application.Exename)+'shablon\anketa.xlt');
//заміняємо #fam# на поле fam
e.activeworkbook.sheets.item[1].cells.replace(what:='#fam#', replacement:=adotable1.fieldbyname('fam').asstring;);
//заміняємо #imya# на поле imya
e.activeworkbook.sheets.item[1].cells.replace(what:='#imya#', replacement:=adotable1.fieldbyname('imya').asstring;);
//заміняємо #otch# на поле otch
e.activeworkbook.sheets.item[1].cells.replace(what:='#otch#', replacement:=adotable1.fieldbyname('otch').asstring;);
//заміняємо #datar# на поле datar
e.activeworkbook.sheets.item[1].cells.replace(what:='#datar#', replacement:=adotable1.fieldbyname('datar').asstring;);
//робимо книгу видимої
e.visible:=true;
Приклад. Нехай за допомогою компонента adoquery1 на формі відібрані потрібні записи (виконана фільтрація). Необхідно для кожного знайденого запису сформувати свій окремий аркуш на підставі єдиного аркуша шаблону anketa.xlt.
try
//підключаємося до Excel
e:=getactiveoleobject('excel.application');
except
//якщо підключення не вдалося (Excel не запущений)
//створюємо новий об'єкт, запускаючи Excel
e:=createoleobject('excel.application');
end;
//створюємо новий документ на основі шаблону
e.workbooks.add(extractfilepath(application.Exename)+'shablon\anketa.xlt');
//копіюємо перший аркуш шаблону стільки разів,
//скільки є відібраних записів у запиті
for i:=1 to adoquery1.Recordcount-1 do
e.activeworkbook.sheets.item[1].copy(after:=w.activeworkbook.sheets.item[i]);
//стаємо на перший запис запиту
adoquery1.First;
//спочатку лічильник сформованих аркушів рівний 0
i:=0;
//запускаємо цикл до кінця набору записів у запиті
while not adoquery1.Eof do
begin
//збільшуємо лічильник сформованих аркушів
i:=i+1;
//заміняємо #fam# на поле fam
e.activeworkbook.sheets.item[1].cells.replace(what:='#fam#', replacement:= adoquery1.fieldbyname(‘fam’).asstring);
//заміняємо #imya# на поле imya
e.activeworkbook.sheets.item[1].cells.replace(what:='#imya#', replacement:= adoquery1.fieldbyname(‘imya’).asstring);
//заміняємо #otch# на поле otch
e.activeworkbook.sheets.item[1].cells.replace(what:='#otch#', replacement:= adoquery1.fieldbyname(‘otch’).asstring);
//заміняємо #datar# на поле datar
e.activeworkbook.sheets.item[1].cells.replace(what:='#datar#', replacement:= adoquery1.fieldbyname(‘datar’).asstring);
//переходимо, щна наступний запис у запиті
adoquery1.Next;
end;
//робимо книгу видимою
e.visible:=true;