如何在Spreadsheet :: WriteExcel中的array_ref中添加超链接?

时间:2011-02-16 07:00:56

标签: perl excel spreadsheet

我想将数组引用写入Excel,如

@eec =  ( 
                ['maggie', 'milly', 'molly', 'may'  ], 
                [13,       14,      15,      16     ], 
                ['shell',  'star',  'crab',  'stone'] 
         ); 

$worksheet->write_col('A1', \@eec); 

但我的问题是我想嵌入超级链接

我知道如何将超链接添加到特定的标签,

$worksheet->write('A4',  'http://www.perl.com/', 'Perl', $format); 

但我应该怎么做才能显示超链接 标签'may'?

有关详细信息,请参阅Example of how to use the Spreadsheet::WriteExcel module to write 1D and 2D arrays of data

2 个答案:

答案 0 :(得分:1)

Spreadsheet :: WriteExcel中的write()方法对于许多其他方法是syntactic wrapper

一般情况下,如果它没有按照您的意愿执行,则有两种补救措施:使用显式需要的包装方法或修改write()方法的行为以满足您的需要。

如果是第一种情况,您只需要展开write()为嵌套数据提供的隐式循环。像这样:

#!/usr/bin/perl

use strict;
use warnings;
use Spreadsheet::WriteExcel;

my $workbook  = Spreadsheet::WriteExcel->new( 'example.xls' );
my $worksheet = $workbook->add_worksheet();


my @eec = (
    [ 'maggie', 'milly', 'molly', 'may'   ],
    [ 13,       14,      15,      16      ],
    [ 'shell',  'star',  'crab',  'stone' ]
);


my $row = 0;

for my $aref ( @eec ) {

    my $col = 0;

    for my $token ( @$aref ) {

        if ( $token eq 'may' ) {
            $worksheet->write_url( $row, $col, 'http://foo.com', $token );
        }
        else {
            $worksheet->write( $row, $col, $token );
        }

        $col++;
    }

    $row++;
}

__END__

在第二种情况下,您可以使用add_write_handler()方法修改write()。请查看documentationexamples。这是稍微高级的类别,所以如果您是Spreadsheet :: WriteExcel的新手,只需使用上面更简单的方法。

答案 1 :(得分:0)

Spreadsheet::WriteExcel中的AFIU没有格式化URL以便以后写入的方法,所以最简单的方法是在数组中添加没有标签的URL:

@eec =   (
                ['maggie', 'milly', 'molly', 'http://www.perl.com/'  ],
                [13,       14,      15,      16     ],
                ['shell',  'star',  'crab',  'stone'],
            );

或使用$worksheet->write_url方法覆盖特定单元格。