You need to enable JavaScript to run this app. 如何使用Perl将SQL查询控制台输出内容自动写入Excel文件
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Perl将SQL查询控制台输出内容自动写入Excel文件

实现思路

核心逻辑是按「初始化数据库→初始化Excel对象→写入标题/表头→遍历SQL查询结果逐行写入Excel→关闭Excel文件」的顺序执行,避免两段逻辑独立运行的冲突。

整合后完整可运行代码
use strict;
use warnings;
use Excel::Writer::XLSX;

# 初始化数据库连接
init_db_connections();

# 初始化Excel对象
my $workbook = Excel::Writer::XLSX->new( 'perl.xlsx' );
my $worksheet = $workbook->add_worksheet();

# 配置标题格式
my $title_format = $workbook->add_format();
$title_format->set_bold();
$title_format->set_color( 'black' );
$title_format->set_underline;

# 写入标题、表头
my $cur_row = 0;
$worksheet->write( $cur_row, 0, 'SQL Report', $title_format );
# 可选:设置列宽优化显示,0-2列宽度设为20字符
$worksheet->set_column(0, 2, 20);

$cur_row++;
# 写入字段表头
$worksheet->write($cur_row, 0, 'Row1');
$worksheet->write($cur_row, 1, 'Row2');
$worksheet->write($cur_row, 2, 'Row3');
$cur_row++;

# 执行SQL查询
my $curHnd = INV::DBI::execute('----'.':------') or die $INV::DBI::errstr;
# 遍历查询结果写入Excel
while (my $db_row = $curHnd->fetchrow_hashref()) {
    # 写入当前行三个字段
    $worksheet->write($cur_row, 0, $db_row->{Row1});
    $worksheet->write($cur_row, 1, $db_row->{Row2});
    $worksheet->write($cur_row, 2, $db_row->{Row3});
    # 行号自增准备写下一条
    $cur_row++;
    # 如果需要保留控制台打印,可在这里加原来的printf逻辑
}

# 关闭Excel文件,必须放在所有写入操作完成后
$workbook->close();
exit 0;

sub init_db_connections {
    INV::DBI::init({
        ------         => '--------',
        ------- => q{select Row1, Row2, Row3
from table1
}
    });
}
关键调整说明
  • 重命名了SQL返回的行变量为$db_row,避免和Excel的行号变量$cur_row冲突,防止变量覆盖导致的写入异常
  • 统一了执行顺序,将Excel初始化操作放在SQL查询之前,保证游标返回结果时可以直接写入,不需要额外存储全部查询结果
  • 补充了字段表头行,Excel内容结构更清晰,不需要的话可以删除对应代码段
  • $workbook->close()必须放在所有写入操作完成后执行,过早关闭会导致数据无法写入文件

内容的提问来源于stack exchange,提问作者K4M41D

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.14 17:45:02