快速业务通道

用perl实现从mysql数据库里导出数据到excel

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-04-30
此perl脚本参照博文 http://hi.baidu.com/jwxbond/blog/item/0774c566f91e7f2cab184cfe.html 修正该脚本导出UTF8字符为乱码问题 需要安装的模块 Spreadsheet::WriteExcel OLE::Storage_Lite 可从www.cpan.org上下载相关模块,如果比较懒可以下载文章后的附件,并附一脚本安装相关模块,附件文件为 OLE-Storage_Lite-0.18.tar.gz Spreadsheet-WriteExcel-2.25.tar.gz getmysqldate.pl 脚本如下 #!/usr/bin/perl
use strict;
use DBI;
use Encode;
use Spreadsheet::WriteExcel::Big;
my $hostname="localhost"; #主机
my $username="root";#用户名
my $password="xxx";#密码
my $dbname=$ARGV[1];#连接的数据库名称
my $port=3306;#端口号 #连接到数据库名需要经常变化我把数据库名定义为一变量,如果不定义也行执行sql语句的时候可以用mysql.user;这样的语句来定义到某个数据库
my @cols=(''A:A'',''B:B'',''C:C'',''D:D'',''E:E'',''F:F'',''G:G'',''H:H'',''I:I'',''J:J'',
''K:K'',''L:L'',''M:M'',''N:N'',''O:O'',''P:P'',''Q:Q'',''R:R'',''S:S'',''T:T'',''U:U'',
''V:V'',''W:W'',''X:X'',''Y:Y'',''Z:Z'',''AA:A'',''BB:B'',''CC:C'',''DD:D'',''EE:E'',
''FF:F'',''GG:G'',''HH:H'',''II:I'',''JJ:J'',''KK:K'',''LL:L'',''MM:M'',''NN:N'',
''OO:O'',''PP:P'',''QQ:Q'',''RR:R'',''SS:S'',''TT:T'',''UU:U'',''VV:V'',''WW:W'',
''XX:X'',''YY:Y'',''ZZ:Z''); if ($#ARGV != ''2'') #如果接收到的ARGV值不为2则执行提示语句
{
print qq~usage: $0 FILENAME.xls DBNAME "SQL STATEMENT" n~;
exit;
} my $script_name=$ARGV[0];
my $sql_cmd=$ARGV[2];
$sql_cmd=~ s/"//g; my $dbh = DBI->connect("dbi:mysql:database=$dbname;host=$hostname;port=$port",$username,$password); 拥有帝国一切,皆有可能。欢迎访问phome.net$dbh->do("set charset utf8;"); #mysql数据库是utf8编码,设置相同的编码方式,否则中文会乱码 my $sth = $dbh->prepare("$sql_cmd") || die $dbh->errstr;
my $rows = $sth->execute() or die $sth->errstr;
my $sql;
print "$sql cmd find $rows rows.n"; my @cols_name = @{$sth->{''NAME''}}; #从数据库查询结果的列名
if ($#cols_name > $#cols)
{
print "result table fields overflow!(max num. > ".($#cols 1).")n";
exit;
} print "write to excel..n";
#创建表格文件
my $excel = Spreadsheet::WriteExcel::Big->new("$ARGV[0]") || die "文件创建失败:$!"; #添加sheet页
my $sheet = $excel->add_worksheet(''result''); #表的格式
my $title_style = $excel->add_format();
$title_style->set_size(11);
$title_style->set_bold();
$title_style->set_align(''center''); my $sheet_col = 0; #sheet列 #将结果写入表格
for (my $i=0;$i<=$#cols_name ;$i ) #列信息
{
$sheet->set_column($cols[$i], length($cols_name[$i]) 20);
$sheet->write($sheet_col,$i,$cols_name[$i],$title_style);
} #冻结表首行
$sheet->freeze_panes(1, 0); while (my @row = $sth->fetchrow_array)
{
$sheet_col ;
for (my $i=0;$i<=$#cols_name ;$i )
{
next if ($row[$i] eq ''''); #无信息,就不写入 Encode::_utf8_on($row[$i]); #把$row[i]当作utf8来处理
$sheet->write($sheet_col, $i,$row[$i]);
}
} print "finish!n";
#脚本使用方法perl getmysqldate.pl fuck.xls information_schema "select * from tables;" 分号可有可无,但作为mysqlsql语法习惯了 拥有帝国一切,皆有可能。欢迎访问phome.net

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号