如何自动将多个文本文件内容导入同一Excel文件的对应工作表
解决方案
你可以通过配置「输入文件-工作表名」的映射关系,循环遍历处理所有文件,就能实现自动将多个压缩文本文件内容写入同一Excel的不同工作表,无需每次手动修改文件名和工作表配置。
修改后的完整脚本如下:
use strict; use warnings; use Excel::Writer::XLSX; use IO::Uncompress::Gunzip qw(gunzip $GunzipError); { my $output_fn = 'result.xlsx'; # 在此处配置需要处理的文件和对应工作表名,新增/删除文件仅需修改此处 my %file_sheet_map = ( 'accuracy_final_copy.txt.gz' => 'Accuracy', 'textfile1.txt.gz' => 'Sheet1', 'textfile2.txt.gz' => 'Sheet2', # 继续添加更多文件和对应的工作表名即可 ); my $workbook = Excel::Writer::XLSX->new( $output_fn ) or die "创建Excel文件失败: $!"; # 遍历所有配置的文件依次处理 while (my ($input_fn, $sheet_name) = each %file_sheet_map) { my $worksheet = $workbook->add_worksheet($sheet_name); my $zip = IO::Uncompress::Gunzip->new( $input_fn ) or die "解压$input_fn失败: $GunzipError\n"; # 可根据不同工作表自定义表头,这里保留你原来的写法,也可以单独配置 $worksheet->write( 0, 0, "$sheet_name 对应值" ); my $col = 0; my $row = 1; while (!$zip->eof()) { my $line = $zip->getline(); chomp($line); next if $line !~ /\S/; # 跳过空行 $worksheet->write( $row, $col, $line ); $row++; } $zip->close(); } $workbook->close(); }
核心调整说明
- 新增
%file_sheet_map配置项,所有需要处理的文件和对应的工作表名称只需在此处配置即可,后续调整处理范围不需要修改业务逻辑 - 保留了你原有的解压、读取文本行、跳过空行、写入Excel的逻辑,兼容你原来的使用习惯
- 若需要工作表按照指定顺序排列,可将哈希配置替换为有序数组存储映射关系,遍历数组即可保证生成的工作表顺序和配置顺序完全一致
- 如果你的文件和工作表名有固定规律(比如按数字序号排序),还可以进一步简化配置,直接通过循环生成文件名和工作表名,不需要手动逐个配置映射关系
内容的提问来源于stack exchange,提问作者Basil
相关产品推荐
相关产品推荐

