【问题标题】:Perl - Spreadsheet::WriteExcel function explanationPerl - Spreadsheet::WriteExcel 函数说明
【发布时间】:2011-10-17 10:30:58
【问题描述】:

我想使用这里的“autofit_columns”函数:CPAN

这是我目前的程序(我跳过了数据库连接和查询部分)

my $workbook = Spreadsheet::WriteExcel->new("TEST.xls");

my $bold = $workbook->add_format();
$bold->set_bold();
my $number = $workbook->add_format();
$number->set_num_format(0x01);
$worksheet = $workbook->add_worksheet('Sheet1');

my @headings = ('Blabla...');

foreach $i (@headings){
$worksheet->write(0, $col++, $i, $bold);
};

$col=0;
$lrow=1;
while (@row = $sth->fetchrow_array()) {
        $worksheet->write($lrow,$col,\@row);
        $lrow++;

};
$sth->finish;
$dbh->disconnect;

autofit_columns($worksheet);
$workbook->close();

sub autofit_columns {

        my $worksheet = shift;
        my $col       = 0;

        for my $width (@{$worksheet->{__col_widths}}) {

            $worksheet->set_column($col, $col, $width) if $width;
            $col++;
        }
    }

问题:xls 文件中没有自动调整我的列...知道为什么吗?

我不明白代码:

for my $width (@{$worksheet->{__col_widths}}) {

                $worksheet->set_column($col, $col, $width) if $width;
                $col++;
            } 

【问题讨论】:

    标签: perl excel module


    【解决方案1】:

    在向工作表写入任何内容之前,您需要再次查看该示例并实施 add_write_handler 部分。

    请看一下

    $worksheet->add_write_handler(qr[\w], \&store_string_widths);
    

    行然后在store_string_widths子程序执行。

    答案是您需要在每次写入时存储字符串的绝对宽度。然后,在将所有数据写入工作表后,您需要遍历行并找到每列的最大字符串“长度”——这将是所需的列宽。

    祝你好运。

    【讨论】:

      【解决方案2】:

      您缺少添加回调函数的示例代码部分:

      $worksheet->add_write_handler(qr[\w], \&store_string_widths);
      

      您还缺少store_string_widths() 函数。

      关于您的第二个问题,回调存储用于每列的最大字符串长度。代码 sn-p 使用这些长度来设置从第一列到最后一列存储长度的每一列的列宽。如果列没有存储 autfit 宽度,则不会调整其宽度。

      这在Spreadsheet::WriteExcel 中有点老套。它将更多地集成到 Excel::Writer::XLSX 中的模块中,这是 WriteExcel 的替代品。

      【讨论】:

      • +1 表示 Excel::Writer::XLSX。我喜欢你投入的工作,请继续努力。
      • 嗨,是的,谢谢...我后来发现我错过了一半的代码。这是非常有趣的一天,我挣扎了很多,但最终还是写出了一份不错的报告。我认为先从 Spreadsheet::Excel 开始会更安全,但我会看看 XLSX 模块。一些客户仍在使用旧版本的 Excel,因此它仍然是目前的最佳选择。谢谢。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-13
      • 2014-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-01
      相关资源
      最近更新 更多