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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用版 2核4GB 50GB
简介:
此perl脚本参照博文
修正该脚本导出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);
$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语法习惯了
 

本文转自 qwjhq 51CTO博客,原文链接:http://blog.51cto.com/bingdian/196150

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
5天前
|
关系型数据库 MySQL
【mysql技巧】如何在这个mysql语句执行前加个前提,也就是只有表里没有相同数据才进行添加插入操作
【mysql技巧】如何在这个mysql语句执行前加个前提,也就是只有表里没有相同数据才进行添加插入操作
9 1
|
3天前
|
缓存 DataWorks 关系型数据库
DataWorks产品使用合集之如何抽取MySQL视图数据
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
18 4
|
2天前
|
SQL 关系型数据库 MySQL
MySQL数据库—DQL查询语句(一篇教会你快速找到想要的数据)
MySQL数据库—DQL查询语句(一篇教会你快速找到想要的数据)
|
3天前
|
数据采集 DataWorks 监控
DataWorks产品使用合集之mysql-cdc读取数据写入到datahub中,datahub如何转换时区
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
15 1
|
4天前
|
SQL 关系型数据库 数据管理
数据管理DMS产品使用合集之归档数据至其它MySQL数据库时,如何指定目的库
阿里云数据管理DMS提供了全面的数据管理、数据库运维、数据安全、数据迁移与同步等功能,助力企业高效、安全地进行数据库管理和运维工作。以下是DMS产品使用合集的详细介绍。
16 1
|
2天前
|
关系型数据库 MySQL 数据库
MySQL数据库—查询:关联查询(一篇教会你在多表关联下查询数据)
MySQL数据库—查询:关联查询(一篇教会你在多表关联下查询数据)
|
6天前
|
运维 关系型数据库 MySQL
PolarDB产品使用问题之迁移到从polardb mysql的数据空间里是否需要修改数据源地址
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
2月前
|
前端开发 Java
基于Java爬取微博数据(二) 正文长文本+导出数据Excel
【5月更文挑战第12天】基于Java爬取微博数据,正文长文本+导出数据Excel
|
14天前
|
easyexcel Java API
SpringBoot集成EasyExcel 3.x:高效实现Excel数据的优雅导入与导出
SpringBoot集成EasyExcel 3.x:高效实现Excel数据的优雅导入与导出
46 1
|
15天前
|
JSON 资源调度 JavaScript
蓝易云 - vue实现导出excel的多种方式
以上两种方式都可以实现在Vue中导出Excel的功能,你可以根据你的需求选择合适的方式。
17 1