列只能隐藏在它们创建的组中
Columns can be hidden only in groups they were created
我正在研究使用 Perl 将一些数据导出到 xlsx 文件的自动化,尤其是模块 Excel::Writer::XLSX。如果一些已经创建的列是空的或不相关的,我希望它们被隐藏。虽然在某些情况下,使用通用命令可以轻松完成:
$worksheet->set_column( 'I:J', undef, undef, 1);
在某些特定情况下,它们不会像预期的那样消失。经过多次尝试,原来可以通过改变他们原来的设置方式来解决问题。
例如,如果我这样创建它们:
$worksheet->set_column( 'I:I', 40 );
$worksheet->set_column( 'J:M', 60 );
$worksheet->set_column( 'N:N', 40 );
然后命令
$worksheet->set_column( 'K:N', undef, undef, 1);
只会隐藏列 'N'。
解决方案是像那样创建它们
$worksheet->set_column( 'J:J', 60 );
$worksheet->set_column( 'K:M', 60 );
$worksheet->set_column( 'N:N', 40 );
所以它有效,但代码看起来很愚蠢,整个情况对我来说毫无意义。有谁知道为什么会这样,如果是的话,还有其他解决办法吗?
奇怪行为的原因是 set_column()
不像集合那样处理范围。例如,如果您为 A:F
设置一个列范围,然后为 C:D
设置另一个列范围,那么您不会自动设置 3 个范围(A:B
、C:D
、E:F
).所以你需要手动进行拆分。
在您的情况下,最好使用 set_column()
的数字范围,例如:
$worksheet->set_column( 8, 8, 40 );
# Instead of:
$worksheet->set_column( 'I:I', 40 );
我建议设置一个初始的数组(或散列)数组,其中包含您将用于每一列的列宽,然后覆盖您想要隐藏的那些,最后遍历数组并调用 set_column()
每列。
我正在研究使用 Perl 将一些数据导出到 xlsx 文件的自动化,尤其是模块 Excel::Writer::XLSX。如果一些已经创建的列是空的或不相关的,我希望它们被隐藏。虽然在某些情况下,使用通用命令可以轻松完成:
$worksheet->set_column( 'I:J', undef, undef, 1);
在某些特定情况下,它们不会像预期的那样消失。经过多次尝试,原来可以通过改变他们原来的设置方式来解决问题。
例如,如果我这样创建它们:
$worksheet->set_column( 'I:I', 40 );
$worksheet->set_column( 'J:M', 60 );
$worksheet->set_column( 'N:N', 40 );
然后命令
$worksheet->set_column( 'K:N', undef, undef, 1);
只会隐藏列 'N'。
解决方案是像那样创建它们
$worksheet->set_column( 'J:J', 60 );
$worksheet->set_column( 'K:M', 60 );
$worksheet->set_column( 'N:N', 40 );
所以它有效,但代码看起来很愚蠢,整个情况对我来说毫无意义。有谁知道为什么会这样,如果是的话,还有其他解决办法吗?
奇怪行为的原因是 set_column()
不像集合那样处理范围。例如,如果您为 A:F
设置一个列范围,然后为 C:D
设置另一个列范围,那么您不会自动设置 3 个范围(A:B
、C:D
、E:F
).所以你需要手动进行拆分。
在您的情况下,最好使用 set_column()
的数字范围,例如:
$worksheet->set_column( 8, 8, 40 );
# Instead of:
$worksheet->set_column( 'I:I', 40 );
我建议设置一个初始的数组(或散列)数组,其中包含您将用于每一列的列宽,然后覆盖您想要隐藏的那些,最后遍历数组并调用 set_column()
每列。