Hello community,
here is the log from the commit of package perl-Spreadsheet-Read for
openSUSE:Factory checked in at 2018-09-24 13:12:07
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/perl-Spreadsheet-Read (Old)
and /work/SRC/openSUSE:Factory/.perl-Spreadsheet-Read.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "perl-Spreadsheet-Read"
Mon Sep 24 13:12:07 2018 rev:14 rq:636845 version:0.79
Changes:
--------
---
/work/SRC/openSUSE:Factory/perl-Spreadsheet-Read/perl-Spreadsheet-Read.changes
2018-02-09 15:47:59.654425487 +0100
+++
/work/SRC/openSUSE:Factory/.perl-Spreadsheet-Read.new/perl-Spreadsheet-Read.changes
2018-09-24 13:12:11.317819746 +0200
@@ -1,0 +2,6 @@
+Thu Sep 20 08:07:34 UTC 2018 - [email protected]
+
+- updated to 0.79
+ see /usr/share/doc/packages/perl-Spreadsheet-Read/
+
+-------------------------------------------------------------------
Old:
----
Spreadsheet-Read-0.78.tgz
New:
----
Spreadsheet-Read-0.79.tgz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ perl-Spreadsheet-Read.spec ++++++
--- /var/tmp/diff_new_pack.WQpp81/_old 2018-09-24 13:12:11.733819013 +0200
+++ /var/tmp/diff_new_pack.WQpp81/_new 2018-09-24 13:12:11.733819013 +0200
@@ -17,13 +17,13 @@
Name: perl-Spreadsheet-Read
-Version: 0.78
+Version: 0.79
Release: 0
%define cpan_name Spreadsheet-Read
Summary: Read the data from a spreadsheet
-License: Artistic-1.0 or GPL-1.0+
+License: Artistic-1.0 OR GPL-1.0-or-later
Group: Development/Libraries/Perl
-Url: http://search.cpan.org/dist/Spreadsheet-Read/
+Url: https://metacpan.org/release/%{cpan_name}
Source0:
https://cpan.metacpan.org/authors/id/H/HM/HMBRAND/%{cpan_name}-%{version}.tgz
Source1: cpanspec.yml
Patch1: nonstdperlpath.patch
++++++ Spreadsheet-Read-0.78.tgz -> Spreadsheet-Read-0.79.tgz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Spreadsheet-Read-0.78/Changes
new/Spreadsheet-Read-0.79/Changes
--- old/Spreadsheet-Read-0.78/Changes 2018-01-29 17:40:14.000000000 +0100
+++ new/Spreadsheet-Read-0.79/Changes 2018-08-29 10:31:25.000000000 +0200
@@ -1,3 +1,13 @@
+0.79 - 29 Aug 2018, H.Merijn Brand
+ * Environmant control hardening
+ * ReadData () docs (opening from scalar ref: issue#21)
+ * Check for XLSX content on opening from plain scalar content
+ * Fix typo in ss-dup-tk.pl (PRC, Branislav Zahradnik)
+ * Allow source from command line option in xls2csv (PRC, Branislav
Zahradnik)
+ * Allow --in-sep=tab in xlscat/xlsgrep
+ * Add --hash to xlscat/xlsgrep
+ * Help and usage for examples/xls2csv PR#23)
+
0.78 - 29 Jan 2018, H.Merijn Brand
* Spreadsheet::ParseExcel supports the active flag as of version 0.61
* Fix typo in docs (SPROUT, RT#124214)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Spreadsheet-Read-0.78/MANIFEST
new/Spreadsheet-Read-0.79/MANIFEST
--- old/Spreadsheet-Read-0.78/MANIFEST 2018-01-29 17:40:46.000000000 +0100
+++ new/Spreadsheet-Read-0.79/MANIFEST 2018-08-29 17:33:13.000000000 +0200
@@ -107,5 +107,6 @@
t/624_dates.t
t/625_perc.t
t/627_merged.t
+t/999_fail.t
META.yml Module YAML meta-data (added by
MakeMaker)
META.json Module JSON meta-data (added by
MakeMaker)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Spreadsheet-Read-0.78/META.json
new/Spreadsheet-Read-0.79/META.json
--- old/Spreadsheet-Read-0.78/META.json 2018-01-29 17:40:46.000000000 +0100
+++ new/Spreadsheet-Read-0.79/META.json 2018-08-29 17:33:14.000000000 +0200
@@ -1,87 +1,79 @@
{
- "abstract" : "Meta-Wrapper for reading spreadsheet data",
- "name" : "Spreadsheet-Read",
+ "resources" : {
+ "repository" : {
+ "web" : "https://github.com/Tux/Spreadsheet-Read",
+ "url" : "https://github.com/Tux/Spreadsheet-Read",
+ "type" : "git"
+ },
+ "license" : [
+ "http://dev.perl.org/licenses/"
+ ]
+ },
+ "dynamic_config" : 1,
+ "license" : [
+ "perl_5"
+ ],
+ "author" : [
+ "H.Merijn Brand <[email protected]>"
+ ],
"prereqs" : {
+ "runtime" : {
+ "recommends" : {
+ "IO::Scalar" : "0",
+ "File::Temp" : "0.2308",
+ "Data::Peek" : "0.48"
+ },
+ "requires" : {
+ "perl" : "5.008001",
+ "Encode" : "0",
+ "Data::Peek" : "0",
+ "Exporter" : "0",
+ "Data::Dumper" : "0",
+ "File::Temp" : "0.22",
+ "Carp" : "0"
+ }
+ },
"configure" : {
"requires" : {
"ExtUtils::MakeMaker" : "0"
}
},
"test" : {
- "requires" : {
- "Test::Harness" : "0",
- "Test::NoWarnings" : "0",
- "Test::More" : "0.88"
- },
"recommends" : {
- "Test::More" : "1.302120"
- }
- },
- "runtime" : {
- "requires" : {
- "Data::Dumper" : "0",
- "Data::Peek" : "0",
- "Exporter" : "0",
- "Carp" : "0",
- "perl" : "5.008001",
- "Encode" : "0",
- "File::Temp" : "0.22"
+ "Test::More" : "1.302140"
},
- "recommends" : {
- "IO::Scalar" : "0",
- "File::Temp" : "0.2304",
- "Data::Peek" : "0.47"
+ "requires" : {
+ "Test::More" : "0.88",
+ "Test::NoWarnings" : "0",
+ "Test::Harness" : "0"
}
}
},
- "resources" : {
- "license" : [
- "http://dev.perl.org/licenses/"
- ],
- "repository" : {
- "type" : "git",
- "web" : "https://github.com/Tux/Spreadsheet-Read",
- "url" : "https://github.com/Tux/Spreadsheet-Read"
- }
- },
"provides" : {
"Spreadsheet::Read" : {
- "file" : "Read.pm",
- "version" : "0.78"
+ "version" : "0.79",
+ "file" : "Read.pm"
}
},
- "license" : [
- "perl_5"
- ],
- "dynamic_config" : 1,
- "author" : [
- "H.Merijn Brand <[email protected]>"
- ],
+ "abstract" : "Meta-Wrapper for reading spreadsheet data",
+ "generated_by" : "Author",
+ "meta-spec" : {
+ "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec",
+ "version" : 2
+ },
+ "version" : "0.79",
"release_status" : "stable",
"optional_features" : {
- "opt_tools" : {
- "description" : "Spreadsheet tools",
- "prereqs" : {
- "runtime" : {
- "recommends" : {
- "Tk::NoteBook" : "0",
- "Tk" : "804.034",
- "Tk::TableMatrix::Spreadsheet" : "0"
- }
- }
- }
- },
- "opt_csv" : {
- "description" : "Provides parsing of CSV streams",
+ "opt_excelx" : {
+ "description" : "Provides parsing of Microsoft Excel 2007 files",
"prereqs" : {
"runtime" : {
- "recommends" : {
- "Text::CSV_XS" : "1.34",
- "Text::CSV_PP" : "1.95",
- "Text::CSV" : "1.95"
- },
"requires" : {
- "Text::CSV_XS" : "0.71"
+ "Spreadsheet::ParseXLSX" : "0.13",
+ "Spreadsheet::ParseExcel::FmtDefault" : "0"
+ },
+ "recommends" : {
+ "Spreadsheet::ParseXLSX" : "0.27"
}
}
}
@@ -96,39 +88,47 @@
}
}
},
- "opt_excelx" : {
+ "opt_csv" : {
"prereqs" : {
"runtime" : {
"recommends" : {
- "Spreadsheet::ParseXLSX" : "0.27"
+ "Text::CSV" : "1.97",
+ "Text::CSV_PP" : "1.97",
+ "Text::CSV_XS" : "1.36"
},
"requires" : {
- "Spreadsheet::ParseExcel::FmtDefault" : "0",
- "Spreadsheet::ParseXLSX" : "0.13"
+ "Text::CSV_XS" : "0.71"
}
}
},
- "description" : "Provides parsing of Microsoft Excel 2007 files"
+ "description" : "Provides parsing of CSV streams"
},
"opt_excel" : {
- "description" : "Provides parsing of Microsoft Excel files",
"prereqs" : {
"runtime" : {
+ "recommends" : {
+ "Spreadsheet::ParseExcel" : "0.65"
+ },
"requires" : {
"Spreadsheet::ParseExcel" : "0.34",
"Spreadsheet::ParseExcel::FmtDefault" : "0"
- },
+ }
+ }
+ },
+ "description" : "Provides parsing of Microsoft Excel files"
+ },
+ "opt_tools" : {
+ "prereqs" : {
+ "runtime" : {
"recommends" : {
- "Spreadsheet::ParseExcel" : "0.65"
+ "Tk::TableMatrix::Spreadsheet" : "0",
+ "Tk" : "804.034",
+ "Tk::NoteBook" : "0"
}
}
- }
+ },
+ "description" : "Spreadsheet tools"
}
},
- "generated_by" : "Author",
- "meta-spec" : {
- "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec",
- "version" : 2
- },
- "version" : "0.78"
+ "name" : "Spreadsheet-Read"
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Spreadsheet-Read-0.78/META.yml
new/Spreadsheet-Read-0.79/META.yml
--- old/Spreadsheet-Read-0.78/META.yml 2018-01-29 17:40:46.000000000 +0100
+++ new/Spreadsheet-Read-0.79/META.yml 2018-08-29 17:33:14.000000000 +0200
@@ -35,12 +35,12 @@
provides:
Spreadsheet::Read:
file: Read.pm
- version: '0.78'
+ version: '0.79'
recommends:
- Data::Peek: '0.47'
- File::Temp: '0.2304'
+ Data::Peek: '0.48'
+ File::Temp: '0.2308'
IO::Scalar: 0
- Test::More: '1.302120'
+ Test::More: '1.302140'
requires:
Carp: 0
Data::Dumper: 0
@@ -55,4 +55,4 @@
resources:
license: http://dev.perl.org/licenses/
repository: https://github.com/Tux/Spreadsheet-Read
-version: '0.78'
+version: '0.79'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Spreadsheet-Read-0.78/Read.pm
new/Spreadsheet-Read-0.79/Read.pm
--- old/Spreadsheet-Read-0.78/Read.pm 2018-01-25 08:11:22.000000000 +0100
+++ new/Spreadsheet-Read-0.79/Read.pm 2018-08-29 10:38:35.000000000 +0200
@@ -36,7 +36,7 @@
use strict;
use warnings;
-our $VERSION = "0.78";
+our $VERSION = "0.79";
sub Version { $VERSION }
use Carp;
@@ -64,35 +64,41 @@
[ ios => "IO::Scalar", "" ],
[ dmp => "Data::Peek", "" ],
);
-my %can = map {
- my $p = $_;
- my $preset = $ENV{"SPREADSHEET_READ_\U$p->[0]"};
- if ($preset and $preset =~ m/^[\w:]+$/) {
- if (eval "require $preset" and not $@) {
- # forcing a parser should still check the version
- for (grep { $p->[1] eq $preset and $p->[2] } @parsers) {
- my $ok;
- my $has = $preset->VERSION;
- $has =~ s/_[0-9]+$//; # Remove beta-part
- if ($p->[2] =~ m/^v([0-9.]+)/) { # clumsy versions
- my @min = split m/\./ => $1;
- $has =~ s/^v//;
- my @has = split m/\./ => $has;
- $ok = (($has[0] * 1000 + $has[1]) * 1000 + $has[2]) >=
- (($min[0] * 1000 + $min[1]) * 1000 + $min[2]);
- }
- else { # normal versions
- $ok = $has >= $p->[2];
- }
- $ok or $preset = "!$preset";
- }
+my %can = ( supports => { map { $_->[1] => $_->[2] } @parsers });
+foreach my $p (@parsers) {
+ my $format = $p->[0];
+ $can{$format} and next;
+ $can{$format} = "";
+ my $preset = $ENV{"SPREADSHEET_READ_\U$format"} or next;
+ my $min_version = $can{supports}{$preset};
+ unless ($min_version) {
+ # Catch weirdness like $SPREADSHEET_READ_XLSX = "DBD::Oracle"
+ $can{$format} = "!$preset is not supported for the $format format";
+ next;
+ }
+ if (eval "local \$_; require $preset" and not $@) {
+ # forcing a parser should still check the version
+ my $ok;
+ my $has = $preset->VERSION;
+ $has =~ s/_[0-9]+$//; # Remove beta-part
+ if ($min_version =~ m/^v([0-9.]+)/) { # clumsy versions
+ my @min = split m/\./ => $1;
+ $has =~ s/^v//;
+ my @has = split m/\./ => $has;
+ $ok = (($has[0] * 1000 + $has[1]) * 1000 + $has[2]) >=
+ (($min[0] * 1000 + $min[1]) * 1000 + $min[2]);
}
- else {
- $preset = "!$preset";
+ else { # normal versions
+ $ok = $has >= $min_version;
}
+ $ok or $preset = "!$preset";
+ }
+ else {
+ $preset = "!$preset";
}
- $p->[0] => $preset || "";
- } @parsers;
+ $can{$format} = $preset;
+ }
+delete $can{supports};
for (@parsers) {
my ($flag, $mod, $vsn) = @$_;
$can{$flag} and next;
@@ -182,7 +188,10 @@
sub parses {
ref $_[0] eq __PACKAGE__ and shift;
my $type = _parser (shift) or return 0;
- $can{$type} =~ m/^!/ and return 0;
+ if ($can{$type} =~ m/^!\s*(.*)/) {
+ $@ = $1;
+ return 0;
+ }
return $can{$type};
} # parses
@@ -526,32 +535,56 @@
return _clipsheets \%opt, [ @data ];
}
- # From /etc/magic: Microsoft Office Document
- if ($io_txt && $_parser !~ m/^xlsx?$/ &&
- $txt =~ m{^(\376\067\0\043
- |\320\317\021\340\241\261\032\341
- |\333\245-\0\0\0)}x) {
- $can{xls} or croak "Spreadsheet::ParseExcel not installed";
- my $tmpfile;
- if ($can{ios}) { # Do not use a temp file if IO::Scalar is available
- $tmpfile = \$txt;
+ if ($io_txt) { # && $_parser !~ m/^xlsx?$/) {
+ if ( # /etc/magic: Microsoft Office Document
+ $txt =~ m{\A(\376\067\0\043
+ |\320\317\021\340\241\261\032\341
+ |\333\245-\0\0\0)}x
+ # /usr/share/misc/magic
+ || $txt =~ m{\A.{2080}Microsoft Excel 5.0 Worksheet}
+ || $txt =~ m{\A\x09\x04\x06\x00\x00\x00\x10\x00}
+ ) {
+ $can{xls} or croak "Spreadsheet::ParseExcel not installed";
+ my $tmpfile;
+ if ($can{ios}) { # Do not use a temp file if IO::Scalar is available
+ $tmpfile = \$txt;
+ }
+ else {
+ $tmpfile = File::Temp->new (SUFFIX => ".xls", UNLINK => 1);
+ binmode $tmpfile;
+ print $tmpfile $txt;
+ close $tmpfile;
+ }
+ open $io_ref, "<", $tmpfile or return;
+ $io_txt = 0;
+ $_parser = _parser ($opt{parser} = "xls");
+ }
+ elsif ( # /usr/share/misc/magic
+ $txt =~
m{\APK\003\004.{4,30}(?:\[Content_Types\]\.xml|_rels/\.rels)}
+ ) {
+ $can{xlsx} or croak "XLSX parser not installed";
+ my $tmpfile;
+ if ($can{ios}) { # Do not use a temp file if IO::Scalar is available
+ $tmpfile = \$txt;
+ }
+ else {
+ $tmpfile = File::Temp->new (SUFFIX => ".xlsx", UNLINK => 1);
+ binmode $tmpfile;
+ print $tmpfile $txt;
+ close $tmpfile;
+ }
+ open $io_ref, "<", $tmpfile or return;
+ $io_txt = 0;
+ $_parser = _parser ($opt{parser} = "xlsx");
}
- else {
- $tmpfile = File::Temp->new (SUFFIX => ".xls", UNLINK => 1);
- binmode $tmpfile;
- print $tmpfile $txt;
- close $tmpfile;
- }
- open $io_ref, "<", $tmpfile or return;
- $io_txt = 0;
- $_parser = _parser ($opt{parser} = "xls");
}
if ($opt{parser} ? $_parser =~ m/^xlsx?$/
: ($io_fil && $txt =~ m/\.(xlsx?)$/i && ($_parser = $1))) {
my $parse_type = $_parser =~ m/x$/i ? "XLSX" : "XLS";
my $parser = $can{lc $parse_type} or
croak "Parser for $parse_type is not installed";
- $debug and print STDERR "Opening $parse_type $txt using $parser-",
$can{lc $parse_type}->VERSION, "\n";
+ $debug and print STDERR "Opening $parse_type ", $io_ref ? "<REF>" :
$txt,
+ " using $parser-", $can{lc $parse_type}->VERSION, "\n";
$opt{passwd} and $parser_opts{Password} = $opt{passwd};
my $oBook = eval {
$io_ref
@@ -1083,15 +1116,16 @@
module that does the actual spreadsheet scanning.
For OpenOffice and/or LibreOffice this module uses
-L<Spreadsheet::ReadSXC|http://metacpan.org/release/Spreadsheet-ReadSXC>
+L<Spreadsheet::ReadSXC|https://metacpan.org/release/Spreadsheet-ReadSXC>
For Microsoft Excel this module uses
-L<Spreadsheet::ParseExcel|http://metacpan.org/release/Spreadsheet-ParseExcel>,
-L<Spreadsheet::ParseXLSX|http://metacpan.org/release/Spreadsheet-ParseXLSX>, or
-L<Spreadsheet::XLSX|http://metacpan.org/release/Spreadsheet-XLSX>
(discouraged).
+L<Spreadsheet::ParseExcel|https://metacpan.org/release/Spreadsheet-ParseExcel>,
+L<Spreadsheet::ParseXLSX|https://metacpan.org/release/Spreadsheet-ParseXLSX>,
or
+L<Spreadsheet::XLSX|https://metacpan.org/release/Spreadsheet-XLSX> (stronly
+discouraged).
-For CSV this module uses
L<Text::CSV_XS|http://metacpan.org/release/Text-CSV_XS>
-or L<Text::CSV_PP|http://metacpan.org/release/Text-CSV_PP>.
+For CSV this module uses
L<Text::CSV_XS|https://metacpan.org/release/Text-CSV_XS>
+or L<Text::CSV_PP|https://metacpan.org/release/Text-CSV_PP>.
For SquirrelCalc there is a very simplistic built-in parser
@@ -1173,18 +1207,27 @@
my $book = ReadData ($content);
- my $book = ReadData ($fh, parser => "xls");
+ my $book = ReadData ($content, parser => "xlsx");
+
+ my $book = ReadData ($fh, parser => "xlsx");
+
+ my $book = ReadData (\$content, parser => "xlsx");
-Tries to convert the given file, string, or stream to the data
-structure described above.
+Tries to convert the given file, string, or stream to the data structure
+described above.
-Processing Excel data from a stream or content is supported through
-a L<File::Temp|https://metacpan.org/release/File-Temp> temporary file or
+Processing Excel data from a stream or content is supported through a
+L<File::Temp|https://metacpan.org/release/File-Temp> temporary file or
L<IO::Scalar|https://metacpan.org/release/IO-Scalar> when available.
L<Spreadsheet::ReadSXC|https://metacpan.org/release/Spreadsheet-ReadSXC>
does preserve sheet order as of version 0.20.
+Choosing between C<$content> and C<\\$content> (with or without passing
+the desired C<parser> option) may be depending on trial and terror.
+C<ReadData> does try to determine parser type on content if needed, but
+not all combinations are checked, and not all signatures are builtin.
+
Currently supported options are:
=over 2
@@ -1655,7 +1698,7 @@
=head3 Merged cells
Note that only
-L<Spreadsheet::ReadSXC|http://metacpan.org/release/Spreadsheet-ReadSXC>
+L<Spreadsheet::ReadSXC|https://metacpan.org/release/Spreadsheet-ReadSXC>
documents the use of merged cells, and not in a way useful for the spreadsheet
consumer.
@@ -1663,15 +1706,15 @@
for the web might).
The documentation of merged areas in
-L<Spreadsheet::ParseExcel|http://metacpan.org/release/Spreadsheet-ParseExcel>
and
-L<Spreadsheet::ParseXLSX|http://metacpan.org/release/Spreadsheet-ParseXLSX> can
+L<Spreadsheet::ParseExcel|https://metacpan.org/release/Spreadsheet-ParseExcel>
and
+L<Spreadsheet::ParseXLSX|https://metacpan.org/release/Spreadsheet-ParseXLSX>
can
be found in
-L<Spreadsheet::ParseExcel::Worksheet|http://metacpan.org/release/Spreadsheet-ParseExcel-Worksheet>
-and
L<Spreadsheet::ParseExcel::Cell|http://metacpan.org/release/Spreadsheet-ParseExcel-Cell>.
+L<Spreadsheet::ParseExcel::Worksheet|https://metacpan.org/release/Spreadsheet-ParseExcel-Worksheet>
+and
L<Spreadsheet::ParseExcel::Cell|https://metacpan.org/release/Spreadsheet-ParseExcel-Cell>.
-None of basic
L<Spreadsheet::XLSX|http://metacpan.org/release/Spreadsheet-XLSX>,
-L<Spreadsheet::ParseExcel|http://metacpan.org/release/Spreadsheet-ParseExcel>,
and
-L<Spreadsheet::ParseXLSX|http://metacpan.org/release/Spreadsheet-ParseXLSX>
manual
+None of basic
L<Spreadsheet::XLSX|https://metacpan.org/release/Spreadsheet-XLSX>,
+L<Spreadsheet::ParseExcel|https://metacpan.org/release/Spreadsheet-ParseExcel>,
and
+L<Spreadsheet::ParseXLSX|https://metacpan.org/release/Spreadsheet-ParseXLSX>
manual
pages mention merged cells at all.
This module just tries to return the information in a generic way.
@@ -1873,6 +1916,23 @@
=back
+=item Other parsers
+
+Add support for new(er) parsers for already supported formats, like
+
+=over 2
+
+=item Data::XLSX::Parser
+
+Data::XLSX::Parser provides faster way to parse Microsoft Excel's .xlsx
+files. The implementation of this module is highly inspired from Python's
+FastXLSX library.
+
+This is SAX based parser, so you can parse very large XLSX file with
+lower memory usage.
+
+=back
+
=item Other spreadsheet formats
I consider adding any spreadsheet interface that offers a usable API.
@@ -1912,68 +1972,68 @@
=item Text::CSV_XS, Text::CSV_PP
-See L<Text::CSV_XS|http://metacpan.org/release/Text-CSV_XS> ,
-L<Text::CSV_PP|http://metacpan.org/release/Text-CSV_PP> , and
-L<Text::CSV|http://metacpan.org/release/Text-CSV> documentation.
+See L<Text::CSV_XS|https://metacpan.org/release/Text-CSV_XS> ,
+L<Text::CSV_PP|https://metacpan.org/release/Text-CSV_PP> , and
+L<Text::CSV|https://metacpan.org/release/Text-CSV> documentation.
-L<Text::CSV|http://metacpan.org/release/Text-CSV> is a wrapper over
Text::CSV_XS (the fast XS version) and/or
-L<Text::CSV_PP|http://metacpan.org/release/Text-CSV_PP> (the pure perl
version).
+L<Text::CSV|https://metacpan.org/release/Text-CSV> is a wrapper over
Text::CSV_XS (the fast XS version) and/or
+L<Text::CSV_PP|https://metacpan.org/release/Text-CSV_PP> (the pure perl
version).
=item Spreadsheet::ParseExcel
-L<Spreadsheet::ParseExcel|http://metacpan.org/release/Spreadsheet-ParseExcel>
is
+L<Spreadsheet::ParseExcel|https://metacpan.org/release/Spreadsheet-ParseExcel>
is
the best parser for old-style Microsoft Excel (.xls) files.
=item Spreadsheet::ParseXLSX
-L<Spreadsheet::ParseXLSX|http://metacpan.org/release/Spreadsheet-ParseXLSX> is
-like
L<Spreadsheet::ParseExcel|http://metacpan.org/release/Spreadsheet-ParseExcel>,
+L<Spreadsheet::ParseXLSX|https://metacpan.org/release/Spreadsheet-ParseXLSX> is
+like
L<Spreadsheet::ParseExcel|https://metacpan.org/release/Spreadsheet-ParseExcel>,
but for new Microsoft Excel 2007+ files (.xlsx). They have the same API.
-This module uses L<XML::Twig|http://metacpan.org/release/XML-Twig> to parse the
+This module uses L<XML::Twig|https://metacpan.org/release/XML-Twig> to parse
the
internal XML.
=item Spreadsheet::XLSX
-See L<Spreadsheet::XLSX|http://metacpan.org/release/Spreadsheet-XLSX>
+See L<Spreadsheet::XLSX|https://metacpan.org/release/Spreadsheet-XLSX>
documentation.
This module is dead and deprecated. It is B<buggy and unmaintained>. I<Please>
-use L<Spreadsheet::ParseXLSX|http://metacpan.org/release/Spreadsheet-ParseXLSX>
+use
L<Spreadsheet::ParseXLSX|https://metacpan.org/release/Spreadsheet-ParseXLSX>
instead.
=item Spreadsheet::ReadSXC
-L<Spreadsheet::ReadSXC|http://metacpan.org/release/Spreadsheet-ReadSXC> is a
+L<Spreadsheet::ReadSXC|https://metacpan.org/release/Spreadsheet-ReadSXC> is a
parser for OpenOffice/LibreOffice (.sxc and .ods) spreadsheet files.
=item Spreadsheet::BasicRead
-See L<Spreadsheet::BasicRead|http://metacpan.org/release/Spreadsheet-BasicRead>
+See
L<Spreadsheet::BasicRead|https://metacpan.org/release/Spreadsheet-BasicRead>
for xlscat-like functionality (Excel only)
=item Spreadsheet::ConvertAA
-See L<Spreadsheet::ConvertAA|http://metacpan.org/release/Spreadsheet-ConvertAA>
+See
L<Spreadsheet::ConvertAA|https://metacpan.org/release/Spreadsheet-ConvertAA>
for an alternative set of L</cell2cr>/L</cr2cell> pair.
=item Spreadsheet::Perl
-L<Spreadsheet::Perl|http://metacpan.org/release/Spreadsheet-Perl> offers a Pure
+L<Spreadsheet::Perl|https://metacpan.org/release/Spreadsheet-Perl> offers a
Pure
Perl implementation of a spreadsheet engine. Users that want this format to be
supported in Spreadsheet::Read are hereby motivated to offer patches. It is
not high on my TODO-list.
=item Spreadsheet::CSV
-L<Spreadsheet::CSV|http://metacpan.org/release/Spreadsheet-CSV> offers the
+L<Spreadsheet::CSV|https://metacpan.org/release/Spreadsheet-CSV> offers the
interesting approach of seeing all supported spreadsheet formats as if it were
-CSV, mimicking the L<Text::CSV_XS|http://metacpan.org/release/Text-CSV_XS>
+CSV, mimicking the L<Text::CSV_XS|https://metacpan.org/release/Text-CSV_XS>
interface.
=item xls2csv
-L<xls2csv|http://metacpan.org/release/xls2csv> offers an alternative for my
+L<xls2csv|https://metacpan.org/release/xls2csv> offers an alternative for my
C<xlscat -c>, in the xls2csv tool, but this tool focuses on character encoding
transparency, and requires some other modules.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Spreadsheet-Read-0.78/examples/ss-dups-tk.pl
new/Spreadsheet-Read-0.79/examples/ss-dups-tk.pl
--- old/Spreadsheet-Read-0.78/examples/ss-dups-tk.pl 2018-01-01
14:51:00.000000000 +0100
+++ new/Spreadsheet-Read-0.79/examples/ss-dups-tk.pl 2018-03-28
09:10:53.000000000 +0200
@@ -1,7 +1,7 @@
#!/pro/bin/perl
# ss-dup-tk.pl: Find dups in spreadsheet
-# (m)'09 [23-01-2009] Copyright H.M.Brand 2005-2018
+# (m)'18 [28-03-2018] Copyright H.M.Brand 2005-2018
use strict;
use warnings;
@@ -11,10 +11,10 @@
print
"usage: $0 [-t] [-S <sheets>] [-R <rows>] [-C columns] [-F <fields>]\n",
"\t-t Only check on true values\n",
- "\t-S sheets Check sheet(s). Defaul = 1, 1,3-5,all\n",
- "\t-R rows Check row(s). Defaul = all, 6,19-66\n",
- "\t-C columns Check column(s). Defaul = all, 2,5-9\n",
- "\t-F fields Check field(s). Defaul = all, A1,A2,B15,C23\n";
+ "\t-S sheets Check sheet(s). Default = 1, 1,3-5,all\n",
+ "\t-R rows Check row(s). Default = all, 6,19-66\n",
+ "\t-C columns Check column(s). Default = all, 2,5-9\n",
+ "\t-F fields Check field(s). Default = all, A1,A2,B15,C23\n";
exit $err;
} # usage
@@ -42,7 +42,6 @@
@opt_S or @opt_S = (1);
-
use Tk;
use Tk::ROText;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Spreadsheet-Read-0.78/examples/xls2csv
new/Spreadsheet-Read-0.79/examples/xls2csv
--- old/Spreadsheet-Read-0.78/examples/xls2csv 2018-01-01 14:51:07.000000000
+0100
+++ new/Spreadsheet-Read-0.79/examples/xls2csv 2018-08-29 10:28:43.000000000
+0200
@@ -1,12 +1,12 @@
#!/pro/bin/perl
# xls2csv: Convert Microsoft Excel spreadsheet to CSV
-# (m)'17 [07-06-2017] Copyright H.M.Brand 2008-2018
+# (m)'18 [29-08-2018] Copyright H.M.Brand 2008-2018
use strict;
use warnings;
-our $VERSION = "3.3";
+our $VERSION = "3.4";
(my $cmd = $0) =~ s{.*/}{};
use Text::CSV_XS;
@@ -14,7 +14,8 @@
sub usage {
my $err = shift and select STDERR;
- print "usage: $cmd [ --all [ --no-pfx ] | -o file.csv ] file.xls\n";
+ print "usage: $cmd [-A [-N] | -o file.csv] [-f] [-i] file.xls\n";
+ print " $cmd --help | --man | --info\n";
@_ and print join "\n", @_, "";
exit $err;
} # usage
@@ -23,19 +24,26 @@
GetOptions (
"help|?" => sub { usage 0; },
"V|version" => sub { print "$cmd [$VERSION]\n"; exit 0; },
+ "man" => sub { exec "pod2man $0 | nroff -man"; },
+ "info" => sub { require Pod::Usage;
+ Pod::Usage::pod2usage (VERBOSE => 2);
+ exit;
+ },
"o|c|out=s" => \my $csv,
+ "i|s|in=s" => \my $xls,
"f|force!" => \my $opt_f,
"A|all!" => \my $opt_a,
"N|no-pfx!" => \my $opt_N,
) or usage 1;
-my $xls;
-foreach my $i (reverse 0 .. $#ARGV) {
- -f $ARGV[$i] or next;
- $xls = splice @ARGV, $i, 1;
- last;
+unless ($xls) {
+ foreach my $i (reverse 0 .. $#ARGV) {
+ -f $ARGV[$i] or next;
+ $xls = splice @ARGV, $i, 1;
+ last;
+ }
}
$xls or usage 1, "No input file";
@@ -75,3 +83,86 @@
open STDOUT, ">", $csv or die "$csv: $!\n";
$^O eq "MSWin32" and $xls = qq{"$xls"};
exec { "xlscat" } "xlscat", "-c", @ARGV, $xls;
+
+__END__
+
+=pod
+
+=head1 SYNOPSIS
+
+ xls2csv [ --all [ --no-pfx ] | -o file.csv ] [-f] [-i] file.xls
+ xls2csv --help | --man | --info
+
+=head1 DESCRIPTION
+
+Convert a spreadsheet (all formats supported by L<Spreadsheet::Read>) to CSV
+(using L<Text::CSV_XS>).
+
+=head1 OPTIONS
+
+=over
+
+=item -?
+
+=item --help
+
+Print short usage and exit.
+
+=item --man
+
+Print this help using nroff and exit.
+
+=item --info
+
+Print this help and exit.
+
+=item -V
+
+=item --version
+
+Print the version and exit.
+
+=item -f
+
+=item --force
+
+Overwrite existing output file.
+
+=item -A
+
+=item --all
+
+Output data from all sheets.
+
+Each sheet will go to extra file with name built from output CSV-file and
+sheet name.
+
+=item -N
+
+=item --no-pfx
+
+If specified, dump all will not use output CSV-file but sheet name only.
+
+=item -o CSV-file
+
+=item -c CSV-file
+
+=item --out=CSV-file
+
+Output file name (used only with C<< --all >> and without C<< --no-pfx >>).
+
+Default value is derived from XLS-file.
+
+=item -i XLS-file
+
+=item -s XLS-file
+
+=item --in=XLS-file
+
+Allows to specify input xls file.
+
+Default: Last ARGUMENT file that exists.
+
+=back
+
+=cut
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Spreadsheet-Read-0.78/examples/xlscat
new/Spreadsheet-Read-0.79/examples/xlscat
--- old/Spreadsheet-Read-0.78/examples/xlscat 2018-01-01 14:51:13.000000000
+0100
+++ new/Spreadsheet-Read-0.79/examples/xlscat 2018-06-27 11:33:30.000000000
+0200
@@ -2,12 +2,12 @@
# xlscat: show XLS/SXC file as Text
# xlsgrep: grep pattern
-# (m)'17 [2017-11-30] Copyright H.M.Brand 2005-2018
+# (m)'18 [2018-06-27] Copyright H.M.Brand 2005-2018
use strict;
use warnings;
-our $VERSION = "3.12";
+our $VERSION = "3.14";
my $is_grep = $0 =~ m/grep$/;
@@ -31,7 +31,7 @@
" -a <enc> Set encoding for output\n",
" -U Set encoding for output to utf-8 (short for -a
utf-8)\n",
" Input CSV:\n",
- " --in-sep=c Set input sep_char for CSV\n",
+ " --in-sep=c Set input sep_char for CSV (c can be 'TAB')\n",
" Input XLS:\n",
" --dtfmt=fmt Specify the default date format to replace
'm-d-yy'\n",
" the default replacement is 'yyyy-mm-dd'\n",
@@ -46,6 +46,7 @@
" -A Show field attributes in ANSI escapes\n",
" -h[#] Show # header lines\n",
" -D Dump each record with Data::Peek or Data::Dumper\n",
+ " --hash Like -D but as hash with first row as keys\n",
$is_grep ? (
" Grep options:\n",
" -i Ignore case\n",
@@ -84,6 +85,7 @@
my $opt_v = 0; # Verbosity for xlscat
my $opt_d = 0; # Debug level for Spreadsheet::Read
my $opt_h = 0; # Number of header lines for grep or -L
+my $opt_D = 0; # Dump: 0 = none, 1 = array, 2 = hash
my $clip = 1;
my $enc_i; # Input encoding
my $enc_o; # Output encoding
@@ -121,7 +123,8 @@
"u|unformatted!" => \my $opt_u, # Show unformatted values
"v|verbose:1" => \$opt_v,
"d|debug:1" => \$opt_d,
- "D|dump!" => \my $opt_D, # Use Data::Peek or Data::Dumper
+ "D|dump!" => \ $opt_D, # Use Data::Peek or Data::Dumper
+ "hash!" => sub { $opt_D = 2 },
"H|html:1" => \my $opt_H, # Output in HTML
"noclip" => sub { $clip = 0 },
"strip:3" => \my $strip,
@@ -228,6 +231,17 @@
};
}
+if ($sep) {
+ my %sep = (
+ tab => "\t",
+ pipe => "|",
+ colon => ":",
+ semicolon => ";",
+ comma => ",",
+ );
+ $sep = $sep{lc $sep} || $sep;
+ }
+
push @RDarg, debug => $opt_d, clip => $clip;
$opt_A and push @RDarg, attr => 1;
defined $sep and push @RDarg, sep => $sep, parser => "csv";
@@ -415,7 +429,8 @@
$is_grep && $r > $opt_h &&
! grep { defined $_ && $_ =~ $pattern } @row and next;
if ($opt_D) {
- ddumper \@row;
+ ddumper ($opt_D == 1 ? \@row :
+ { map { $s->{cell}[$_ + 1][1] => $row[$_] } 0 .. $#row });
next;
}
if ($opt_L) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Spreadsheet-Read-0.78/t/610_xlsx.t
new/Spreadsheet-Read-0.79/t/610_xlsx.t
--- old/Spreadsheet-Read-0.78/t/610_xlsx.t 2018-01-22 09:03:25.000000000
+0100
+++ new/Spreadsheet-Read-0.79/t/610_xlsx.t 2018-03-20 13:43:26.000000000
+0100
@@ -5,7 +5,7 @@
BEGIN { $ENV{SPREADSHEET_READ_XLSX} = "Spreadsheet::ParseXLSX"; }
-my $tests = 116;
+my $tests = 128;
use Test::More;
require Test::NoWarnings;
@@ -157,6 +157,22 @@
is ($ref->[1]{A1}, undef, "undef A1");
}
+{ sub chk_test {
+ my ($msg, $xls) = @_;
+
+ is (ref $xls, "ARRAY", "Return type for $msg");
+ is ($xls->[0]{type}, "xlsx", "Spreadsheet type XLSX");
+ is ($xls->[0]{sheets}, 2, "Sheet count");
+ } # chk_test
+
+ my $data = $content;
+ open my $fh, "<", "files/test.xlsx";
+ chk_test ( " FH parser", ReadData ( $fh, parser => "xlsx")); close
$fh;
+ chk_test ("\\DATA parser", ReadData (\$data, parser => "xlsx"));
+ chk_test ( " DATA no parser", ReadData ( $data ));
+ chk_test ( " DATA parser", ReadData ( $data, parser => "xlsx"));
+ }
+
unless ($ENV{AUTOMATED_TESTING}) {
Test::NoWarnings::had_no_warnings ();
$tests++;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Spreadsheet-Read-0.78/t/999_fail.t
new/Spreadsheet-Read-0.79/t/999_fail.t
--- old/Spreadsheet-Read-0.78/t/999_fail.t 1970-01-01 01:00:00.000000000
+0100
+++ new/Spreadsheet-Read-0.79/t/999_fail.t 2018-01-31 09:34:10.000000000
+0100
@@ -0,0 +1,17 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+BEGIN { $ENV{SPREADSHEET_READ_XLSX} = "Test::More"; }
+
+my $tests = 2;
+use Test::More;
+require Test::NoWarnings;
+
+use Spreadsheet::Read;
+
+is (Spreadsheet::Read::parses ("xlsx"), 0, "Invalid module name for xlsx");
+like ($@, qr/^Test::More is not supported/, "Error reason");
+
+done_testing ($tests);
++++++ nonstdperlpath.patch ++++++
--- /var/tmp/diff_new_pack.WQpp81/_old 2018-09-24 13:12:11.833818837 +0200
+++ /var/tmp/diff_new_pack.WQpp81/_new 2018-09-24 13:12:11.837818830 +0200
@@ -1,60 +1,54 @@
-Index: Spreadsheet-Read-0.78/Read.pm
-===================================================================
---- Spreadsheet-Read-0.78.orig/Read.pm
-+++ Spreadsheet-Read-0.78/Read.pm
+diff -ur Spreadsheet-Read-0.79/examples/ss2tk
Spreadsheet-Read-0.79_fix/examples/ss2tk
+--- Spreadsheet-Read-0.79/examples/ss2tk 2018-01-01 14:51:06.000000000
+0100
++++ Spreadsheet-Read-0.79_fix/examples/ss2tk 2018-09-20 10:08:55.480707378
+0200
@@ -1,4 +1,4 @@
-#!/pro/bin/perl
+#!/usr/bin/perl
- package Spreadsheet::Read;
-
-Index: Spreadsheet-Read-0.78/examples/ss-dups-tk.pl
-===================================================================
---- Spreadsheet-Read-0.78.orig/examples/ss-dups-tk.pl
-+++ Spreadsheet-Read-0.78/examples/ss-dups-tk.pl
+ # ss2tk: show SpreadSheet file in Tk::TableMatrix::Spreadsheet (*)
+ # (m)'17 [2017-07-03] Copyright H.M.Brand 2005-2018
+diff -ur Spreadsheet-Read-0.79/examples/ssdiff
Spreadsheet-Read-0.79_fix/examples/ssdiff
+--- Spreadsheet-Read-0.79/examples/ssdiff 2016-11-27 12:28:35.000000000
+0100
++++ Spreadsheet-Read-0.79_fix/examples/ssdiff 2018-09-20 10:08:55.480707378
+0200
@@ -1,4 +1,4 @@
-#!/pro/bin/perl
+#!/usr/bin/perl
- # ss-dup-tk.pl: Find dups in spreadsheet
- # (m)'09 [23-01-2009] Copyright H.M.Brand 2005-2018
-Index: Spreadsheet-Read-0.78/examples/ss2tk
-===================================================================
---- Spreadsheet-Read-0.78.orig/examples/ss2tk
-+++ Spreadsheet-Read-0.78/examples/ss2tk
+ use strict;
+ use warnings;
+diff -ur Spreadsheet-Read-0.79/examples/ss-dups-tk.pl
Spreadsheet-Read-0.79_fix/examples/ss-dups-tk.pl
+--- Spreadsheet-Read-0.79/examples/ss-dups-tk.pl 2018-03-28
09:10:53.000000000 +0200
++++ Spreadsheet-Read-0.79_fix/examples/ss-dups-tk.pl 2018-09-20
10:08:55.480707378 +0200
@@ -1,4 +1,4 @@
-#!/pro/bin/perl
+#!/usr/bin/perl
- # ss2tk: show SpreadSheet file in Tk::TableMatrix::Spreadsheet (*)
- # (m)'17 [2017-07-03] Copyright H.M.Brand 2005-2018
-Index: Spreadsheet-Read-0.78/examples/ssdiff
-===================================================================
---- Spreadsheet-Read-0.78.orig/examples/ssdiff
-+++ Spreadsheet-Read-0.78/examples/ssdiff
+ # ss-dup-tk.pl: Find dups in spreadsheet
+ # (m)'18 [28-03-2018] Copyright H.M.Brand 2005-2018
+diff -ur Spreadsheet-Read-0.79/examples/xls2csv
Spreadsheet-Read-0.79_fix/examples/xls2csv
+--- Spreadsheet-Read-0.79/examples/xls2csv 2018-08-29 10:28:43.000000000
+0200
++++ Spreadsheet-Read-0.79_fix/examples/xls2csv 2018-09-20 10:08:55.480707378
+0200
@@ -1,4 +1,4 @@
-#!/pro/bin/perl
+#!/usr/bin/perl
- use strict;
- use warnings;
-Index: Spreadsheet-Read-0.78/examples/xls2csv
-===================================================================
---- Spreadsheet-Read-0.78.orig/examples/xls2csv
-+++ Spreadsheet-Read-0.78/examples/xls2csv
+ # xls2csv: Convert Microsoft Excel spreadsheet to CSV
+ # (m)'18 [29-08-2018] Copyright H.M.Brand 2008-2018
+diff -ur Spreadsheet-Read-0.79/examples/xlscat
Spreadsheet-Read-0.79_fix/examples/xlscat
+--- Spreadsheet-Read-0.79/examples/xlscat 2018-06-27 11:33:30.000000000
+0200
++++ Spreadsheet-Read-0.79_fix/examples/xlscat 2018-09-20 10:08:55.480707378
+0200
@@ -1,4 +1,4 @@
-#!/pro/bin/perl
+#!/usr/bin/perl
- # xls2csv: Convert Microsoft Excel spreadsheet to CSV
- # (m)'17 [07-06-2017] Copyright H.M.Brand 2008-2018
-Index: Spreadsheet-Read-0.78/examples/xlscat
-===================================================================
---- Spreadsheet-Read-0.78.orig/examples/xlscat
-+++ Spreadsheet-Read-0.78/examples/xlscat
+ # xlscat: show XLS/SXC file as Text
+ # xlsgrep: grep pattern
+diff -ur Spreadsheet-Read-0.79/Read.pm Spreadsheet-Read-0.79_fix/Read.pm
+--- Spreadsheet-Read-0.79/Read.pm 2018-08-29 10:38:35.000000000 +0200
++++ Spreadsheet-Read-0.79_fix/Read.pm 2018-09-20 10:08:55.480707378 +0200
@@ -1,4 +1,4 @@
-#!/pro/bin/perl
+#!/usr/bin/perl
- # xlscat: show XLS/SXC file as Text
- # xlsgrep: grep pattern
+ package Spreadsheet::Read;
+