Excel-Template-XLSX

 view release on metacpan or  search on metacpan

t/10-array_formulas.t  view on Meta::CPAN

#!perl

use strict;
use warnings;

use lib 't/lib';
use Excel::Writer::XLSX;
use Excel::Template::XLSX;
use Test::More;
use File::Temp qw(tempfile);

# Can be set to 1 to see the created template and output file during debugging
$File::Temp::KEEP_ALL = 0;

###############################################################################

# Create expected workbook content
my ( $efh, $efilename ) = tempfile( SUFFIX => '.xlsx' );

my $wbk     = Excel::Writer::XLSX->new( $efilename );
my $wksheet = $wbk->add_worksheet();

$wksheet->write( 'A1', 'A1' );
$wksheet->write( 'A2', 'A2' );
my $pct = $wbk->add_format( num_format => "0.1%" );
$wksheet->write( 'A3', 0.5, $pct );
$wbk->close();

# Get workbook content as a template
my ( $gfh, $gfilename ) = tempfile( SUFFIX => '.xlsx' );
my ( $self, $twbk ) = Excel::Template::XLSX->new( $gfilename, $efilename );
$self->parse_template();

# Get string table lookup by ID, not value
my $hstring = $twbk->{_str_table};
# warn "hstring is ", dumper( $hstring );


TODO: {
  local $TODO = <<"EOF";
Find a way to read output file, and see if array formula survives.  
Consider is_deeply on sheet XML.
For now, set KEEP_ALL to 1, and examine output file by hand.
EOF
  is( $hstring->{A1}, '0', "Sheet 1 A1 in row 0" );
  is( $hstring->{A2}, '1', "Sheet 1 A2 in row 1" );
}
# is( get_cell( $twbk, $hstring->{0}, 0, 0 ), 'A1', "Sheet 1 A1" );
# is( get_cell( $twbk, $hstring->{1}, 0, 1 ), 'A2', "Sheet 1 A2" );

my $sheet = $twbk->sheets(0);
is( $sheet->{_table}{2}{0}[2]{_num_format}, '0.1%', "Template 1 Number format" );

is( $sheet->get_name(), 'Sheet1',    "Template 1 Sheet 1 name" );
$twbk->close();

warn "Files \n$efilename\n$efilename\n$gfilename\n not deleted\n" if $File::Temp::KEEP_ALL;
done_testing();

###############################################################################
sub get_cell {
   my ( $wb, $h, $sheet_idx, $row ) = @_;
   my $sheet     = $wb->sheets($sheet_idx);
   my $string_id = $sheet->{_table}{$row}{0}[1];
   # warn "row is $row ", dumper( $sheet->{_table} );
   return $h->{$string_id};
}



( run in 0.885 second using v1.01-cache-2.11-cpan-75ffa21a3d4 )