在 Perl 中,如何将列的子集从 XLSX work sheet 复制到另一个?
In Perl, how can I copy a subset of columns from an XLSX work sheet to another?
我有一个包含 15 列的 .xlsx
文件(只有一个 sheet)。我想阅读一些特定的列,比如第 3、5、11、14 列,并将其写入新的 Excel sheet。在这种情况下,输入文件的某些单元格为空意味着没有任何值。
这是我正在尝试的:
use warnings;
use strict;
use Spreadsheet::ParseXLSX;
use Excel::Writer::XLSX;
my $parser = Spreadsheet::ParseXLSX->new;
my $workbook = $parser->parse("test.xlsx");
if ( !defined $workbook ) {
die $parser->error(), ".\n";
}
my $worksheet = $workbook->worksheet('Sheet1');
# but from here I don't know how to define row and column range to get specific column data.
# I am trying to get all data in an array, so I can write it in new .xlsx file.
# function to write data in new file
sub writetoexcel
{
my @fields = @_;
my $workbook = Excel::Writer::XLSX->new( 'report.xlsx' );
$worksheet = $workbook->add_worksheet();
my $row = 0;
my $col = 0;
for my $token ( @fields )
{
$worksheet->write( $row, $col, $token );
$col++;
}
$row++;
}
我也关注了这个Question,但是运气不好。
如何从 .xlsx
文件中读取特定列并将其写入新的 .xlsx
文件?
您是否从未将列的子集从一个数组的数组复制到另一个数组?
这是我用于此的输入 sheet:
并且,这就是我在代码为 运行:
之后在输出文件中得到的内容
#!/usr/bin/env perl
use strict;
use warnings;
use Excel::Writer::XLSX;
use Spreadsheet::ParseXLSX;
my @cols = (1, 3);
my $reader = Spreadsheet::ParseXLSX->new;
my $bookin = $reader->parse($ARGV[0]);
my $sheetin = $bookin->worksheet('Sheet1');
my $writer = Excel::Writer::XLSX->new($ARGV[1]);
my $sheetout = $writer->add_worksheet('Extract');
my ($top, $bot) = $sheetin->row_range;
for my $r ($top .. $bot) {
$sheetout->write_row(
$r,
0,
# of course, you need to do more work if you want
# to preserve formulas, formats etc. That is left
# to you, as you left that part of the problem
# unspecified.
[ map $sheetin->get_cell($r, $_)->value, @cols ],
);
}
$writer->close;
我有一个包含 15 列的 .xlsx
文件(只有一个 sheet)。我想阅读一些特定的列,比如第 3、5、11、14 列,并将其写入新的 Excel sheet。在这种情况下,输入文件的某些单元格为空意味着没有任何值。
这是我正在尝试的:
use warnings;
use strict;
use Spreadsheet::ParseXLSX;
use Excel::Writer::XLSX;
my $parser = Spreadsheet::ParseXLSX->new;
my $workbook = $parser->parse("test.xlsx");
if ( !defined $workbook ) {
die $parser->error(), ".\n";
}
my $worksheet = $workbook->worksheet('Sheet1');
# but from here I don't know how to define row and column range to get specific column data.
# I am trying to get all data in an array, so I can write it in new .xlsx file.
# function to write data in new file
sub writetoexcel
{
my @fields = @_;
my $workbook = Excel::Writer::XLSX->new( 'report.xlsx' );
$worksheet = $workbook->add_worksheet();
my $row = 0;
my $col = 0;
for my $token ( @fields )
{
$worksheet->write( $row, $col, $token );
$col++;
}
$row++;
}
我也关注了这个Question,但是运气不好。
如何从 .xlsx
文件中读取特定列并将其写入新的 .xlsx
文件?
您是否从未将列的子集从一个数组的数组复制到另一个数组?
这是我用于此的输入 sheet:
并且,这就是我在代码为 运行:
之后在输出文件中得到的内容#!/usr/bin/env perl
use strict;
use warnings;
use Excel::Writer::XLSX;
use Spreadsheet::ParseXLSX;
my @cols = (1, 3);
my $reader = Spreadsheet::ParseXLSX->new;
my $bookin = $reader->parse($ARGV[0]);
my $sheetin = $bookin->worksheet('Sheet1');
my $writer = Excel::Writer::XLSX->new($ARGV[1]);
my $sheetout = $writer->add_worksheet('Extract');
my ($top, $bot) = $sheetin->row_range;
for my $r ($top .. $bot) {
$sheetout->write_row(
$r,
0,
# of course, you need to do more work if you want
# to preserve formulas, formats etc. That is left
# to you, as you left that part of the problem
# unspecified.
[ map $sheetin->get_cell($r, $_)->value, @cols ],
);
}
$writer->close;