惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Recent Announcements
Recent Announcements
人人都是产品经理
人人都是产品经理
月光博客
月光博客
博客园 - 三生石上(FineUI控件)
GbyAI
GbyAI
博客园 - 司徒正美
美团技术团队
Vercel News
Vercel News
IT之家
IT之家
U
Unit 42
Y
Y Combinator Blog
罗磊的独立博客
Microsoft Security Blog
Microsoft Security Blog
MongoDB | Blog
MongoDB | Blog
Jina AI
Jina AI
V
Visual Studio Blog
B
Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
MyScale Blog
MyScale Blog
博客园 - 叶小钗
A
About on SuperTechFans
WordPress大学
WordPress大学
Hugging Face - Blog
Hugging Face - Blog
B
Blog RSS Feed

博客园 - spoony

Flex4 Skinning 4: 留言板示例 Flex4 Skinning 2: 皮肤协议 Flex4 Skinning 1: 自定义一个简单按钮的皮肤 Air应用程序访问本地数据库 [通篇转载]调程序的小女孩 Adobe ColdFusion Reports(5) Adobe ColdFusion Reports(4) Adobe ColdFusion Reports(3) Adobe ColdFusion Reports(2) Adobe ColdFusion Reports(1) Adobe ColdFusion Charts(3) Adobe ColdFusion Charts(2) Adobe ColdFusion Charts(1) Adobe ColdFusion读写Microsoft Office Excel数据(2) Adobe ColdFusion读写Microsoft Office Excel数据(1) Flex与DotNET WebService交互(2) Flex与DotNET WebService交互(1) Ext JS Designer 1.0.5 发布 设置Flex Builder中FlashPlayer调试版本 - spoony - 博客园
Adobe ColdFusion读写Microsoft Office Excel数据(3)
spoony · 2010-01-23 · via 博客园 - spoony

  在实际应用中,除了对已有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!