Adobe ColdFusion读写Microsoft Office Excel数据(3)
在实际应用中,除了对已有Excel表单进行读写操作外,我们很有可能会需要将系统数据导出到Excel文件。导出Excel实质上是利用现有的数据新建一个Excel文件。ColdFusion9很容易实现这个功能。下面笔者将通过小示例来演示一下。
首先新建一个ColdFusion Page, create.cfm. 将下面的代码添加进去。
<!--- Get data ---> <cfquery name="arts" datasource="cfartgallery"> SELECT * FROM ART </cfquery> <!--- Create spreadsheet ---> <cfspreadsheet action="write" filename="Arts.xls" query="arts" overwrite="true">
此处cfquery标签的datasource属性为安装ColdFusion9时自带的示例数据源,cfartgallery. 利用ColdFusion Builder的RDS Query Viewer可以对其中数据进行查看,先来看一下ART表中的数据,如图1.
图 1
从代码中可以看出其功能是将ART表中的内容读入到arts查询中,然后写入到一个新的Excel文件Arts.xls. overwrite=”true”保证如果Excel表单不存在则创建,存在则覆盖。
在浏览器中运行,可以看到当前目录下多了一个Excel文件,效果如图2.
图 2
上面的示例仅仅是将数据库中的数据通过ColdFusion查询写入到一个新的Excel表单中。这是最原始的方法,其中并没有在意新建的Excel表单的美观程度,也没有我们很想要的汇总等等脚注信息,这可不是一个“制作精良”的表单。其实ColdFusion提供了好多方法可以更加灵活的对要写入Excel的数据进行处理,包括添加表单属性,设置格式,设置公式等等。
为了演示这些功能,新建一个ColdFusion Page, decorate.cfm. 这里将再次用第一篇随笔中那个造出来的数据,如图3.
图 3
要完成这个Demo, 我们采用下面的步骤(有些步骤并不是必须的,当然这些也可以不是所有的步骤)。
步骤1把数据读取到一个查询中备用。实现方法是将下面的代码添加到decorate.cfm.
<!--- Read as query ---> <cfspreadsheet action="read" src="Sales.xls" query="myQuery">
步骤2利用spreadsheetNew方法新建一个表单对象:
<!--- Create new spreadsheet ---> <cfset sObj=spreadsheetNew()>
步骤3为这个新建的表单添加一些属性信息:
<!--- Set sheet properties ---> <cfset info=StructNew()> <cfset info.title="Sales Detail"> <cfset info.author="spoony"> <cfset info.comments="comments for the sales detail sheet"> <cfset spreadsheetAddInfo(sObj, info)>
步骤4为表单添加一个标题,并进行以下修饰以便使它能与内容区分出来:
<!--- Create and format header row ---> <cfset spreadsheetAddRow(sObj, "Sales detail: ")> <cfset spreadsheetFormatRow(sObj, {bold="true", italic="true", fontsize="12"}, 1)>
步骤5将步骤1中获取的数据填入到新建的表单对象中:
<!--- Add data from query ---> <cfset spreadsheetAddRows(sObj, myQuery)> <cfset spreadsheetFormatRow(sObj, {bold="true", alignment="center"}, 2)>
步骤6定义一些变量以便以后使用。注意公式信息同Excel中语法是一致的:
<!--- Figure out row for formula, 2 afer data ---> <cfset rowDataStart=2> <cfset rowDataEnd=myQuery.recordcount+1> <cfset rowTotal=rowDataEnd+2> <cfset totalFormulaB="SUM(B#rowDataStart#:B#rowDataEnd#)"> <cfset totalFormulaC="SUM(C#rowDataStart#:C#rowDataEnd#)"> <cfset totalFormulaD="SUM(D#rowDataStart#:D#rowDataEnd#)"> <cfset totalFormulaE="SUM(E#rowDataStart#:E#rowDataEnd#)">
步骤7设置汇总单元格,并应用步骤6中的公式计算:
<!--- Add total formula ---> <cfset spreadsheetSetCellValue(sObj, "TOTAL: ", rowTotal, 1)> <cfset spreadsheetSetCellFormula(sObj, totalFormulaB, rowTotal, 2)> <cfset spreadsheetSetCellFormula(sObj, totalFormulaC, rowTotal, 3)> <cfset spreadsheetSetCellFormula(sObj, totalFormulaD, rowTotal, 4)> <cfset spreadsheetSetCellFormula(sObj, totalFormulaE, rowTotal, 5)>
步骤8对数值列进行修饰:
<!--- Formate amount column as currency ---> <cfset spreadsheetFormatColumn(sObj, {dataformat="$00000.00"}, 2)> <cfset spreadsheetFormatColumn(sObj, {dataformat="$00000.00"}, 3)> <cfset spreadsheetFormatColumn(sObj, {dataformat="$00000.00"}, 4)> <cfset spreadsheetFormatColumn(sObj, {dataformat="$00000.00"}, 5)>
步骤9最后一步,将刚才新建的表单对象写入到Excel文件中:
<!--- Save it ---> <cfspreadsheet action="write" name="sObj" filename="SalesDecorated.xls" overwrite="true">
在浏览器中运行,会发现在当前目录中生成了一个新的Excel文件SalesDecorated.xls. 如图4. 是不是比图3稍微美观一些?
图 4
这几篇随笔只是将ColdFusion9与Excel交互的最基本功能进行了简单介绍。这只是实际应用的开始。实际中的操作将会涉及更具体的内容,您会发现ColdFusion9的这个功能的确是个好帮手。
Enjoy!
人每天要做三件事,第一件是微笑,第二件是欢笑,第三件是大笑。