Створення таблиць і діаграм в excel через delphi - stack overflow російською

Оскільки це питання перегукується з попереднім в плані навичок програмної роботи з додатками MSOffice (та й взагалі з COM-об'єктами), спробую пояснити порядок складання свого Delphi-коду на основі VBA. Наостанок відкладемо безпосередньо відповідь на саме питання.

По-перше, потрібно уявляти собі ієрархію об'єктів MS Office-додатки. В Excel вона дещо простіше, ніж в Word.

Власне, за великим рахунком все. Решта запам'ятовувати не обов'язково, тому що потужним помічником виступає сам Excel / Word, що дає змогу записувати все "ручні" дії користувача в макроси.

Приступимо. Перший етап - розміщення даних на потрібному аркуші. Тут користуємося наведеною раніше ієрархією:

Чудово те, що більшість властивостей приймає тип Variant, тобто - практично будь-які значення: рядки, integer, Double і т.п.

Є кілька способів поставити значення осередку: Formula. FormulaR1C1. Value. etc. Потрібно розуміти їх відмінності і користуватися необхідними відповідно завданню. Найчастіше використовуються саме Formula і FormulaR1C1

Так само корисно розуміти, що кожна клітинка насправді це об'єкт Range. тобто являє собою будь-який, будь-яку кількість осередків і робота з декількома осередками зі складу Range не відрізняється від роботи з одним осередком, отриманої через Cells.

Далі необхідно на лист додати графік. Ми не знаємо, як це зробити, та й з-за однократності завдання пам'ятати, де цей графік знаходиться в ієрархії об'єктів - марнотратно.

Заходимо в меню "Вид", натискаємо "Макрос - Запис макросу" і натискаємо "ОК". Переходимо на вкладку "Вставка" і додаємо просту гистограмму. Далі вибираємо дипазон даних (я взяв B1-B5), змінюємо підпису (вибрав A1-A5) підтверджуємо зміни і зупиняємо запис макросу ( "Вид" - "Макрос" - "Зупинити запис"). Тепер залишилося увійти всередину макросу ( "Вид" - "Макрос" - "Макрос" - "Змінити"). Повинен вийти приблизно такий код VBA:

І ось тут нам знадобиться довідка. тому що далі не все так тривіально. Розберемо по рядках:

ActiveSheet.Shapes.AddChart.Select - останній метод (Select) нас не цікавить, оскільки він просто виділяє додану фігуру на аркуші. Для програмної роботи виділення об'єкта зайве. А ось AddChart додає об'єкт Shape. а нам потрібен об'єкт Chart. VBA далі йде по шляху найменшого опору - використовує властивість Application.ActiveChart (ActiveChart.ChartType = xlColumnClustered і т.п.). Але нам це не підходить, оскільки (повторюся) при програмній роботі з Excel небажано використовувати "активні елементи", потрібно працювати саме з тим, що ми додали. З'ясовуємо, що у об'єкта Shape є властивість Chart. саме воно нам потрібно. Відповідно, всю подальшу роботу будуємо саме на цьому, переводячи код VBA в Delphi:

Тут слід звернути увагу, що ми уникаємо називати можливо локалізоване ім'я листа (воно може залежати від мови Office, користувач може його перейменувати і т.п.). Тому беремо реальне найменування з властивості Sheet.Name.

От і все. Повний вийшов код:

Схожі статті