当前位置: 首页 > 图文教程 > 数据库 > MYSQL > 从MySQL导出XLS数据库工具(跨平台)

MYSQL
mysql 常用数据库语句 小练习
MYSQL ERROR 1045 (28000): Access denied for user (using password: YES)问题的解决
mysql 字符集的系统变量说明
MySQL 在触发器里中断记录的插入或更新?
将MySQL数据库移植为PostgreSQL
mysql 操作总结 INSERT和REPLACE
linux mysql忘记密码的多种解决或Access denied for user ''root''@''localhost''
运用mysqldump 工具时需要注意的问题
mysql 优化日记
MySQL 字符串函数大全
mysql 截取指定的两个字符串之间的内容
MySQL 备份还原数据库批处理
mysql 数据库中my.ini的优化 2G内存针对站多 抗压型的设置
Mysql 数字类型转换函数
mysql 动态生成测试数据
mysql 显示SQL语句执行时间的代码
mysql 设置查询缓存
MYSQL explain 执行计划
MySQL 有输入输出参数的存储过程实例
巧用mysql提示符prompt清晰管理数据库的方法

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-30   浏览: 79 ::
收藏到网摘: n/a

 

    这个脚本是使用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 <writefilename> "[where expression]"
~;
     exit;
}
$ARGV[1]=~ s/\"//g;

warn qq~
mysql to excel
by hoowa.sun
=====================
sql: $ARGV[1]
~;

my $dbh =
DBI->connect("DBI:mysql:mysql_compression=$trans_compress;
     database=$dbname;host=$hostname",$username,$password);
my $sth = $dbh->prepare("$ARGV[1]") || die $dbh->errstr;
my $rows = $sth->execute() or die $sth->errstr;

warn "rows: $rows found.\n";

my @cols_name = @{$sth->{'NAME'}};
if ($#cols_name > $#cols) {
     print "table $ARGV[1] fields out of allow!!(max num. > ".($#cols+1).")\n";
     exit;
}

warn "write to: $ARGV[0]\n";

#生成GB2312编码系统
my $map = Unicode::Map->new("gb2312");
#产生报表
my $report = Spreadsheet::WriteExcel::Big->new("$ARGV[0]") || die "不能生成报表文件:$!";
#创建报表的工作表
my $sheet = $report->add_worksheet('data_report');
#创建格式
my $title_style = $report->add_format();     $title_style->set_size(11);       $title_style->set_bold();       $title_style->set_align('center');
#初始化数据指针
my $sheet_col = 0;

#创建表格
for (my $i=0;$i<=$#cols_name ;$i++) {
     $sheet->set_column($cols[$i], length($cols_name[$i])+4);
     $sheet->write_unicode($sheet_col,$i,$map->to_unicode($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 '');
       $sheet->write_unicode($sheet_col,$i,$map->to_unicode($row[$i]));
     }
}

warn "all done!!!\n";

#结束
END {
     $report->close() if ($report);
     $dbh->disconnect();
}