Робота з таблицями Excel в ColdFusion 9

Вчора Бен Форта розкрив ще одну новинку з CF Centaur.

Цей пост є вільним перекладом оригінальної замітки Working With Spreadsheets In ColdFusion.

 

Таблиці Excel (далі просто "таблиці" - прим. перекл.) дуже важливі для багатьох компаній та організацій, тому ColdFusion програмісти давно прагнули працювати з ними програмно. Справа в тому, що ColdFusion підтримував доступ до таблиць різними шляхами, навіть можна було їх читати через ODBC драйвер, також можна було створювати їх за допомогою CFReport, а ще створювати HTML і CSV файли та встановлювати потрібний MIME-тип щоб оглядач міг корректно відкрити їх в Excel.

Але програмісти прохали про більше, про більші можливості контролю, в тому числі про роботу зі специфічними частинами файлів таблиць. Як було показано в моїй (Б.Ф. - прим. перекл.) презентації минулого тижня, це вже заплановано в ColdFusion "Centaur".

Так само як це було з малюнками, робота з таблицями в ColdFusion відбувається за допомогою теґів чи функцій, або їх комбінацією. Теґ <CFSPREADSHEET> призначено для читання (до об'єкту таблиці, query, CSV рядка чи HTML), запису до XLS файлів, а також додавання до них сторінок. Більш ніж 30 функцій, таких як SpreadsheetSetCellValue(), SpreadsheetAddRow() та SpreadsheetSetCellFormula() призанчено для дрібніших маніпуляцій, та може бути використано разом з допоміжними функціями, як то SpreadsheetNew() для створення об'єкту таблиці, SpreadsheetInfo() для діставання заголовку, листів та інших атрибутів.

Ось деякі приклади з моїх (Б.Ф. - прим. перекл.) презентацій.

Перший приклад читає всю таблицю до query та друкує її зміст (dumps the contents - прим. перекл.).

<!--- Read spreadsheet --->
<cfspreadsheet action="read"
                src="Sales.xls"
                query="myQuery">
<cfdump var="#myQuery#">

Другий приклад читає конкретну ячейку таблиці до змінної.

<!--- Read a spreadsheet cell --->
<cfspreadsheet action="read"
                src="Sales.xls"
                name="myVar"
                sheet="1"
                rows="C"
                columns="3">
<cfdump var="#myVar#">

<CFSPREADSHEET> також використовується для запису (чи перезапису) файлу таблиці:

<!--- Write spreadsheet --->
<cfspreadsheet action="write"
    overwrite="true"
    filename="Sales.xls"
    name="sObj" />

Щоб оновити вміст ячейки вам потрібно прочитати, оновити її та записати файл:

<!--- Read spreadsheet --->
<cfspreadsheet action="read"
        src="Sales.xls"
        name="sObj" />
<!--- Set cell value --->
<cfset spreadsheetSetCellValue(sObj, FORM.sales, FORM.row, FORM.col)>
<!--- Write spreadsheet --->
<cfspreadsheet action="write" overwrite="true"
        filename="Sales.xls"
        name="sObj" />

Цей приклад використовує дані з форми для оновлення ячейки.

 

Звісно, є ще багато інших можливостей, але ідея зрозуміла.

Також, <CFSPREADSHEET> підтримує таблиці Excel та OpenOffice.

 

Також, питання підіймалося кілька разів, тому варто про нього згадати. Так само як в інших випадках доступу до файлу (наприклад, використання <CFFILE> чи <CFIMAGE>), вам би не хотілося одночасного доступу,  тому варто використовувати <CFLOCK>, блокування для читання при читанні, повне блокування для запису, використання іменованих блоків (скажімо, з ім'ям файлу таблиці в якості імені блоку).

 

Автор: Сергій Галашин | Опубліковано: 19.06.2009 о 05:20 | Категорії: Blogs - ColdFusion 9 -

Відгуки