从MySQL导出XLS数据库工具(跨平台)


这个脚本是使用Perl生成excel xls文件的工具。依赖一些模块,你可以在linux下使用,产生xls文件。使用方式是命令行+参数。非常方便这个脚本是使用Perl生成excel xls文件的工具。依赖一些模块,你可以在linux下使用,产生xls文件。使用方式是命令行+参数。非常方便。
#!/usr/bin/perl

#===============================

mysql to excel

lastmodify at 2005-1-5

copyright by hoowa

#=============================
use strict; #严格语法检测
use DBI; #数据库引擎
use Unicode::Map; #Unicode引擎
#use Spreadsheet::WriteExcel; #Excel报表引擎
use Spreadsheet::WriteExcel::Big; #大文件Excel报表引擎

my $hostname='192.168.1.133';
my $username='user';
my $password='pass';
my $dbname='db';
my $trans_compress=1; #任何非一的数关闭数据库到程序间传输压缩

$|=1;

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 != '1') {
print qq~syntax: my2excel.pl

 1<writefilename> "[where expression]"   
 2~;   
 3exit;   
 4}   
 5$ARGV[1]=~ s/\"//g; 
 6
 7warn qq~   
 8mysql to excel   
 9by hoowa.sun   
10=====================   
11sql: $ARGV[1]   
12~; 
13
14my $dbh =   
15DBI-&gt;connect("DBI:mysql:mysql_compression=$trans_compress;   
16database=$dbname;host=$hostname",$username,$password);   
17my $sth = $dbh-&gt;prepare("$ARGV[1]") || die $dbh-&gt;errstr;   
18my $rows = $sth-&gt;execute() or die $sth-&gt;errstr; 
19
20warn "rows: $rows found.\n"; 
21
22my @cols_name = @{$sth-&gt;{'NAME'}};   
23if ($#cols_name &gt; $#cols) {   
24print "table $ARGV[1] fields out of allow!!(max num. &gt; ".($#cols+1).")\n";   
25exit;   
26} 
27
28warn "write to: $ARGV[0]\n"; 
29
30#生成GB2312编码系统   
31my $map = Unicode::Map-&gt;new("gb2312");   
32#产生报表   
33my $report = Spreadsheet::WriteExcel::Big-&gt;new("$ARGV[0]") || die "不能生成报表文件:$!";   
34#创建报表的工作表   
35my $sheet = $report-&gt;add_worksheet('data_report');   
36#创建格式   
37my $title_style = $report-&gt;add_format(); $title_style-&gt;set_size(11); $title_style-&gt;set_bold(); $title_style-&gt;set_align('center');   
38#初始化数据指针   
39my $sheet_col = 0; 
40
41#创建表格   
42for (my $i=0;$i&lt;=$#cols_name ;$i++) {   
43$sheet-&gt;set_column($cols[$i], length($cols_name[$i])+4);   
44$sheet-&gt;write_unicode($sheet_col,$i,$map-&gt;to_unicode($cols_name[$i]),$title_style);   
45}   
46$sheet-&gt;freeze_panes(1, 0);#冻结行 
47
48while (my @row = $sth-&gt;fetchrow_array) {   
49$sheet_col++;   
50for (my $i=0;$i&lt;=$#cols_name ;$i++) {   
51next if ($row[$i] eq '');   
52$sheet-&gt;write_unicode($sheet_col,$i,$map-&gt;to_unicode($row[$i]));   
53}   
54} 
55
56warn "all done!!!\n"; 
57
58#结束   
59END {   
60$report-&gt;close() if ($report);   
61$dbh-&gt;disconnect();   
62}</writefilename>
Published At
Categories with 数据库类
comments powered by Disqus