Как добавить многомерный массив (AoA) в Excel с помощью Perl? - PullRequest
3 голосов
/ 08 апреля 2009

Я хочу добавить свои данные, хранящиеся в массиве измерений 2x2 в Excel, используя Perl. Я знаю, как открыть и добавить простые данные. Это я могу сделать, используя для цикла. Но как я могу сделать это элегантно?

Это то, что я пытаюсь сделать

$sheet->Range("A1:B"."$size")->{Value} = @$data;
                                         or   @data;
                                         or   {@data};
                                         or   {\@data};

, где @data - двумерный массив.

# use existing instance if Excel is already running
eval {$ex = Win32::OLE->GetActiveObject('Excel.Application')};
die "Excel not installed" if $@;
unless (defined $ex) {
    $ex = Win32::OLE->new('Excel.Application', sub {$_[0]->Quit;})
            or die "Oops, cannot start Excel";
}


# get a new workbook
$book = $ex->Workbooks->Add;

# write to a particular cell
$sheet = $book->Worksheets(1);
print "A1:B"."$size";
# write a 2 rows by 3 columns range

$sheet->Range("A1:B"."$size")->{Value} = @$data;

Ответы [ 2 ]

3 голосов
/ 08 апреля 2009

Я вижу, что вы используете Win32 :: OLE, но такого рода вещи тоже довольно просто с Spreadsheet :: WriteExcel :

#!/usr/bin/perl -w

use strict;
use Spreadsheet::WriteExcel;

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

# Get your AoA from somewhere.
my $data = [
    [ 'Hello', 'world', 123   ],
    [ 'Bye',   'bye',   4.567 ],
];

# Write the data.
$worksheet->write_col( 'A1', $data );
2 голосов
/ 08 апреля 2009

Судя по некоторым прочтениям (передо мной нет окна Win32), похоже, что атрибут Value в Range правильно обрабатывает ссылку на AoA , поэтому попробуйте говоря:

my $data = [
    ["a1", "b1"],
    ["a2", "b2"],
];
$sheet->Range("A1:B" . @$data)->{Value} = $data;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...