用Perl的WriteExcel从数据库生成电子数据表格文件

许多商业最终用户更喜欢使用目前流行的电子数据表格程序(如Microsoft Excel),而不是数据库功能或应用程序。尽管Excel可以用ODBC及相关技术来提取储存在Oracle数据库当中的数据,但想让用户建立一个环境来直接访问数据或是通过安装脚本来安装数据资源可能会不大合理。

因此,对于程序开发人员来说,从储存在数据库中的数据生成一个电子数据表格,并通过e-mail或网站将其文档传回用户手中,是一个非常基本的一般要求。

关于如何生成Excel电子数据表格,一个典型回答是,生成一个CSV(comma-separated values)文件,在这里每一个字段都用一个Text属性来说明,可能包含在引号里。这种情况下,这个文件作为原始数据被终端用户接受,终端用户在Excel下打开它,通过一个对话将数据正确的分解成电子数据表格中的单元格。

也可能仅仅通过传送作为一个电子数据表格属性的公式(如“=A1+B1”),将这些公式写进电子数据表格,而这个公式只有在字段被准确读取到正确位置时才会有用。在这种情况下,没有格式化控制,当数据读入时,最终用户只能手工将一个电子数据表格重新格式化。

一个Perl替代品

现在有了一个非常有用的CSV文件的替代品。John McNamara创建了一个Perl模块,叫做Spreadsheet::WriteExcel,它能动态生成一个真正的、二进制的、Excel的电子数据表格文件。

在这个模块中,你可以创建一个工作手册,并在其中加入工作表,然后直接写入工作表单元格。有许多格式化选项允许你改变字段数据的格式、黑体、对齐方式、字体、前景和背景颜色、填充图案以及边框。

另外,Spreadsheet::WriteExcel可以改变字体,文字变形和旋转文字,插入位图,设置密码保护工作表,以及建立能用鼠标扩展的数据集合。当然还能够设置打印选项和页面暂停的功能。

该模块还可以写标准输出数据,因此它可以在cgi-bin程序中使用。其他程序语言可以通过HTTP URL参照cgi-bin,来请求Excel电子数据表格电子数据表格。

下面是一个例子,它用DBI从EMP表中提取数据并用公式和格式化生成一个Excel电子数据表格电子数据表格。

use DBI;

use Spreadsheet::WriteExcel;

# connect to the local database

my $dbh = DBI-connect('dbi:Oracle:','scott','tiger') || die $DBI::errstr;

print "Generating Excel Spreadsheet\n";

my $workbook = new Spreadsheet::WriteExcel "emp.xls";

my $worksheet = $workbook-add_worksheet();

my $fmt = {

HEADER = $workbook-add_format(bold=1,align='center',

bottom=2,bg_color='silver'),

ENAME = $workbook-add_format(bold=1,color='blue'),

MONEY = $workbook-add_format(

num_format='$#,##0.00',align='right'),

TOTAL = $workbook-add_format(

num_format='$#,##0.00',align='right',bold=1,

top=2),

};

print "Querying Employees\n";

my $sth = $dbh-prepare('select * from emp') || die $DBI::errstr;

my $rc = $sth-execute;

my $r = 1;

$worksheet-write($r-1,0,'Employee',$fmt-{HEADER});

$worksheet-write($r-1,1,'Salary',$fmt-{HEADER});

$worksheet-write($r-1,2,'Commission',$fmt-{HEADER});

$worksheet-write($r-1,3,'Total',$fmt-{HEADER});

$r++;

while (my $row = $sth-fetchrow_hashref)

{

$worksheet-write($r-1,0,$row-{ENAME},$fmt-{ENAME});

$worksheet-write($r-1,1,$row-{SAL},$fmt-{MONEY});

$worksheet-write($r-1,2,$row-{COMM},$fmt-{MONEY});

$worksheet-write($r-1,3,"=B$r+C$r",$fmt-{MONEY});

$r++;

}

$worksheet-write($r-1,0,'',$fmt-{TOTAL});

$worksheet-write($r-1,1,'=SUM(B2:B'.($r-1).')',$fmt-{TOTAL});

$worksheet-write($r-1,2,'=SUM(C2:C'.($r-1).')',$fmt-{TOTAL});

$worksheet-write($r-1,3,"=B$r+C$r",$fmt-{TOTAL});

print "Processed " . ($r-2) ." rows\n";

$sth-finish;

· 湖北宜昌三峡坝区水面惊现神秘动物

近日,湖北宜昌,一段视频在当地热传:有网友在三峡坝区拍到神秘动物,体型硕大数米长...

· 什么是语段?语段的类型以及和句群、段落的区别与联系是什么?

句群是最高级的语言单位。 段落(自然段)是章法单位...

· 十八部好看的赌石类小说

以下是十八部(排名不分先后)好看的赌石类小说的简介,喜欢的朋友可以去搜索书名阅读...

 
用Perl的WriteExcel从数据库生成电子数据表格文件
  许多商业最终用户更喜欢使用目前流行的电子数据表格程序(如Microsoft Excel),而不是数据库功能或应用程序。尽管Excel可以用ODBC及相关技术来提取储存在Oracle数据库当中的数据,但想让用户建立一个环境来直接...查看完整版>>用Perl的WriteExcel从数据库生成电子数据表格文件
 
Hibernate技巧(1):利用配置文件编写程序生成数据库
  目前很多人使用Hibernate作为持久层,假如我们已经写了配置文件poweracl.hbm.XML,则不必再费劲写SQL的DDL。除了利用工具SchemaEXPort之外,还可以编写程序来自动初始化数据库,并且生成SQL DDL。(1)Hibernate配...查看完整版>>Hibernate技巧(1):利用配置文件编写程序生成数据库
 
利用jdom实现读取数据库生成XML及读取XML文件插入数据库
利用jdom实现读取数据库生成XML及读取XML文件插入数据库
  非凡说明:希望朋友们在引用尊重版权,因为这是对像我这样的朋友的最大尊重!况且这是我2006的处女贴,也希望对大家有点用,工资狂飙升!!1. 首先是预备开源包,到http://jdom.org.下载,当前最新版本是jdom-...查看完整版>>利用jdom实现读取数据库生成XML及读取XML文件插入数据库
 
一个动态生成数据库连接文件的类
一个动态生成数据库连接文件的类 作者: 我们知道,数据库连接文件(.udl)可以动态生成各种数据库连接的参数,而且它是一个文本文件。所以我们就可以动态生成,以增强程序的灵活性。但是...查看完整版>>一个动态生成数据库连接文件的类
 
Hibernate:利用配置文件生成数据库
目前很多人使用Hibernate作为持久层,如果我们已经写了配置文件poweracl.hbm.xml,则不必再费劲写SQL的DDL。除了利用工具SchemaExport之外,还可以编写程序来自动初始化数据库,并且生成SQL DDL。 (1)Hibernate配置文...查看完整版>>Hibernate:利用配置文件生成数据库