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

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS AI 助手,专业版
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
简介:
此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

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
6月前
|
SQL 关系型数据库 MySQL
如何将Excel表的数据导入RDS MySQL数据库?
本文介绍如何通过数据管理服务DMS将Excel文件(转为CSV格式)导入RDS MySQL数据库,涵盖建表、编码设置、导入模式选择及审批执行流程,并提供操作示例与注意事项。
|
8月前
|
Python
Excel中如何批量重命名工作表与将每个工作表导出到单独Excel文件
本文介绍了如何在Excel中使用VBA批量重命名工作表、根据单元格内容修改颜色,以及将工作表导出为独立文件的方法。同时提供了Python实现导出工作表的代码示例,适用于自动化处理Excel文档。
|
9月前
|
Java 测试技术 数据库
spring号码归属地批量查询,批量查询号码归属地,在线工具,可按省份城市运营商号段分类分开分别导出excel表格
简介:文章探讨Spring Boot项目启动优化策略,通过自定义监听器、异步初始化及分库分表加载优化等手段,将项目启动时间从280秒缩短至159秒,提升约50%,显著提高开发效率。
|
12月前
|
数据库 数据安全/隐私保护
【YashanDB知识库】exp 导出数据库时,报错YAS-00402
【YashanDB知识库】exp 导出数据库时,报错YAS-00402
【YashanDB知识库】exp 导出数据库时,报错YAS-00402
|
关系型数据库 数据库连接 数据库
循序渐进丨MogDB 中 gs_dump 数据库导出工具源码概览
通过这种循序渐进的方式,您可以深入理解 `gs_dump` 的实现,并根据需要进行定制和优化。这不仅有助于提升数据库管理的效率,还能为数据迁移和备份提供可靠的保障。
375 6
|
关系型数据库 MySQL Linux
Linux下mysql数据库的导入与导出以及查看端口
本文详细介绍了在Linux下如何导入和导出MySQL数据库,以及查看MySQL运行端口的方法。通过这些操作,用户可以轻松进行数据库的备份与恢复,以及确认MySQL服务的运行状态和端口。掌握这些技能,对于日常数据库管理和维护非常重要。
644 8
|
数据库 数据安全/隐私保护
【YashanDB 知识库】exp 导出数据库时,报错 YAS-00402
**简介:** 在执行数据导出命令 `exp --csv -f csv -u sales -p sales -T area -O sales` 时,出现 YAS-00402 错误,提示“Connection refused”。原因是数据库安装时定义的 IP 地址或未正确配置导致连接失败。解决方法是添加 `--server-host ip:port` 参数,例如 `exp --csv -f csv -u sales -p sales -T area -O sales --server-host 192.168.33.167:1688`。
|
数据格式 UED
记录一次NPOI库导出Excel遇到的小问题解决方案
【11月更文挑战第16天】本文记录了使用 NPOI 库导出 Excel 过程中遇到的三个主要问题及其解决方案:单元格数据格式错误、日期格式不正确以及合并单元格边框缺失。通过自定义单元格样式、设置数据格式和手动添加边框,有效解决了这些问题,提升了导出文件的质量和用户体验。
1080 3
|
前端开发
实现Excel文件和其他文件导出为压缩包,并导入
实现Excel文件和其他文件导出为压缩包,并导入
314 1
|
Java API Apache

推荐镜像

更多