use Spreadsheet::ParseExcel;
use Spreadsheet::ParseExcel::Utility qw/int2col/;
use base qw/WebPAC::Common/;
+use Text::Unaccent::PurePerl qw/unac_string/;
+use Data::Dump qw/dump/;
=head1 NAME
=cut
-our $VERSION = '0.05';
+our $VERSION = '0.06';
=head1 SYNOPSIS
$log->debug("fetch_rec( $mfn ) row: $row cols: ",$sheet->{MinCol}," - ",$sheet->{MaxCol});
foreach my $col ( $sheet->{MinCol} ... $sheet->{MaxCol} ) {
- if (my $v = $sheet->{Cells}->[$row]->[$col]->{_Value}) { ## XXX _Value = formatted | Val = unformated !
- $rec->{ int2col($col) } = $v;
- }
+ my $v = $sheet->{Cells}->[$row]->[$col]->{_Value}; ## XXX _Value = formatted | Val = unformated !
+ $rec->{ int2col($col) } = $v if defined $v;
}
# add mfn only to records with data
return $self->{size};
}
-sub default_encoding { 'UTF-16' }
-
our @labels;
our @names;
my $sheet = $self->{sheet};
+ my $ds;
+
if ( ! @labels ) {
- push @labels, $sheet->{Cells}->[0]->[$_]->{_Value}
- foreach ( $sheet->{MinCol} ... $sheet->{MaxCol} )
- ;
- @names = map { s{\W+}{_}; $_ } @labels;
- $log->loginfo("column labels:", @labels, @names);
+
+ my $labels;
+
+ foreach ( $sheet->{MinCol} ... $sheet->{MaxCol} ) {
+ my $label = $sheet->{Cells}->[0]->[$_]->{_Value};
+ last if length($label) == 0;
+ push @labels, $label;
+ }
+ @names = map {
+ my $t = unac_string($_);
+ $t =~ s{[^a-z0-9]+}{_}gi;
+ $t =~ s{_+$}{};
+ $t =~ s{^_+}{};
+ $t = lc($t);
+ $labels .= "$t\t$_\n";
+ $t;
+ } @labels;
+
+ $log->info("columns = ", dump( @names ), " labels = ", dump( @labels ) );
+
+ $ds = {
+ '_labels' => [ @labels ],
+ '_names' => [ @names ],
+ };
+
+ my $path = $self->{labels} || 'var/labels.txt';
+ {
+warn $labels;
+ open(my $fh, '>:raw', $path) || die "$path: $!";
+ print $fh $labels;
+ close $fh;
+ }
+ $log->info("created labels $path ", -s $path, " bytes");
}
+
my $row = $self->{from} + $mfn - 1;
-
+ my $data;
+ foreach ( $sheet->{MinCol} ... $sheet->{MaxCol} ) {
+ my $name = $names[$_];
+ next unless $name;
+ my $v = $sheet->{Cells}->[$row]->[$_]->{_Value};
+ $data->{ $name } = $v;
+ $ds->{ $name } = { search => [ $v ] } if defined $v;
+ }
+
+ $ds->{'_rows'} = { $self->{sheet}->{Name} => [ $data ] };
+
+ return $ds;
}
=head1 AUTHOR