Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
конспект_укр.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.07 Mб
Скачать
  1. Робота з аркушами книги в Microsoft Excel

Кожна книга має кілька аркушів (за замовчуванням 3). Для звертання до аркуша використовують запис виду:

e.activeworkbook.sheets.item[i]

де i - номер аркуша в книзі (нумерація починається з 1).

Кожний аркуш має команди для керуваннями:

//додає аркуш ліворуч від i-го аркуша

e.activeworkbook.sheets.item[i].add;

//видаляє i-й аркуш

e.activeworkbook.sheets.item[i].delete;

//копіює i-й аркуш, вставляючи його після j-го аркуша

e.activeworkbook.sheets.item[i].copy(after:=e.activeworkbook.sheets.item[j];

//задає ім'я i-го аркуша

e.activeworkbook.sheets.item[i].name:='нове ім'я';

Зауваження. При видаленні аркуша Excel може видавати повідомлення на підтвердженні операції. Для вимикання видачі вікон з повідомленнями необхідно спочатку коду додавати команду виду:

e.displayalerts:=false;

Для включення функції видачі повідомлень використовують команду:

e.displayalerts:=true;

Приклад. Нехай є деякий шаблон primer.xlt, що має один аркуш. Необхідно написати код, який робить ще дев'ять копій цього аркуша й кожний аркуш нумерує числами від 1 до 10.

try

    //підключаємося до Excel

    e:=getactiveoleobject('excel.application');

except

    //якщо підключення не вдалося (Excel не запущений)

    //створюємо новий об'єкт, запускаючи Excel

    e:=createoleobject('excel.application');

end;

 

//створюємо нову книгу на основі шаблону

e.workbooks.add(extractfilepath(application.Exename)+'shablon\primer.xlt');

 

//запускаємо цикл, що додає 9 аркушів

for i:=1 to 9 do

begin

    //копіюємо перший аркуш і вставляємо його після i-го аркуша

    e.activeworkbook.sheets.item[1].copy(after:=e.activeworkbook.sheets.item[i]);

    //i-му аркушу привласнюємо ім'я, що є значенням змінної i

    e.activeworkbook.sheets.item[i].name:=inttostr(i);

end;

//робимо вікно excel видимим для перегляду результату

e.visible:=true;

  1. Використання шаблону для формування книги

Шаблони є самим зручним способом формування книг 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;

 

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]