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

MYSQL
MySQL 实用命令
Mysql 默认字符集设置方法(免安装版)
MySQL 数据库对服务器端光标的限制
MySQL UPDATE更新语句精解
Table ‘xxx’ is marked as crashed and should be repaired 错误解决方法参考
mysql 读写分离(基础篇)
mysql 读写分离(实战篇)
processlist命令 查看mysql 线程
MySQL 数据类型 大全
MySQL 密码设置
MYSQL代码 定期备份Mysql数据库
汇总整理MYSQL相关操作命令
MySQL 数据库两台主机同步实战(linux)
MSSQL 添加字段说明
MySQL 查询某个字段不重复的所有记录
mysql 设置默认的时间值
mysqlreport显示Com_中change_db占用比例高的问题的解决方法
解决mysql不能插入中文Incorrect string value
mysql从执行.sql文件时处理\n换行的问题
mysql 主从服务器的简单配置

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-30   浏览: 68 ::
收藏到网摘: 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();
}