用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 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
上一篇: Linux的硬盘安装下一篇: linux培训课程第五天:ppt以及笔记
关于用perl实现从mysql数据库里导出数据到excel的所有评论