Печат от Delphi в Excel с помощта на шаблон
Приложен е изходният код за компонентаExcelView и процедурите за експортиране и отпечатване от шаблон в Excel за Delphi 2010/XE/XE2. Налична е пълна версия с примери за употреба.
Защо е необходимо това?
Excel в съвременния офис се превърна в де факто стандарт за въвеждане и анализ на данни, създаване на финални отчети и презентации. На първо място, поради видимостта на подхода и лекотата на развитие. Създайте "таблет" с необходимите автоматични изчисления, добавете междинни суми за няколко критерия и изградете кръгова диаграма въз основа на тези резултати - всичко това може да се направи без специално обучение, лесно и естествено.
Ето защо е съвсем естествено Excel да се използва широко за разработване на различни печатни форми. Въпреки че е по-нисък по възможностите си от специализираните генератори на отчети, вече можете да намерите готови шаблони на Excel за почти всички стандартни документи, от търговска оферта до товарителница под формата 1-T (http://blanker.ru/doc/38)
Какво и как да изнасяме?
Предполага се, че трябва да попълним предварително създадени excel шаблони. Шаблоните са обикновени Excel файлове, в които отделните клетки и области са обозначени с имена на променливи. Тук ще бъдат въведени нашите данни.
Шаблонът може да се използва като променливи:
- всички публикувани свойства на собственика на формата
- всички компоненти, притежавани от притежаващата форма и техните публикувани свойства
- всички набори от данни (наследници на TDataSet) се обработват по специален начин, стойностите на техните полета се заместват в шаблона
Готови решения по шаблони
Компонентите за извеждане в Excel са доста лесни за намиране в Интернет, например:
- TMS Flexcel Studio (http://www.tmssoftware.com/site/flexcel.asp) - $125
- ARExcelReport (http://www.vector-ski.com/reports/arexcelreport_index.htm) - безплатно за нетърговска употреба, източникът струва $125
- Доклад на Don Excel (http://www.don-soft.com.ar/DonExcelReport/products.php) - $75
- AfalinaSoft XL Report (http://www.afalinasoft.com/download-xl-report.html) - "ще бъде с отворен код след месец или два" - написан през 2003 г. уви
- FlexCelReport (http://www.freewebs.com/flexcel/) - безплатно, в изходния код. За Delphi 5/6/7. Уебсайтът в момента е недостъпен. При повторно изграждане на пакети за Delphi 2010-XE2 трябва да се направят големи промени.
Направи го сам
Библиотеките с компоненти са добри за всички (с изключение на цената, разбира се), но дори наличието на изходни кодове не винаги ви спасява от възможни проблеми. Проблемът е, че има твърде много код. Например един от най-добрите (по мое мнение) -FlexCelReport - е 916 KB в 174 изходни файла. Пренасянето на този проект към модерни версии на Delphi става проблематично.
В такива случаи остава опцията сами да напишете процедурата или компонента. Като отправна точка за запознаване можем да препоръчаме http://www.webdelphi.ru/2009/08/rabota-s-excel-v-delphi-osnovy-osnov/, http://www.codenet.ru/progr/delphi/stat/export-to-excel.php и др.
Таблици и полета в шаблони
Всички създатели на компоненти имат свои собствени правила за писане на променливи в шаблони. Във FlexCelReport това са именувани диапазони с две долни черти "__MAIN__ " и променливи в клетки във формата##DataSetName##FieldName, в ARExcelReport -. и т.н.
Искаме да е още по-лесно. СамоFieldName и нищо повече.
Къде е зададенDataSet ?
В първата колона. Нека разпределим цялата колона за служебна информация, тъй като има повече от достатъчно от тях (колони) в Excel. При извеждане ще скрием тази колона.
Друго предположение е, че ако искаме да покажем всички записи от DataSet като таблица, поставяме звездичка (*tblOrders ) преди името му. Без звездичка ще се показват само стойностите на полетата на текущия запис.
Свойства и компоненти в шаблони
За да покажете текущото свойство на формуляра в публикувания шаблон, напишете името на това свойство в квадратни скоби в клетката: [Caption ], [Tag ]. Свойствата на компонента на формуляр се изписват с името на компонента, разделено с точка: [Memo1.Lines ]. Поддържат се (в момента) следните типове свойства:Цяло число, Int64, Низ, Двойно, Булево, TStrings.
Внедряване
Целият код е във файлаExcelView.pas (7 Kb). КомпонентътTExcelView има едно публикувано свойствоTemplateFileName, което е името на шаблонния файл. МетодътПокажи отваря Excel и стартира процеса на експортиране.
Не можете да инсталирате компонента в палитрата, но веднага изпълнете процедурата
Обърнете внимание на параметъраСобственик ! Това е компонентът (формуляр, модул с данни), чиито свойства, компоненти, набори от данни ще бъдат експортирани в Excel.
Взаимодействието с Excel се осъществява чрез OLE:
За да се покаже набор от данни, първо се формира масив от варианти:
И тогава вече е поставен на правилното място:
За показване на свойства се използва модулът Rtti: