my $f = $format;
my $eval;
- $eval = $1 if ($f =~ s/^eval{([^}]+)}//);
+ $eval = $1 if ($f =~ s/^eval{([^}]+?)}//);
if ($f =~ s/^([^\d]+)//) {
if ($f) { # there is more to parse
sub fld2str {
my ($func,$row,$f,$sf,$i) = @_;
#print STDERR "## in fld2str\n";
- my $tmp = $codepage->convert(&$func($row,$f,$sf,$i)) || '';
+ my $tmp = $codepage->convert(&$func($row,$f,$sf,$i)) || $codepage->convert(&$func($row,$f,$sf,0)) || '';
return "'$tmp'";
}
$eval =~ s/v(\d+)\^(\w*)/fld2str($func,$row,$1,$2,$i)/eg;
#print STDERR "## eval: $eval\n";
if (eval "$eval") {
+ die "eval error: eval{$eval}: $@" if ($@);
return ($swish,$display);
} else {
+ die "eval error: eval{$eval}: $@" if ($@);
return (undef,undef);
}
}
my $format = shift;
my $row = shift;
my $i = shift;
- my $codepage = shift;
+ #my $codepage = shift;
+ #
+ # data allready comes in utf-8 due to change in
+ # SpreadSheet::ParseExcel::FmtDefault line 69 from
+ # return pack('C*', unpack('n*', $sTxt));
+ # to following which returns utf-8:
+ # return pack('U*', unpack('n*', $sTxt));
+ #
return if ($i > 0); # Excel doesn't support repeatable fields
#print STDERR "--$1-> $format -[",length($format),"] ";
if ($row->{$1}) {
my $tmp = $row->{$1};
- if ($codepage) {
- $tmp = $codepage->convert($tmp) || warn "excel: $1 '$tmp' can't convert";
- }
$display .= $prefix . $tmp;
$swish .= $tmp." ";
#print STDERR " == $tmp";