![](/img/trans.png)
[英]Perl Excel::Writer::XLSX - set column format/merge cells dynamically
[英]Perl - How to set key based on column header when converting from xlsx to perl hash
我有一个 xlsx,我正在转换成 perl hash
姓名 | 类型 | 象征 | 颜色 |
---|---|---|---|
约翰 | 越野车 | X | R |
抢 | 商务车 | 是 | 乙 |
詹姆士 | 4X4 | 是 | G |
目前,我只能根据列数组将 hash 超级键设置为想要的列。 我似乎无法根据列 header 弄清楚如何选择。
use Data::Dumper;
use Text::Iconv;
my $converter = Text::Iconv->new("utf-8", "windows-1251");
use Spreadsheet::XLSX;
my $excel = Spreadsheet::XLSX->new('file.xlsx', $converter);
foreach my $sheet (@{$excel->{Worksheet}}) {
if ($sheet->{Name} eq "sheet1"){
my %data;
for my $row ( 0 .. $sheet-> {MaxRow}) {
if ($sheet->{Cells}[0][$col]->{Val} eq "Symbol"){
my $super_key = $sheet->{Cells}[$row][$col]{Val};
}
my $key = $sheet->{Cells}[$row][0]{Val};
my $value = $sheet->{Cells}[$row][2]{Val};
my $value2= $sheet->{Cells}[$row][3]{Val};
$data{$super_key}->{$key}->{$value}=${value2};
}
print Dumper \%data;
}}
我得到的结果是,
$VAR1 = {
'' => {
'JOHN' => {
'SUV' => R
我想拥有;
$VAR1 = {
'X' => {
'JOHN' => {
'SUV' => R
`
您缺少use strict;
在您的 perl 脚本中。 如果你有它,你会自己看到你的错误
在你的 If 子句中用 my 定义$super_key
,一旦你退出它,这个变量就会丢失 scope。
并且在没有定义的情况下使用变量$col
也不起作用。
更好的(并且可能有效)是:
for my $row ( 0 .. $sheet-> {MaxRow}) {
my $super_key;
foreach my $col (0 .. 3) {
if ($sheet->{Cells}[0][$col]->{Val} eq "Symbol"){
$super_key = $sheet->{Cells}[$row][$col]{Val};
}
}
my $key = $sheet->{Cells}[$row][0]{Val};
my $value = $sheet->{Cells}[$row][2]{Val};
my $value2= $sheet->{Cells}[$row][3]{Val};
$data{$super_key}->{$key}->{$value}=${value2};
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.