Как я могу добавить гиперссылки в array_ref в Spreadsheet :: WriteExcel? - PullRequest
0 голосов
/ 16 февраля 2011

Я хочу записать ссылку на массив в 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'?

Подробнее см. Пример использования модуля Spreadsheet :: WriteExcel для записи 1D и 2D массивов данных .

Ответы [ 2 ]

1 голос
/ 16 февраля 2011

Метод write () в Spreadsheet :: WriteExcel является синтаксической оболочкой для ряда других методов.

В общем случае, если он не выполняет то, что вам нужно, есть два способа: использовать явно упакованный метод, который вам нужен, или измените поведение метода 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__

Во втором случае вы можете изменить write () с помощью метода add_write_handler (). Посмотрите документацию и примеры . Это немного продвинутая категория, поэтому, если вы новичок в Spreadsheet :: WriteExcel, просто используйте более простой метод выше.

0 голосов
/ 16 февраля 2011

AFIU в Spreadsheet::WriteExcel не имеет методов для форматирования URL-адресов для последующей записи, поэтому самый простой способ - добавить URL-адреса без меток внутри массивов следующим образом:

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

Или выполнить запись в определенную ячейку методом $worksheet->write_url.

...