0

我正在使用 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 );

所以它有效,但代码看起来很愚蠢,整个情况对我来说毫无意义。有谁知道为什么会发生这种情况,如果是,那么还有其他解决方案吗?

4

1 回答 1

1

奇怪行为的原因是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()每一列。

于 2019-05-02T10:44:03.543 回答