1Spreadsheet::ParseExcelU(s3e)r Contributed Perl DocumentaStpiroenadsheet::ParseExcel(3)
2
3
4
6 Spreadsheet::ParseExcel - Read information from an Excel file.
7
9 #!/usr/bin/perl -w
10
11 use strict;
12 use Spreadsheet::ParseExcel;
13
14 my $parser = Spreadsheet::ParseExcel->new();
15 my $workbook = $parser->parse('Book1.xls');
16
17 if ( !defined $workbook ) {
18 die $parser->error(), ".\n";
19 }
20
21 for my $worksheet ( $workbook->worksheets() ) {
22
23 my ( $row_min, $row_max ) = $worksheet->row_range();
24 my ( $col_min, $col_max ) = $worksheet->col_range();
25
26 for my $row ( $row_min .. $row_max ) {
27 for my $col ( $col_min .. $col_max ) {
28
29 my $cell = $worksheet->get_cell( $row, $col );
30 next unless $cell;
31
32 print "Row, Col = ($row, $col)\n";
33 print "Value = ", $cell->value(), "\n";
34 print "Unformatted = ", $cell->unformatted(), "\n";
35 print "\n";
36 }
37 }
38 }
39
41 The Spreadsheet::ParseExcel module can be used to read information from
42 Excel 95-2003 binary files.
43
44 The module cannot read files in the Excel 2007 Open XML XLSX format.
45 See the Spreadsheet::XLSX module instead.
46
48 new()
49 The "new()" method is used to create a new "Spreadsheet::ParseExcel"
50 parser object.
51
52 my $parser = Spreadsheet::ParseExcel->new();
53
54 It is possible to pass a password to decrypt an encrypted file:
55
56 $parser = Spreadsheet::ParseExcel->new( Password => 'secret' );
57
58 Only the default Excel encryption scheme is currently supported. See
59 "Decryption".
60
61 As an advanced feature it is also possible to pass a call-back handler
62 to the parser to control the parsing of the spreadsheet.
63
64 $parser = Spreadsheet::ParseExcel->new(
65 CellHandler => \&cell_handler,
66 NotSetCell => 1,
67 );
68
69 The call-back can be used to ignore certain cells or to reduce memory
70 usage. See the section "Reducing the memory usage of
71 Spreadsheet::ParseExcel" for more information.
72
73 parse($filename, $formatter)
74 The Parser "parse()" method returns a "Workbook" object.
75
76 my $parser = Spreadsheet::ParseExcel->new();
77 my $workbook = $parser->parse('Book1.xls');
78
79 If an error occurs "parse()" returns "undef". In general, programs
80 should contain a test for failed parsing as follows:
81
82 my $parser = Spreadsheet::ParseExcel->new();
83 my $workbook = $parser->parse('Book1.xls');
84
85 if ( !defined $workbook ) {
86 die $parser->error(), ".\n";
87 }
88
89 The $filename parameter is generally the file to be parsed. However, it
90 can also be a filehandle or a scalar reference.
91
92 The optional $formatter parameter can be an reference to a "Formatter
93 Class" to format the value of cells. This is useful for parsing
94 workbooks with Unicode or Asian characters:
95
96 my $parser = Spreadsheet::ParseExcel->new();
97 my $formatter = Spreadsheet::ParseExcel::FmtJapan->new();
98 my $workbook = $parser->parse( 'Book1.xls', $formatter );
99
100 The Spreadsheet::ParseExcel::FmtJapan formatter also supports Unicode.
101 If you encounter any encoding problems with the default formatter try
102 that instead.
103
104 error()
105 The Parser "error()" method returns an error string if a "parse()"
106 fails:
107
108 my $parser = Spreadsheet::ParseExcel->new();
109 my $workbook = $parser->parse('Book1.xls');
110
111 if ( !defined $workbook ) {
112 die $parser->error(), ".\n";
113 }
114
115 If you wish to generate you own error string you can use the
116 "error_code()" method instead (see below). The "error()" and
117 "error_code()" values are as follows:
118
119 error() error_code()
120 ======= ============
121 '' 0
122 'File not found' 1
123 'No Excel data found in file' 2
124 'File is encrypted' 3
125
126 The "error_code()" method is explained below.
127
128 Spreadsheet::ParseExcel will try to decrypt an encrypted Excel file
129 using the default password or a user supplied password passed to
130 "new()", see above. If these fail the module will return the 'File is
131 encrypted' error. Only the default Excel encryption scheme is currently
132 supported, see "Decryption".
133
134 error_code()
135 The Parser "error_code()" method returns an error code if a "parse()"
136 fails:
137
138 my $parser = Spreadsheet::ParseExcel->new();
139 my $workbook = $parser->parse('Book1.xls');
140
141 if ( !defined $workbook ) {
142 die "Got error code ", $parser->error_code, ".\n";
143 }
144
145 This can be useful if you wish to employ you own error strings or error
146 handling methods.
147
149 A "Spreadsheet::ParseExcel::Workbook" is created via the
150 "Spreadsheet::ParseExcel" "parse()" method:
151
152 my $parser = Spreadsheet::ParseExcel->new();
153 my $workbook = $parser->parse('Book1.xls');
154
155 The main methods of the Workbook class are:
156
157 $workbook->worksheets()
158 $workbook->worksheet()
159 $workbook->worksheet_count()
160 $workbook->get_filename()
161
162 These more commonly used methods of the Workbook class are outlined
163 below. The other, less commonly used, methods are documented in
164 Spreadsheet::ParseExcel::Worksheet.
165
166 worksheets()
167 Returns an array of "Worksheet" objects. This was most commonly used to
168 iterate over the worksheets in a workbook:
169
170 for my $worksheet ( $workbook->worksheets() ) {
171 ...
172 }
173
174 worksheet()
175 The "worksheet()" method returns a single "Worksheet" object using
176 either its name or index:
177
178 $worksheet = $workbook->worksheet('Sheet1');
179 $worksheet = $workbook->worksheet(0);
180
181 Returns "undef" if the sheet name or index doesn't exist.
182
183 worksheet_count()
184 The "worksheet_count()" method returns the number of Worksheet objects
185 in the Workbook.
186
187 my $worksheet_count = $workbook->worksheet_count();
188
189 get_filename()
190 The "get_filename()" method returns the name of the Excel file of
191 "undef" if the data was read from a filehandle rather than a file.
192
193 my $filename = $workbook->get_filename();
194
195 Other Workbook Methods
196 For full documentation of the methods available via a Workbook object
197 see Spreadsheet::ParseExcel::Workbook.
198
200 The "Spreadsheet::ParseExcel::Worksheet" class encapsulates the
201 properties of an Excel worksheet.
202
203 A Worksheet object is obtained via the "worksheets()" or "worksheet()"
204 methods.
205
206 for my $worksheet ( $workbook->worksheets() ) {
207 ...
208 }
209
210 # Or:
211
212 $worksheet = $workbook->worksheet('Sheet1');
213 $worksheet = $workbook->worksheet(0);
214
215 The most commonly used methods of the Worksheet class are:
216
217 $worksheet->get_cell()
218 $worksheet->row_range()
219 $worksheet->col_range()
220 $worksheet->get_name()
221
222 The Spreadsheet::ParseExcel::Worksheet class exposes a lot of methods
223 but in general very few are required unless you are writing an advanced
224 filter.
225
226 The most commonly used methods are detailed below. The others are
227 documented in Spreadsheet::ParseExcel::Worksheet.
228
229 get_cell($row, $col)
230 Return the "Cell" object at row $row and column $col if it is defined.
231 Otherwise returns undef.
232
233 my $cell = $worksheet->get_cell($row, $col);
234
235 row_range()
236 Returns a two-element list "($min, $max)" containing the minimum and
237 maximum defined rows in the worksheet. If there is no row defined $max
238 is smaller than $min.
239
240 my ( $row_min, $row_max ) = $worksheet->row_range();
241
242 col_range()
243 Returns a two-element list "($min, $max)" containing the minimum and
244 maximum of defined columns in the worksheet. If there is no column
245 defined $max is smaller than $min.
246
247 my ( $col_min, $col_max ) = $worksheet->col_range();
248
249 get_name()
250 The "get_name()" method returns the name of the worksheet, such as
251 'Sheet1'.
252
253 my $name = $worksheet->get_name();
254
255 Other Worksheet Methods
256 For other, less commonly used, Worksheet methods see
257 Spreadsheet::ParseExcel::Worksheet.
258
260 The "Spreadsheet::ParseExcel::Cell" class has the following main
261 methods.
262
263 $cell->value()
264 $cell->unformatted()
265
266 value()
267 The "value()" method returns the formatted value of the cell.
268
269 my $value = $cell->value();
270
271 Formatted in this sense refers to the numeric format of the cell value.
272 For example a number such as 40177 might be formatted as 40,117,
273 40117.000 or even as the date 2009/12/30.
274
275 If the cell doesn't contain a numeric format then the formatted and
276 unformatted cell values are the same, see the "unformatted()" method
277 below.
278
279 For a defined $cell the "value()" method will always return a value.
280
281 In the case of a cell with formatting but no numeric or string contents
282 the method will return the empty string ''.
283
284 unformatted()
285 The "unformatted()" method returns the unformatted value of the cell.
286
287 my $unformatted = $cell->unformatted();
288
289 Returns the cell value without a numeric format. See the "value()"
290 method above.
291
292 Other Cell Methods
293 For other, less commonly used, Worksheet methods see
294 Spreadsheet::ParseExcel::Cell.
295
297 The "Spreadsheet::ParseExcel::Format" class has the following
298 properties:
299
300 Format properties
301 $format->{Font}
302 $format->{AlignH}
303 $format->{AlignV}
304 $format->{Indent}
305 $format->{Wrap}
306 $format->{Shrink}
307 $format->{Rotate}
308 $format->{JustLast}
309 $format->{ReadDir}
310 $format->{BdrStyle}
311 $format->{BdrColor}
312 $format->{BdrDiag}
313 $format->{Fill}
314 $format->{Lock}
315 $format->{Hidden}
316 $format->{Style}
317
318 These properties are generally only of interest to advanced users.
319 Casual users can skip this section.
320
321 $format->{Font}
322 Returns the "Font" object for the Format.
323
324 $format->{AlignH}
325 Returns the horizontal alignment of the format where the value has the
326 following meaning:
327
328 0 => No alignment
329 1 => Left
330 2 => Center
331 3 => Right
332 4 => Fill
333 5 => Justify
334 6 => Center across
335 7 => Distributed/Equal spaced
336
337 $format->{AlignV}
338 Returns the vertical alignment of the format where the value has the
339 following meaning:
340
341 0 => Top
342 1 => Center
343 2 => Bottom
344 3 => Justify
345 4 => Distributed/Equal spaced
346
347 $format->{Indent}
348 Returns the indent level of the "Left" horizontal alignment.
349
350 $format->{Wrap}
351 Returns true if textwrap is on.
352
353 $format->{Shrink}
354 Returns true if "Shrink to fit" is set for the format.
355
356 $format->{Rotate}
357 Returns the text rotation. In Excel97+, it returns the angle in degrees
358 of the text rotation.
359
360 In Excel95 or earlier it returns a value as follows:
361
362 0 => No rotation
363 1 => Top down
364 2 => 90 degrees anti-clockwise,
365 3 => 90 clockwise
366
367 $format->{JustLast}
368 Return true if the "justify last" property is set for the format.
369
370 $format->{ReadDir}
371 Returns the direction that the text is read from.
372
373 $format->{BdrStyle}
374 Returns an array ref of border styles as follows:
375
376 [ $left, $right, $top, $bottom ]
377
378 $format->{BdrColor}
379 Returns an array ref of border color indexes as follows:
380
381 [ $left, $right, $top, $bottom ]
382
383 $format->{BdrDiag}
384 Returns an array ref of diagonal border kind, style and color index as
385 follows:
386
387 [$kind, $style, $color ]
388
389 Where kind is:
390
391 0 => None
392 1 => Right-Down
393 2 => Right-Up
394 3 => Both
395
396 $format->{Fill}
397 Returns an array ref of fill pattern and color indexes as follows:
398
399 [ $pattern, $front_color, $back_color ]
400
401 $format->{Lock}
402 Returns true if the cell is locked.
403
404 $format->{Hidden}
405 Returns true if the cell is Hidden.
406
407 $format->{Style}
408 Returns true if the format is a Style format.
409
411 Spreadsheet::ParseExcel::Font
412
413 Format class has these properties:
414
416 $font->{Name}
417 $font->{Bold}
418 $font->{Italic}
419 $font->{Height}
420 $font->{Underline}
421 $font->{UnderlineStyle}
422 $font->{Color}
423 $font->{Strikeout}
424 $font->{Super}
425
426 $font->{Name}
427 Returns the name of the font, for example 'Arial'.
428
429 $font->{Bold}
430 Returns true if the font is bold.
431
432 $font->{Italic}
433 Returns true if the font is italic.
434
435 $font->{Height}
436 Returns the size (height) of the font.
437
438 $font->{Underline}
439 Returns true if the font in underlined.
440
441 $font->{UnderlineStyle}
442 Returns the style of an underlined font where the value has the
443 following meaning:
444
445 0 => None
446 1 => Single
447 2 => Double
448 33 => Single accounting
449 34 => Double accounting
450
451 $font->{Color}
452 Returns the color index for the font. The mapping to an RGB color is
453 defined by each workbook.
454
455 The index can be converted to a RGB string using the
456 "$workbook-"ColorIdxToRGB()> Parser method.
457
458 (Older versions of "Spreadsheet::ParseExcel" provided the
459 "ColorIdxToRGB" class method, which is deprecated.)
460
461 $font->{Strikeout}
462 Returns true if the font has the strikeout property set.
463
464 $font->{Super}
465 Returns one of the following values if the superscript or subscript
466 property of the font is set:
467
468 0 => None
469 1 => Superscript
470 2 => Subscript
471
473 Formatters can be passed to the "parse()" method to deal with Unicode
474 or Asian formatting.
475
476 Spreadsheet::ParseExcel includes 2 formatter classes. "FmtDefault" and
477 "FmtJapanese". It is also possible to create a user defined formatting
478 class.
479
480 The formatter class "Spreadsheet::ParseExcel::Fmt*" should provide the
481 following functions:
482
483 ChkType($self, $is_numeric, $format_index)
484 Method to check the type of data in the cell. Should return "Date",
485 "Numeric" or "Text". It is passed the following parameters:
486
487 $self
488 A scalar reference to the Formatter object.
489
490 $is_numeric
491 If true, the value seems to be number.
492
493 $format_index
494 The index number for the cell Format object.
495
496 TextFmt($self, $string_data, $string_encoding)
497 Converts the string data in the cell into the correct encoding. It is
498 passed the following parameters:
499
500 $self
501 A scalar reference to the Formatter object.
502
503 $string_data
504 The original string/text data.
505
506 $string_encoding
507 The character encoding of original string/text.
508
509 ValFmt($self, $cell, $workbook)
510 Convert the original unformatted cell value into the appropriate
511 formatted value. For instance turn a number into a formatted date. It
512 is passed the following parameters:
513
514 $self
515 A scalar reference to the Formatter object.
516
517 $cell
518 A scalar reference to the Cell object.
519
520 $workbook
521 A scalar reference to the Workbook object.
522
523 FmtString($self, $cell, $workbook)
524 Get the format string for the Cell. It is passed the following
525 parameters:
526
527 $self
528 A scalar reference to the Formatter object.
529
530 $cell
531 A scalar reference to the Cell object.
532
533 $workbook
534 A scalar reference to the Workbook object.
535
537 In some cases a "Spreadsheet::ParseExcel" application may consume a lot
538 of memory when processing a large Excel file and, as a result, may fail
539 to complete. The following explains why this can occur and how to
540 resolve it.
541
542 "Spreadsheet::ParseExcel" processes an Excel file in two stages. In the
543 first stage it extracts the Excel binary stream from the OLE container
544 file using "OLE::Storage_Lite". In the second stage it parses the
545 binary stream to read workbook, worksheet and cell data which it then
546 stores in memory. The majority of the memory usage is required for
547 storing cell data.
548
549 The reason for this is that as the Excel file is parsed and each cell
550 is encountered a cell handling function creates a relatively large
551 nested cell object that contains the cell value and all of the data
552 that relates to the cell formatting. For large files (a 10MB Excel file
553 on a 256MB system) this overhead can cause the system to grind to a
554 halt.
555
556 However, in a lot of cases when an Excel file is being processed the
557 only information that is required are the cell values. In these cases
558 it is possible to avoid most of the memory overhead by specifying your
559 own cell handling function and by telling Spreadsheet::ParseExcel not
560 to store the parsed cell data. This is achieved by passing a cell
561 handler function to "new()" when creating the parse object. Here is an
562 example.
563
564 #!/usr/bin/perl -w
565
566 use strict;
567 use Spreadsheet::ParseExcel;
568
569 my $parser = Spreadsheet::ParseExcel->new(
570 CellHandler => \&cell_handler,
571 NotSetCell => 1
572 );
573
574 my $workbook = $parser->parse('file.xls');
575
576 sub cell_handler {
577
578 my $workbook = $_[0];
579 my $sheet_index = $_[1];
580 my $row = $_[2];
581 my $col = $_[3];
582 my $cell = $_[4];
583
584 # Do something useful with the formatted cell value
585 print $cell->value(), "\n";
586
587 }
588
589 The user specified cell handler is passed as a code reference to
590 "new()" along with the parameter "NotSetCell" which tells
591 Spreadsheet::ParseExcel not to store the parsed cell. Note, you don't
592 have to iterate over the rows and columns, this happens automatically
593 as part of the parsing.
594
595 The cell handler is passed 5 arguments. The first, $workbook, is a
596 reference to the "Spreadsheet::ParseExcel::Workbook" object that
597 represent the parsed workbook. This can be used to access any of the
598 "Spreadsheet::ParseExcel::Workbook" methods, see "Workbook". The second
599 $sheet_index is the zero-based index of the worksheet being parsed. The
600 third and fourth, $row and $col, are the zero-based row and column
601 number of the cell. The fifth, $cell, is a reference to the
602 "Spreadsheet::ParseExcel::Cell" object. This is used to extract the
603 data from the cell. See "Cell" for more information.
604
605 This technique can be useful if you are writing an Excel to database
606 filter since you can put your DB calls in the cell handler.
607
608 If you don't want all of the data in the spreadsheet you can add some
609 control logic to the cell handler. For example we can extend the
610 previous example so that it only prints the first 10 rows of the first
611 two worksheets in the parsed workbook by adding some "if()" statements
612 to the cell handler:
613
614 #!/usr/bin/perl -w
615
616 use strict;
617 use Spreadsheet::ParseExcel;
618
619 my $parser = Spreadsheet::ParseExcel->new(
620 CellHandler => \&cell_handler,
621 NotSetCell => 1
622 );
623
624 my $workbook = $parser->parse('file.xls');
625
626 sub cell_handler {
627
628 my $workbook = $_[0];
629 my $sheet_index = $_[1];
630 my $row = $_[2];
631 my $col = $_[3];
632 my $cell = $_[4];
633
634 # Skip some worksheets and rows (inefficiently).
635 return if $sheet_index >= 3;
636 return if $row >= 10;
637
638 # Do something with the formatted cell value
639 print $cell->value(), "\n";
640
641 }
642
643 However, this still processes the entire workbook. If you wish to save
644 some additional processing time you can abort the parsing after you
645 have read the data that you want, using the workbook "ParseAbort"
646 method:
647
648 #!/usr/bin/perl -w
649
650 use strict;
651 use Spreadsheet::ParseExcel;
652
653 my $parser = Spreadsheet::ParseExcel->new(
654 CellHandler => \&cell_handler,
655 NotSetCell => 1
656 );
657
658 my $workbook = $parser->parse('file.xls');
659
660 sub cell_handler {
661
662 my $workbook = $_[0];
663 my $sheet_index = $_[1];
664 my $row = $_[2];
665 my $col = $_[3];
666 my $cell = $_[4];
667
668 # Skip some worksheets and rows (more efficiently).
669 if ( $sheet_index >= 1 and $row >= 10 ) {
670 $workbook->ParseAbort(1);
671 return;
672 }
673
674 # Do something with the formatted cell value
675 print $cell->value(), "\n";
676
677 }
678
680 If a workbook is "protected" then Excel will encrypt the file whether a
681 password is supplied or not. As of version 0.59 Spreadsheet::ParseExcel
682 supports decrypting Excel workbooks using a default or user supplied
683 password. However, only the following encryption scheme is supported:
684
685 Office 97/2000 Compatible encryption
686
687 The following encryption methods are not supported:
688
689 Weak Encryption (XOR)
690 RC4, Microsoft Base Cryptographic Provider v1.0
691 RC4, Microsoft Base DSS and Diffie-Hellman Cryptographic Provider
692 RC4, Microsoft DH SChannel Cryptographic Provider
693 RC4, Microsoft Enhanced Cryptographic Provider v1.0
694 RC4, Microsoft Enhanced DSS and Diffie-Hellman Cryptographic Provider
695 RC4, Microsoft Enhanced RSA and AES Cryptographic Provider
696 RC4, Microsoft RSA SChannel Cryptographic Provider
697 RC4, Microsoft Strong Cryptographic Provider
698
699 See the following for more information on Excel encryption:
700 <http://office.microsoft.com/en-us/office-2003-resource-kit/important-aspects-of-password-and-encryption-protection-HA001140311.aspx>.
701
703 • Issues reported by users:
704 <http://rt.cpan.org/Public/Dist/Display.html?Name=Spreadsheet-ParseExcel>
705
706 • This module cannot read the values of formulas from files created
707 with Spreadsheet::WriteExcel unless the user specified the values
708 when creating the file (which is generally not the case). The
709 reason for this is that Spreadsheet::WriteExcel writes the formula
710 but not the formula result since it isn't in a position to
711 calculate arbitrary Excel formulas without access to Excel's
712 formula engine.
713
714 • If Excel has date fields where the specified format is equal to the
715 system-default for the short-date locale, Excel does not store the
716 format, but defaults to an internal format which is system
717 dependent. In these cases ParseExcel uses the date format
718 'yyyy-mm-dd'.
719
721 Bugs can be reported via rt.cpan.org. See the following for
722 instructions on bug reporting for Spreadsheet::ParseExcel
723
724 <http://rt.cpan.org/Public/Dist/Display.html?Name=Spreadsheet-ParseExcel>
725
727 • xls2csv by Ken Prows
728 <http://search.cpan.org/~ken/xls2csv-1.06/script/xls2csv>.
729
730 • xls2csv and xlscat by H.Merijn Brand (these utilities are part of
731 Spreadsheet::Read, see below).
732
733 • excel2txt by Ken Youens-Clark,
734 <http://search.cpan.org/~kclark/excel2txt/excel2txt>. This is an
735 excellent example of an Excel filter using Spreadsheet::ParseExcel.
736 It can produce CSV, Tab delimited, Html, XML and Yaml.
737
738 • XLSperl by Jon Allen
739 <http://search.cpan.org/~jonallen/XLSperl/bin/XLSperl>. This
740 application allows you to use Perl "one-liners" with Microsoft
741 Excel files.
742
743 • Spreadsheet::XLSX
744 <http://search.cpan.org/~dmow/Spreadsheet-XLSX/lib/Spreadsheet/XLSX.pm>
745 by Dmitry Ovsyanko. A module with a similar interface to
746 Spreadsheet::ParseExcel for parsing Excel 2007 XLSX OpenXML files.
747
748 • Spreadsheet::Read
749 <http://search.cpan.org/~hmbrand/Spreadsheet-Read/Read.pm> by
750 H.Merijn Brand. A single interface for reading several different
751 spreadsheet formats.
752
753 • Spreadsheet::WriteExcel
754 <http://search.cpan.org/~jmcnamara/Spreadsheet-WriteExcel/lib/Spreadsheet/WriteExcel.pm>.
755 A perl module for creating new Excel files.
756
757 • Spreadsheet::ParseExcel::SaveParser
758 <http://search.cpan.org/~jmcnamara/Spreadsheet-ParseExcel/lib/Spreadsheet/ParseExcel/SaveParser.pm>.
759 This is a combination of Spreadsheet::ParseExcel and
760 Spreadsheet::WriteExcel and it allows you to "rewrite" an Excel
761 file. See the following example
762 <http://search.cpan.org/~jmcnamara/Spreadsheet-WriteExcel/lib/Spreadsheet/WriteExcel.pm#MODIFYING_AND_REWRITING_EXCEL_FILES>.
763 It is part of the Spreadsheet::ParseExcel distro.
764
765 • Text::CSV_XS
766 <http://search.cpan.org/~hmbrand/Text-CSV_XS/CSV_XS.pm> by H.Merijn
767 Brand. A fast and rigorous module for reading and writing CSV data.
768 Don't consider rolling your own CSV handling, use this module
769 instead.
770
772 There is a Google group for discussing and asking questions about
773 Spreadsheet::ParseExcel. This is a good place to search to see if your
774 question has been asked before:
775 <http://groups-beta.google.com/group/spreadsheet-parseexcel/>
776
778 If you'd care to donate to the Spreadsheet::ParseExcel project, you can
779 do so via PayPal: <http://tinyurl.com/7ayes>
780
782 • The current maintenance work is directed towards making the
783 documentation more useful, improving and simplifying the API, and
784 improving the maintainability of the code base. After that new
785 features will be added.
786
787 • Fix open bugs and documentation for SaveParser.
788
789 • Add Formula support, Hyperlink support, Named Range support.
790
791 • Improve Spreadsheet::ParseExcel::SaveParser compatibility with
792 Spreadsheet::WriteExcel.
793
794 • Improve Unicode and other encoding support. This will probably
795 require dropping support for perls prior to 5.8+.
796
798 From Kawai Takanori:
799
800 First of all, I would like to acknowledge the following valuable
801 programs and modules: XHTML, OLE::Storage and Spreadsheet::WriteExcel.
802
803 In no particular order: Yamaji Haruna, Simamoto Takesi, Noguchi Harumi,
804 Ikezawa Kazuhiro, Suwazono Shugo, Hirofumi Morisada, Michael Edwards,
805 Kim Namusk, Slaven Rezic, Grant Stevens, H.Merijn Brand and many many
806 people + Kawai Mikako.
807
808 Alexey Mazurin added the decryption facility.
809
811 Because this software is licensed free of charge, there is no warranty
812 for the software, to the extent permitted by applicable law. Except
813 when otherwise stated in writing the copyright holders and/or other
814 parties provide the software "as is" without warranty of any kind,
815 either expressed or implied, including, but not limited to, the implied
816 warranties of merchantability and fitness for a particular purpose. The
817 entire risk as to the quality and performance of the software is with
818 you. Should the software prove defective, you assume the cost of all
819 necessary servicing, repair, or correction.
820
821 In no event unless required by applicable law or agreed to in writing
822 will any copyright holder, or any other party who may modify and/or
823 redistribute the software as permitted by the above licence, be liable
824 to you for damages, including any general, special, incidental, or
825 consequential damages arising out of the use or inability to use the
826 software (including but not limited to loss of data or data being
827 rendered inaccurate or losses sustained by you or third parties or a
828 failure of the software to operate with any other software), even if
829 such holder or other party has been advised of the possibility of such
830 damages.
831
833 Either the Perl Artistic Licence
834 <http://dev.perl.org/licenses/artistic.html> or the GPL
835 <http://www.opensource.org/licenses/gpl-license.php>
836
838 Current maintainer 0.60+: Douglas Wilson dougw@cpan.org
839
840 Maintainer 0.40-0.59: John McNamara jmcnamara@cpan.org
841
842 Maintainer 0.27-0.33: Gabor Szabo szabgab@cpan.org
843
844 Original author: Kawai Takanori (Hippo2000) kwitknr@cpan.org
845
847 Copyright (c) 2014 Douglas Wilson
848
849 Copyright (c) 2009-2013 John McNamara
850
851 Copyright (c) 2006-2008 Gabor Szabo
852
853 Copyright (c) 2000-2006 Kawai Takanori
854
855 All rights reserved. This is free software. You may distribute under
856 the terms of either the GNU General Public License or the Artistic
857 License.
858
859
860
861perl v5.36.0 2022-07-22 Spreadsheet::ParseExcel(3)