1Spreadsheet::WriteExcelU(s3e)r Contributed Perl DocumentaStpiroenadsheet::WriteExcel(3)
2
3
4
6 Spreadsheet::WriteExcel - Write to a cross-platform Excel binary file.
7
9 This document refers to version 2.40 of Spreadsheet::WriteExcel,
10 released November 6, 2013.
11
13 To write a string, a formatted string, a number and a formula to the
14 first worksheet in an Excel workbook called perl.xls:
15
16 use Spreadsheet::WriteExcel;
17
18 # Create a new Excel workbook
19 my $workbook = Spreadsheet::WriteExcel->new('perl.xls');
20
21 # Add a worksheet
22 $worksheet = $workbook->add_worksheet();
23
24 # Add and define a format
25 $format = $workbook->add_format(); # Add a format
26 $format->set_bold();
27 $format->set_color('red');
28 $format->set_align('center');
29
30 # Write a formatted and unformatted string, row and column notation.
31 $col = $row = 0;
32 $worksheet->write($row, $col, 'Hi Excel!', $format);
33 $worksheet->write(1, $col, 'Hi Excel!');
34
35 # Write a number and a formula using A1 notation
36 $worksheet->write('A3', 1.2345);
37 $worksheet->write('A4', '=SIN(PI()/4)');
38
40 The Spreadsheet::WriteExcel Perl module can be used to create a cross-
41 platform Excel binary file. Multiple worksheets can be added to a
42 workbook and formatting can be applied to cells. Text, numbers,
43 formulas, hyperlinks, images and charts can be written to the cells.
44
45 The file produced by this module is compatible with Excel 97, 2000,
46 2002, 2003 and 2007.
47
48 The module will work on the majority of Windows, UNIX and Mac
49 platforms. Generated files are also compatible with the Linux/UNIX
50 spreadsheet applications Gnumeric and OpenOffice.org.
51
52 This module cannot be used to write to an existing Excel file (See
53 "MODIFYING AND REWRITING EXCEL FILES").
54
55 Note: This module is in maintenance only mode and in future will only
56 be updated with bug fixes. The newer, more feature rich and API
57 compatible Excel::Writer::XLSX module is recommended instead. See,
58 "Migrating to Excel::Writer::XLSX".
59
61 Spreadsheet::WriteExcel tries to provide an interface to as many of
62 Excel's features as possible. As a result there is a lot of
63 documentation to accompany the interface and it can be difficult at
64 first glance to see what it important and what is not. So for those of
65 you who prefer to assemble Ikea furniture first and then read the
66 instructions, here are three easy steps:
67
68 1. Create a new Excel workbook (i.e. file) using "new()".
69
70 2. Add a worksheet to the new workbook using "add_worksheet()".
71
72 3. Write to the worksheet using "write()".
73
74 Like this:
75
76 use Spreadsheet::WriteExcel; # Step 0
77
78 my $workbook = Spreadsheet::WriteExcel->new('perl.xls'); # Step 1
79 $worksheet = $workbook->add_worksheet(); # Step 2
80 $worksheet->write('A1', 'Hi Excel!'); # Step 3
81
82 This will create an Excel file called "perl.xls" with a single
83 worksheet and the text 'Hi Excel!' in the relevant cell. And that's it.
84 Okay, so there is actually a zeroth step as well, but "use module" goes
85 without saying. There are also more than 80 examples that come with the
86 distribution and which you can use to get you started. See "EXAMPLES".
87
88 Those of you who read the instructions first and assemble the furniture
89 afterwards will know how to proceed. ;-)
90
92 The Spreadsheet::WriteExcel module provides an object oriented
93 interface to a new Excel workbook. The following methods are available
94 through a new workbook.
95
96 new()
97 add_worksheet()
98 add_format()
99 add_chart()
100 add_chart_ext()
101 close()
102 compatibility_mode()
103 set_properties()
104 define_name()
105 set_tempdir()
106 set_custom_color()
107 sheets()
108 set_1904()
109 set_codepage()
110
111 If you are unfamiliar with object oriented interfaces or the way that
112 they are implemented in Perl have a look at "perlobj" and "perltoot" in
113 the main Perl documentation.
114
115 new()
116 A new Excel workbook is created using the "new()" constructor which
117 accepts either a filename or a filehandle as a parameter. The following
118 example creates a new Excel file based on a filename:
119
120 my $workbook = Spreadsheet::WriteExcel->new('filename.xls');
121 my $worksheet = $workbook->add_worksheet();
122 $worksheet->write(0, 0, 'Hi Excel!');
123
124 Here are some other examples of using "new()" with filenames:
125
126 my $workbook1 = Spreadsheet::WriteExcel->new($filename);
127 my $workbook2 = Spreadsheet::WriteExcel->new('/tmp/filename.xls');
128 my $workbook3 = Spreadsheet::WriteExcel->new("c:\\tmp\\filename.xls");
129 my $workbook4 = Spreadsheet::WriteExcel->new('c:\tmp\filename.xls');
130
131 The last two examples demonstrates how to create a file on DOS or
132 Windows where it is necessary to either escape the directory separator
133 "\" or to use single quotes to ensure that it isn't interpolated. For
134 more information see "perlfaq5: Why can't I use "C:\temp\foo" in DOS
135 paths?".
136
137 The "new()" constructor returns a Spreadsheet::WriteExcel object that
138 you can use to add worksheets and store data. It should be noted that
139 although "my" is not specifically required it defines the scope of the
140 new workbook variable and, in the majority of cases, ensures that the
141 workbook is closed properly without explicitly calling the "close()"
142 method.
143
144 If the file cannot be created, due to file permissions or some other
145 reason, "new" will return "undef". Therefore, it is good practice to
146 check the return value of "new" before proceeding. As usual the Perl
147 variable $! will be set if there is a file creation error. You will
148 also see one of the warning messages detailed in "DIAGNOSTICS":
149
150 my $workbook = Spreadsheet::WriteExcel->new('protected.xls');
151 die "Problems creating new Excel file: $!" unless defined $workbook;
152
153 You can also pass a valid filehandle to the "new()" constructor. For
154 example in a CGI program you could do something like this:
155
156 binmode(STDOUT);
157 my $workbook = Spreadsheet::WriteExcel->new(\*STDOUT);
158
159 The requirement for "binmode()" is explained below.
160
161 See also, the "cgi.pl" program in the "examples" directory of the
162 distro.
163
164 However, this special case will not work in "mod_perl" programs where
165 you will have to do something like the following:
166
167 # mod_perl 1
168 ...
169 tie *XLS, 'Apache';
170 binmode(XLS);
171 my $workbook = Spreadsheet::WriteExcel->new(\*XLS);
172 ...
173
174 # mod_perl 2
175 ...
176 tie *XLS => $r; # Tie to the Apache::RequestRec object
177 binmode(*XLS);
178 my $workbook = Spreadsheet::WriteExcel->new(\*XLS);
179 ...
180
181 See also, the "mod_perl1.pl" and "mod_perl2.pl" programs in the
182 "examples" directory of the distro.
183
184 Filehandles can also be useful if you want to stream an Excel file over
185 a socket or if you want to store an Excel file in a scalar.
186
187 For example here is a way to write an Excel file to a scalar with "perl
188 5.8":
189
190 #!/usr/bin/perl -w
191
192 use strict;
193 use Spreadsheet::WriteExcel;
194
195 # Requires perl 5.8 or later
196 open my $fh, '>', \my $str or die "Failed to open filehandle: $!";
197
198 my $workbook = Spreadsheet::WriteExcel->new($fh);
199 my $worksheet = $workbook->add_worksheet();
200
201 $worksheet->write(0, 0, 'Hi Excel!');
202
203 $workbook->close();
204
205 # The Excel file in now in $str. Remember to binmode() the output
206 # filehandle before printing it.
207 binmode STDOUT;
208 print $str;
209
210 See also the "write_to_scalar.pl" and "filehandle.pl" programs in the
211 "examples" directory of the distro.
212
213 Note about the requirement for "binmode()". An Excel file is comprised
214 of binary data. Therefore, if you are using a filehandle you should
215 ensure that you "binmode()" it prior to passing it to "new()".You
216 should do this regardless of whether you are on a Windows platform or
217 not. This applies especially to users of perl 5.8 on systems where
218 "UTF-8" is likely to be in operation such as RedHat Linux 9. If your
219 program, either intentionally or not, writes "UTF-8" data to a
220 filehandle that is passed to "new()" it will corrupt the Excel file
221 that is created.
222
223 You don't have to worry about "binmode()" if you are using filenames
224 instead of filehandles. Spreadsheet::WriteExcel performs the
225 "binmode()" internally when it converts the filename to a filehandle.
226 For more information about "binmode()" see "perlfunc" and "perlopentut"
227 in the main Perl documentation.
228
229 add_worksheet($sheetname, $utf_16_be)
230 At least one worksheet should be added to a new workbook. A worksheet
231 is used to write data into cells:
232
233 $worksheet1 = $workbook->add_worksheet(); # Sheet1
234 $worksheet2 = $workbook->add_worksheet('Foglio2'); # Foglio2
235 $worksheet3 = $workbook->add_worksheet('Data'); # Data
236 $worksheet4 = $workbook->add_worksheet(); # Sheet4
237
238 If $sheetname is not specified the default Excel convention will be
239 followed, i.e. Sheet1, Sheet2, etc. The $utf_16_be parameter is
240 optional, see below.
241
242 The worksheet name must be a valid Excel worksheet name, i.e. it cannot
243 contain any of the following characters, "[ ] : * ? / \" and it must be
244 less than 32 characters. In addition, you cannot use the same, case
245 insensitive, $sheetname for more than one worksheet.
246
247 On systems with "perl 5.8" and later the "add_worksheet()" method will
248 also handle strings in "UTF-8" format.
249
250 $worksheet = $workbook->add_worksheet("\x{263a}"); # Smiley
251
252 On earlier Perl systems your can specify "UTF-16BE" worksheet names
253 using an additional optional parameter:
254
255 my $name = pack 'n', 0x263a;
256 $worksheet = $workbook->add_worksheet($name, 1); # Smiley
257
258 add_format(%properties)
259 The "add_format()" method can be used to create new Format objects
260 which are used to apply formatting to a cell. You can either define the
261 properties at creation time via a hash of property values or later via
262 method calls.
263
264 $format1 = $workbook->add_format(%props); # Set properties at creation
265 $format2 = $workbook->add_format(); # Set properties later
266
267 See the "CELL FORMATTING" section for more details about Format
268 properties and how to set them.
269
270 add_chart(%properties)
271 This method is use to create a new chart either as a standalone
272 worksheet (the default) or as an embeddable object that can be inserted
273 into a worksheet via the "insert_chart()" Worksheet method.
274
275 my $chart = $workbook->add_chart( type => 'column' );
276
277 The properties that can be set are:
278
279 type (required)
280 name (optional)
281 embedded (optional)
282
283 • "type"
284
285 This is a required parameter. It defines the type of chart that
286 will be created.
287
288 my $chart = $workbook->add_chart( type => 'line' );
289
290 The available types are:
291
292 area
293 bar
294 column
295 line
296 pie
297 scatter
298 stock
299
300 • "name"
301
302 Set the name for the chart sheet. The name property is optional and
303 if it isn't supplied will default to "Chart1 .. n". The name must
304 be a valid Excel worksheet name. See "add_worksheet()" for more
305 details on valid sheet names. The "name" property can be omitted
306 for embedded charts.
307
308 my $chart = $workbook->add_chart( type => 'line', name => 'Results Chart' );
309
310 • "embedded"
311
312 Specifies that the Chart object will be inserted in a worksheet via
313 the "insert_chart()" Worksheet method. It is an error to try insert
314 a Chart that doesn't have this flag set.
315
316 my $chart = $workbook->add_chart( type => 'line', embedded => 1 );
317
318 # Configure the chart.
319 ...
320
321 # Insert the chart into the a worksheet.
322 $worksheet->insert_chart( 'E2', $chart );
323
324 See Spreadsheet::WriteExcel::Chart for details on how to configure the
325 chart object once it is created. See also the "chart_*.pl" programs in
326 the examples directory of the distro.
327
328 add_chart_ext($chart_data, $chartname)
329 This method is use to include externally generated charts in a
330 Spreadsheet::WriteExcel file.
331
332 my $chart = $workbook->add_chart_ext('chart01.bin', 'Chart1');
333
334 This feature is semi-deprecated in favour of the "native" charts
335 created using "add_chart()". Read "external_charts.txt" (or ".pod") in
336 the external_charts directory of the distro for a full explanation.
337
338 close()
339 In general your Excel file will be closed automatically when your
340 program ends or when the Workbook object goes out of scope, however the
341 "close()" method can be used to explicitly close an Excel file.
342
343 $workbook->close();
344
345 An explicit "close()" is required if the file must be closed prior to
346 performing some external action on it such as copying it, reading its
347 size or attaching it to an email.
348
349 In addition, "close()" may be required to prevent perl's garbage
350 collector from disposing of the Workbook, Worksheet and Format objects
351 in the wrong order. Situations where this can occur are:
352
353 • If "my()" was not used to declare the scope of a workbook variable
354 created using "new()".
355
356 • If the "new()", "add_worksheet()" or "add_format()" methods are
357 called in subroutines.
358
359 The reason for this is that Spreadsheet::WriteExcel relies on Perl's
360 "DESTROY" mechanism to trigger destructor methods in a specific
361 sequence. This may not happen in cases where the Workbook, Worksheet
362 and Format variables are not lexically scoped or where they have
363 different lexical scopes.
364
365 In general, if you create a file with a size of 0 bytes or you fail to
366 create a file you need to call "close()".
367
368 The return value of "close()" is the same as that returned by perl when
369 it closes the file created by "new()". This allows you to handle error
370 conditions in the usual way:
371
372 $workbook->close() or die "Error closing file: $!";
373
374 compatibility_mode()
375 This method is used to improve compatibility with third party
376 applications that read Excel files.
377
378 $workbook->compatibility_mode();
379
380 An Excel file is comprised of binary records that describe properties
381 of a spreadsheet. Excel is reasonably liberal about this and, outside
382 of a core subset, it doesn't require every possible record to be
383 present when it reads a file. This is also true of Gnumeric and
384 OpenOffice.Org Calc.
385
386 Spreadsheet::WriteExcel takes advantage of this fact to omit some
387 records in order to minimise the amount of data stored in memory and to
388 simplify and speed up the writing of files. However, some third party
389 applications that read Excel files often expect certain records to be
390 present. In "compatibility mode" Spreadsheet::WriteExcel writes these
391 records and tries to be as close to an Excel generated file as
392 possible.
393
394 Applications that require "compatibility_mode()" are Apache POI, Apple
395 Numbers, and Quickoffice on Nokia, Palm and other devices. You should
396 also use "compatibility_mode()" if your Excel file will be used as an
397 external data source by another Excel file.
398
399 If you encounter other situations that require "compatibility_mode()",
400 please let me know.
401
402 It should be noted that "compatibility_mode()" requires additional data
403 to be stored in memory and additional processing. This incurs a memory
404 and speed penalty and may not be suitable for very large files (>20MB).
405
406 You must call "compatibility_mode()" before calling "add_worksheet()".
407
408 set_properties()
409 The "set_properties" method can be used to set the document properties
410 of the Excel file created by "Spreadsheet::WriteExcel". These
411 properties are visible when you use the "File->Properties" menu option
412 in Excel and are also available to external applications that read or
413 index windows files.
414
415 The properties should be passed as a hash of values as follows:
416
417 $workbook->set_properties(
418 title => 'This is an example spreadsheet',
419 author => 'John McNamara',
420 comments => 'Created with Perl and Spreadsheet::WriteExcel',
421 );
422
423 The properties that can be set are:
424
425 title
426 subject
427 author
428 manager
429 company
430 category
431 keywords
432 comments
433
434 User defined properties are not supported due to effort required.
435
436 In perl 5.8+ you can also pass UTF-8 strings as properties. See
437 "UNICODE IN EXCEL".
438
439 my $smiley = chr 0x263A;
440
441 $workbook->set_properties(
442 subject => "Happy now? $smiley",
443 );
444
445 With older versions of perl you can use a module to convert a non-ASCII
446 string to a binary representation of UTF-8 and then pass an additional
447 "utf8" flag to "set_properties()":
448
449 my $smiley = pack 'H*', 'E298BA';
450
451 $workbook->set_properties(
452 subject => "Happy now? $smiley",
453 utf8 => 1,
454 );
455
456 Usually Spreadsheet::WriteExcel allows you to use UTF-16 with pre 5.8
457 versions of perl. However, document properties don't support UTF-16 for
458 these type of strings.
459
460 In order to promote the usefulness of Perl and the
461 Spreadsheet::WriteExcel module consider adding a comment such as the
462 following when using document properties:
463
464 $workbook->set_properties(
465 ...,
466 comments => 'Created with Perl and Spreadsheet::WriteExcel',
467 ...,
468 );
469
470 This feature requires that the "OLE::Storage_Lite" module is installed
471 (which is usually the case for a standard Spreadsheet::WriteExcel
472 installation). However, this also means that the resulting OLE document
473 may possibly be buggy for files less than 7MB since it hasn't been as
474 rigorously tested in that domain. As a result of this "set_properties"
475 is currently incompatible with Gnumeric for files less than 7MB. This
476 is being investigated. If you encounter any problems with this features
477 let me know.
478
479 For convenience it is possible to pass either a hash or hash ref of
480 arguments to this method.
481
482 See also the "properties.pl" program in the examples directory of the
483 distro.
484
485 define_name()
486 This method is used to defined a name that can be used to represent a
487 value, a single cell or a range of cells in a workbook.
488
489 $workbook->define_name('Exchange_rate', '=0.96');
490 $workbook->define_name('Sales', '=Sheet1!$G$1:$H$10');
491 $workbook->define_name('Sheet2!Sales', '=Sheet2!$G$1:$G$10');
492
493 See the defined_name.pl program in the examples dir of the distro.
494
495 Note: This currently a beta feature. More documentation and examples
496 will be added.
497
498 set_tempdir()
499 For speed and efficiency "Spreadsheet::WriteExcel" stores worksheet
500 data in temporary files prior to assembling the final workbook.
501
502 If Spreadsheet::WriteExcel is unable to create these temporary files it
503 will store the required data in memory. This can be slow for large
504 files.
505
506 The problem occurs mainly with IIS on Windows although it could
507 feasibly occur on Unix systems as well. The problem generally occurs
508 because the default temp file directory is defined as "C:/" or some
509 other directory that IIS doesn't provide write access to.
510
511 To check if this might be a problem on a particular system you can run
512 a simple test program with "-w" or "use warnings". This will generate a
513 warning if the module cannot create the required temporary files:
514
515 #!/usr/bin/perl -w
516
517 use Spreadsheet::WriteExcel;
518
519 my $workbook = Spreadsheet::WriteExcel->new('test.xls');
520 my $worksheet = $workbook->add_worksheet();
521
522 To avoid this problem the "set_tempdir()" method can be used to specify
523 a directory that is accessible for the creation of temporary files.
524
525 The "File::Temp" module is used to create the temporary files.
526 File::Temp uses "File::Spec" to determine an appropriate location for
527 these files such as "/tmp" or "c:\windows\temp". You can find out which
528 directory is used on your system as follows:
529
530 perl -MFile::Spec -le "print File::Spec->tmpdir"
531
532 Even if the default temporary file directory is accessible you may wish
533 to specify an alternative location for security or maintenance reasons:
534
535 $workbook->set_tempdir('/tmp/writeexcel');
536 $workbook->set_tempdir('c:\windows\temp\writeexcel');
537
538 The directory for the temporary file must exist, "set_tempdir()" will
539 not create a new directory.
540
541 One disadvantage of using the "set_tempdir()" method is that on some
542 Windows systems it will limit you to approximately 800 concurrent
543 tempfiles. This means that a single program running on one of these
544 systems will be limited to creating a total of 800 workbook and
545 worksheet objects. You can run multiple, non-concurrent programs to
546 work around this if necessary.
547
548 set_custom_color($index, $red, $green, $blue)
549 The "set_custom_color()" method can be used to override one of the
550 built-in palette values with a more suitable colour.
551
552 The value for $index should be in the range 8..63, see "COLOURS IN
553 EXCEL".
554
555 The default named colours use the following indices:
556
557 8 => black
558 9 => white
559 10 => red
560 11 => lime
561 12 => blue
562 13 => yellow
563 14 => magenta
564 15 => cyan
565 16 => brown
566 17 => green
567 18 => navy
568 20 => purple
569 22 => silver
570 23 => gray
571 33 => pink
572 53 => orange
573
574 A new colour is set using its RGB (red green blue) components. The
575 $red, $green and $blue values must be in the range 0..255. You can
576 determine the required values in Excel using the
577 "Tools->Options->Colors->Modify" dialog.
578
579 The "set_custom_color()" workbook method can also be used with a HTML
580 style "#rrggbb" hex value:
581
582 $workbook->set_custom_color(40, 255, 102, 0 ); # Orange
583 $workbook->set_custom_color(40, 0xFF, 0x66, 0x00); # Same thing
584 $workbook->set_custom_color(40, '#FF6600' ); # Same thing
585
586 my $font = $workbook->add_format(color => 40); # Use the modified colour
587
588 The return value from "set_custom_color()" is the index of the colour
589 that was changed:
590
591 my $ferrari = $workbook->set_custom_color(40, 216, 12, 12);
592
593 my $format = $workbook->add_format(
594 bg_color => $ferrari,
595 pattern => 1,
596 border => 1
597 );
598
599 sheets(0, 1, ...)
600 The "sheets()" method returns a list, or a sliced list, of the
601 worksheets in a workbook.
602
603 If no arguments are passed the method returns a list of all the
604 worksheets in the workbook. This is useful if you want to repeat an
605 operation on each worksheet:
606
607 foreach $worksheet ($workbook->sheets()) {
608 print $worksheet->get_name();
609 }
610
611 You can also specify a slice list to return one or more worksheet
612 objects:
613
614 $worksheet = $workbook->sheets(0);
615 $worksheet->write('A1', 'Hello');
616
617 Or since return value from "sheets()" is a reference to a worksheet
618 object you can write the above example as:
619
620 $workbook->sheets(0)->write('A1', 'Hello');
621
622 The following example returns the first and last worksheet in a
623 workbook:
624
625 foreach $worksheet ($workbook->sheets(0, -1)) {
626 # Do something
627 }
628
629 Array slices are explained in the perldata manpage.
630
631 set_1904()
632 Excel stores dates as real numbers where the integer part stores the
633 number of days since the epoch and the fractional part stores the
634 percentage of the day. The epoch can be either 1900 or 1904. Excel for
635 Windows uses 1900 and Excel for Macintosh uses 1904. However, Excel on
636 either platform will convert automatically between one system and the
637 other.
638
639 Spreadsheet::WriteExcel stores dates in the 1900 format by default. If
640 you wish to change this you can call the "set_1904()" workbook method.
641 You can query the current value by calling the "get_1904()" workbook
642 method. This returns 0 for 1900 and 1 for 1904.
643
644 See also "DATES AND TIME IN EXCEL" for more information about working
645 with Excel's date system.
646
647 In general you probably won't need to use "set_1904()".
648
649 set_codepage($codepage)
650 The default code page or character set used by Spreadsheet::WriteExcel
651 is ANSI. This is also the default used by Excel for Windows.
652 Occasionally however it may be necessary to change the code page via
653 the "set_codepage()" method.
654
655 Changing the code page may be required if your are using
656 Spreadsheet::WriteExcel on the Macintosh and you are using characters
657 outside the ASCII 128 character set:
658
659 $workbook->set_codepage(1); # ANSI, MS Windows
660 $workbook->set_codepage(2); # Apple Macintosh
661
662 The "set_codepage()" method is rarely required.
663
665 A new worksheet is created by calling the "add_worksheet()" method from
666 a workbook object:
667
668 $worksheet1 = $workbook->add_worksheet();
669 $worksheet2 = $workbook->add_worksheet();
670
671 The following methods are available through a new worksheet:
672
673 write()
674 write_number()
675 write_string()
676 write_utf16be_string()
677 write_utf16le_string()
678 keep_leading_zeros()
679 write_blank()
680 write_row()
681 write_col()
682 write_date_time()
683 write_url()
684 write_url_range()
685 write_formula()
686 store_formula()
687 repeat_formula()
688 write_comment()
689 show_comments()
690 add_write_handler()
691 insert_image()
692 insert_chart()
693 data_validation()
694 get_name()
695 activate()
696 select()
697 hide()
698 set_first_sheet()
699 protect()
700 set_selection()
701 set_row()
702 set_column()
703 outline_settings()
704 freeze_panes()
705 split_panes()
706 merge_range()
707 set_zoom()
708 right_to_left()
709 hide_zero()
710 set_tab_color()
711 autofilter()
712
713 Cell notation
714 Spreadsheet::WriteExcel supports two forms of notation to designate the
715 position of cells: Row-column notation and A1 notation.
716
717 Row-column notation uses a zero based index for both row and column
718 while A1 notation uses the standard Excel alphanumeric sequence of
719 column letter and 1-based row. For example:
720
721 (0, 0) # The top left cell in row-column notation.
722 ('A1') # The top left cell in A1 notation.
723
724 (1999, 29) # Row-column notation.
725 ('AD2000') # The same cell in A1 notation.
726
727 Row-column notation is useful if you are referring to cells
728 programmatically:
729
730 for my $i (0 .. 9) {
731 $worksheet->write($i, 0, 'Hello'); # Cells A1 to A10
732 }
733
734 A1 notation is useful for setting up a worksheet manually and for
735 working with formulas:
736
737 $worksheet->write('H1', 200);
738 $worksheet->write('H2', '=H1+1');
739
740 In formulas and applicable methods you can also use the "A:A" column
741 notation:
742
743 $worksheet->write('A1', '=SUM(B:B)');
744
745 The "Spreadsheet::WriteExcel::Utility" module that is included in the
746 distro contains helper functions for dealing with A1 notation, for
747 example:
748
749 use Spreadsheet::WriteExcel::Utility;
750
751 ($row, $col) = xl_cell_to_rowcol('C2'); # (1, 2)
752 $str = xl_rowcol_to_cell(1, 2); # C2
753
754 For simplicity, the parameter lists for the worksheet method calls in
755 the following sections are given in terms of row-column notation. In
756 all cases it is also possible to use A1 notation.
757
758 Note: in Excel it is also possible to use a R1C1 notation. This is not
759 supported by Spreadsheet::WriteExcel.
760
761 write($row, $column, $token, $format)
762 Excel makes a distinction between data types such as strings, numbers,
763 blanks, formulas and hyperlinks. To simplify the process of writing
764 data the "write()" method acts as a general alias for several more
765 specific methods:
766
767 write_string()
768 write_number()
769 write_blank()
770 write_formula()
771 write_url()
772 write_row()
773 write_col()
774
775 The general rule is that if the data looks like a something then a
776 something is written. Here are some examples in both row-column and A1
777 notation:
778
779 # Same as:
780 $worksheet->write(0, 0, 'Hello' ); # write_string()
781 $worksheet->write(1, 0, 'One' ); # write_string()
782 $worksheet->write(2, 0, 2 ); # write_number()
783 $worksheet->write(3, 0, 3.00001 ); # write_number()
784 $worksheet->write(4, 0, "" ); # write_blank()
785 $worksheet->write(5, 0, '' ); # write_blank()
786 $worksheet->write(6, 0, undef ); # write_blank()
787 $worksheet->write(7, 0 ); # write_blank()
788 $worksheet->write(8, 0, 'http://www.perl.com/'); # write_url()
789 $worksheet->write('A9', 'ftp://ftp.cpan.org/' ); # write_url()
790 $worksheet->write('A10', 'internal:Sheet1!A1' ); # write_url()
791 $worksheet->write('A11', 'external:c:\foo.xls' ); # write_url()
792 $worksheet->write('A12', '=A3 + 3*A4' ); # write_formula()
793 $worksheet->write('A13', '=SIN(PI()/4)' ); # write_formula()
794 $worksheet->write('A14', \@array ); # write_row()
795 $worksheet->write('A15', [\@array] ); # write_col()
796
797 # And if the keep_leading_zeros property is set:
798 $worksheet->write('A16', '2' ); # write_number()
799 $worksheet->write('A17', '02' ); # write_string()
800 $worksheet->write('A18', '00002' ); # write_string()
801
802 The "looks like" rule is defined by regular expressions:
803
804 "write_number()" if $token is a number based on the following regex:
805 "$token =~ /^([+-]?)(?=\d|\.\d)\d*(\.\d*)?([Ee]([+-]?\d+))?$/".
806
807 "write_string()" if "keep_leading_zeros()" is set and $token is an
808 integer with leading zeros based on the following regex: "$token =~
809 /^0\d+$/".
810
811 "write_blank()" if $token is undef or a blank string: "undef", "" or
812 ''.
813
814 "write_url()" if $token is a http, https, ftp or mailto URL based on
815 the following regexes: "$token =~ m|^[fh]tt?ps?://|" or "$token =~
816 m|^mailto:|".
817
818 "write_url()" if $token is an internal or external sheet reference
819 based on the following regex: "$token =~ m[^(in|ex)ternal:]".
820
821 "write_formula()" if the first character of $token is "=".
822
823 "write_row()" if $token is an array ref.
824
825 "write_col()" if $token is an array ref of array refs.
826
827 "write_string()" if none of the previous conditions apply.
828
829 The $format parameter is optional. It should be a valid Format object,
830 see "CELL FORMATTING":
831
832 my $format = $workbook->add_format();
833 $format->set_bold();
834 $format->set_color('red');
835 $format->set_align('center');
836
837 $worksheet->write(4, 0, 'Hello', $format); # Formatted string
838
839 The write() method will ignore empty strings or "undef" tokens unless a
840 format is also supplied. As such you needn't worry about special
841 handling for empty or "undef" values in your data. See also the
842 "write_blank()" method.
843
844 One problem with the "write()" method is that occasionally data looks
845 like a number but you don't want it treated as a number. For example,
846 zip codes or ID numbers often start with a leading zero. If you write
847 this data as a number then the leading zero(s) will be stripped. You
848 can change this default behaviour by using the "keep_leading_zeros()"
849 method. While this property is in place any integers with leading zeros
850 will be treated as strings and the zeros will be preserved. See the
851 "keep_leading_zeros()" section for a full discussion of this issue.
852
853 You can also add your own data handlers to the "write()" method using
854 "add_write_handler()".
855
856 On systems with "perl 5.8" and later the "write()" method will also
857 handle Unicode strings in "UTF-8" format.
858
859 The "write" methods return:
860
861 0 for success.
862 -1 for insufficient number of arguments.
863 -2 for row or column out of bounds.
864 -3 for string too long.
865
866 write_number($row, $column, $number, $format)
867 Write an integer or a float to the cell specified by $row and $column:
868
869 $worksheet->write_number(0, 0, 123456);
870 $worksheet->write_number('A2', 2.3451);
871
872 See the note about "Cell notation". The $format parameter is optional.
873
874 In general it is sufficient to use the "write()" method.
875
876 write_string($row, $column, $string, $format)
877 Write a string to the cell specified by $row and $column:
878
879 $worksheet->write_string(0, 0, 'Your text here' );
880 $worksheet->write_string('A2', 'or here' );
881
882 The maximum string size is 32767 characters. However the maximum string
883 segment that Excel can display in a cell is 1000. All 32767 characters
884 can be displayed in the formula bar.
885
886 The $format parameter is optional.
887
888 On systems with "perl 5.8" and later the "write()" method will also
889 handle strings in "UTF-8" format. With older perls you can also write
890 Unicode in "UTF16" format via the "write_utf16be_string()" method. See
891 also the "unicode_*.pl" programs in the examples directory of the
892 distro.
893
894 In general it is sufficient to use the "write()" method. However, you
895 may sometimes wish to use the "write_string()" method to write data
896 that looks like a number but that you don't want treated as a number.
897 For example, zip codes or phone numbers:
898
899 # Write as a plain string
900 $worksheet->write_string('A1', '01209');
901
902 However, if the user edits this string Excel may convert it back to a
903 number. To get around this you can use the Excel text format "@":
904
905 # Format as a string. Doesn't change to a number when edited
906 my $format1 = $workbook->add_format(num_format => '@');
907 $worksheet->write_string('A2', '01209', $format1);
908
909 See also the note about "Cell notation".
910
911 write_utf16be_string($row, $column, $string, $format)
912 This method is used to write "UTF-16BE" strings to a cell in Excel. It
913 is functionally the same as the "write_string()" method except that the
914 string should be in "UTF-16BE" Unicode format. It is generally easier,
915 when using Spreadsheet::WriteExcel, to write unicode strings in "UTF-8"
916 format, see "UNICODE IN EXCEL". The "write_utf16be_string()" method is
917 mainly of use in versions of perl prior to 5.8.
918
919 The following is a simple example showing how to write some Unicode
920 strings in "UTF-16BE" format:
921
922 #!/usr/bin/perl -w
923
924
925 use strict;
926 use Spreadsheet::WriteExcel;
927 use Unicode::Map();
928
929 my $workbook = Spreadsheet::WriteExcel->new('utf_16_be.xls');
930 my $worksheet = $workbook->add_worksheet();
931
932 # Increase the column width for clarity
933 $worksheet->set_column('A:A', 25);
934
935
936 # Write a Unicode character
937 #
938 my $smiley = pack 'n', 0x263a;
939
940 # Increase the font size for legibility.
941 my $big_font = $workbook->add_format(size => 72);
942
943 $worksheet->write_utf16be_string('A3', $smiley, $big_font);
944
945
946
947 # Write a phrase in Cyrillic using a hex-encoded string
948 #
949 my $str = pack 'H*', '042d0442043e0020044404400430043704300020043d' .
950 '043000200440044304410441043a043e043c0021';
951
952 $worksheet->write_utf16be_string('A5', $str);
953
954
955
956 # Map a string to UTF-16BE using an external module.
957 #
958 my $map = Unicode::Map->new('ISO-8859-1');
959 my $utf16 = $map->to_unicode('Hello world!');
960
961 $worksheet->write_utf16be_string('A7', $utf16);
962
963 You can convert ASCII encodings to the required "UTF-16BE" format using
964 one of the many Unicode modules on CPAN. For example "Unicode::Map" and
965 "Unicode::String":
966 <http://search.cpan.org/author/MSCHWARTZ/Unicode-Map/Map.pm> and
967 <http://search.cpan.org/author/GAAS/Unicode-String/String.pm>.
968
969 For a full list of the Perl Unicode modules see:
970 <http://search.cpan.org/search?query=unicode&mode=all>.
971
972 "UTF-16BE" is the format most often returned by "Perl" modules that
973 generate "UTF-16". To write "UTF-16" strings in little-endian format
974 use the "write_utf16be_string_le()" method below.
975
976 The "write_utf16be_string()" method was previously called
977 "write_unicode()". That, overly general, name is still supported but
978 deprecated.
979
980 See also the "unicode_*.pl" programs in the examples directory of the
981 distro.
982
983 write_utf16le_string($row, $column, $string, $format)
984 This method is the same as "write_utf16be()" except that the string
985 should be 16-bit characters in little-endian format. This is generally
986 referred to as "UTF-16LE". See "UNICODE IN EXCEL".
987
988 "UTF-16" data can be changed from little-endian to big-endian format
989 (and vice-versa) as follows:
990
991 $utf16be = pack 'n*', unpack 'v*', $utf16le;
992
993 keep_leading_zeros()
994 This method changes the default handling of integers with leading zeros
995 when using the "write()" method.
996
997 The "write()" method uses regular expressions to determine what type of
998 data to write to an Excel worksheet. If the data looks like a number it
999 writes a number using "write_number()". One problem with this approach
1000 is that occasionally data looks like a number but you don't want it
1001 treated as a number.
1002
1003 Zip codes and ID numbers, for example, often start with a leading zero.
1004 If you write this data as a number then the leading zero(s) will be
1005 stripped. This is the also the default behaviour when you enter data
1006 manually in Excel.
1007
1008 To get around this you can use one of three options. Write a formatted
1009 number, write the number as a string or use the "keep_leading_zeros()"
1010 method to change the default behaviour of "write()":
1011
1012 # Implicitly write a number, the leading zero is removed: 1209
1013 $worksheet->write('A1', '01209');
1014
1015 # Write a zero padded number using a format: 01209
1016 my $format1 = $workbook->add_format(num_format => '00000');
1017 $worksheet->write('A2', '01209', $format1);
1018
1019 # Write explicitly as a string: 01209
1020 $worksheet->write_string('A3', '01209');
1021
1022 # Write implicitly as a string: 01209
1023 $worksheet->keep_leading_zeros();
1024 $worksheet->write('A4', '01209');
1025
1026 The above code would generate a worksheet that looked like the
1027 following:
1028
1029 -----------------------------------------------------------
1030 | | A | B | C | D | ...
1031 -----------------------------------------------------------
1032 | 1 | 1209 | | | | ...
1033 | 2 | 01209 | | | | ...
1034 | 3 | 01209 | | | | ...
1035 | 4 | 01209 | | | | ...
1036
1037 The examples are on different sides of the cells due to the fact that
1038 Excel displays strings with a left justification and numbers with a
1039 right justification by default. You can change this by using a format
1040 to justify the data, see "CELL FORMATTING".
1041
1042 It should be noted that if the user edits the data in examples "A3" and
1043 "A4" the strings will revert back to numbers. Again this is Excel's
1044 default behaviour. To avoid this you can use the text format "@":
1045
1046 # Format as a string (01209)
1047 my $format2 = $workbook->add_format(num_format => '@');
1048 $worksheet->write_string('A5', '01209', $format2);
1049
1050 The "keep_leading_zeros()" property is off by default. The
1051 "keep_leading_zeros()" method takes 0 or 1 as an argument. It defaults
1052 to 1 if an argument isn't specified:
1053
1054 $worksheet->keep_leading_zeros(); # Set on
1055 $worksheet->keep_leading_zeros(1); # Set on
1056 $worksheet->keep_leading_zeros(0); # Set off
1057
1058 See also the "add_write_handler()" method.
1059
1060 write_blank($row, $column, $format)
1061 Write a blank cell specified by $row and $column:
1062
1063 $worksheet->write_blank(0, 0, $format);
1064
1065 This method is used to add formatting to a cell which doesn't contain a
1066 string or number value.
1067
1068 Excel differentiates between an "Empty" cell and a "Blank" cell. An
1069 "Empty" cell is a cell which doesn't contain data whilst a "Blank" cell
1070 is a cell which doesn't contain data but does contain formatting. Excel
1071 stores "Blank" cells but ignores "Empty" cells.
1072
1073 As such, if you write an empty cell without formatting it is ignored:
1074
1075 $worksheet->write('A1', undef, $format); # write_blank()
1076 $worksheet->write('A2', undef ); # Ignored
1077
1078 This seemingly uninteresting fact means that you can write arrays of
1079 data without special treatment for undef or empty string values.
1080
1081 See the note about "Cell notation".
1082
1083 write_row($row, $column, $array_ref, $format)
1084 The "write_row()" method can be used to write a 1D or 2D array of data
1085 in one go. This is useful for converting the results of a database
1086 query into an Excel worksheet. You must pass a reference to the array
1087 of data rather than the array itself. The "write()" method is then
1088 called for each element of the data. For example:
1089
1090 @array = ('awk', 'gawk', 'mawk');
1091 $array_ref = \@array;
1092
1093 $worksheet->write_row(0, 0, $array_ref);
1094
1095 # The above example is equivalent to:
1096 $worksheet->write(0, 0, $array[0]);
1097 $worksheet->write(0, 1, $array[1]);
1098 $worksheet->write(0, 2, $array[2]);
1099
1100 Note: For convenience the "write()" method behaves in the same way as
1101 "write_row()" if it is passed an array reference. Therefore the
1102 following two method calls are equivalent:
1103
1104 $worksheet->write_row('A1', $array_ref); # Write a row of data
1105 $worksheet->write( 'A1', $array_ref); # Same thing
1106
1107 As with all of the write methods the $format parameter is optional. If
1108 a format is specified it is applied to all the elements of the data
1109 array.
1110
1111 Array references within the data will be treated as columns. This
1112 allows you to write 2D arrays of data in one go. For example:
1113
1114 @eec = (
1115 ['maggie', 'milly', 'molly', 'may' ],
1116 [13, 14, 15, 16 ],
1117 ['shell', 'star', 'crab', 'stone']
1118 );
1119
1120 $worksheet->write_row('A1', \@eec);
1121
1122 Would produce a worksheet as follows:
1123
1124 -----------------------------------------------------------
1125 | | A | B | C | D | E | ...
1126 -----------------------------------------------------------
1127 | 1 | maggie | 13 | shell | ... | ... | ...
1128 | 2 | milly | 14 | star | ... | ... | ...
1129 | 3 | molly | 15 | crab | ... | ... | ...
1130 | 4 | may | 16 | stone | ... | ... | ...
1131 | 5 | ... | ... | ... | ... | ... | ...
1132 | 6 | ... | ... | ... | ... | ... | ...
1133
1134 To write the data in a row-column order refer to the "write_col()"
1135 method below.
1136
1137 Any "undef" values in the data will be ignored unless a format is
1138 applied to the data, in which case a formatted blank cell will be
1139 written. In either case the appropriate row or column value will still
1140 be incremented.
1141
1142 To find out more about array references refer to "perlref" and
1143 "perlreftut" in the main Perl documentation. To find out more about 2D
1144 arrays or "lists of lists" refer to "perllol".
1145
1146 The "write_row()" method returns the first error encountered when
1147 writing the elements of the data or zero if no errors were encountered.
1148 See the return values described for the "write()" method above.
1149
1150 See also the "write_arrays.pl" program in the "examples" directory of
1151 the distro.
1152
1153 The "write_row()" method allows the following idiomatic conversion of a
1154 text file to an Excel file:
1155
1156 #!/usr/bin/perl -w
1157
1158 use strict;
1159 use Spreadsheet::WriteExcel;
1160
1161 my $workbook = Spreadsheet::WriteExcel->new('file.xls');
1162 my $worksheet = $workbook->add_worksheet();
1163
1164 open INPUT, 'file.txt' or die "Couldn't open file: $!";
1165
1166 $worksheet->write($.-1, 0, [split]) while <INPUT>;
1167
1168 write_col($row, $column, $array_ref, $format)
1169 The "write_col()" method can be used to write a 1D or 2D array of data
1170 in one go. This is useful for converting the results of a database
1171 query into an Excel worksheet. You must pass a reference to the array
1172 of data rather than the array itself. The "write()" method is then
1173 called for each element of the data. For example:
1174
1175 @array = ('awk', 'gawk', 'mawk');
1176 $array_ref = \@array;
1177
1178 $worksheet->write_col(0, 0, $array_ref);
1179
1180 # The above example is equivalent to:
1181 $worksheet->write(0, 0, $array[0]);
1182 $worksheet->write(1, 0, $array[1]);
1183 $worksheet->write(2, 0, $array[2]);
1184
1185 As with all of the write methods the $format parameter is optional. If
1186 a format is specified it is applied to all the elements of the data
1187 array.
1188
1189 Array references within the data will be treated as rows. This allows
1190 you to write 2D arrays of data in one go. For example:
1191
1192 @eec = (
1193 ['maggie', 'milly', 'molly', 'may' ],
1194 [13, 14, 15, 16 ],
1195 ['shell', 'star', 'crab', 'stone']
1196 );
1197
1198 $worksheet->write_col('A1', \@eec);
1199
1200 Would produce a worksheet as follows:
1201
1202 -----------------------------------------------------------
1203 | | A | B | C | D | E | ...
1204 -----------------------------------------------------------
1205 | 1 | maggie | milly | molly | may | ... | ...
1206 | 2 | 13 | 14 | 15 | 16 | ... | ...
1207 | 3 | shell | star | crab | stone | ... | ...
1208 | 4 | ... | ... | ... | ... | ... | ...
1209 | 5 | ... | ... | ... | ... | ... | ...
1210 | 6 | ... | ... | ... | ... | ... | ...
1211
1212 To write the data in a column-row order refer to the "write_row()"
1213 method above.
1214
1215 Any "undef" values in the data will be ignored unless a format is
1216 applied to the data, in which case a formatted blank cell will be
1217 written. In either case the appropriate row or column value will still
1218 be incremented.
1219
1220 As noted above the "write()" method can be used as a synonym for
1221 "write_row()" and "write_row()" handles nested array refs as columns.
1222 Therefore, the following two method calls are equivalent although the
1223 more explicit call to "write_col()" would be preferable for
1224 maintainability:
1225
1226 $worksheet->write_col('A1', $array_ref ); # Write a column of data
1227 $worksheet->write( 'A1', [ $array_ref ]); # Same thing
1228
1229 To find out more about array references refer to "perlref" and
1230 "perlreftut" in the main Perl documentation. To find out more about 2D
1231 arrays or "lists of lists" refer to "perllol".
1232
1233 The "write_col()" method returns the first error encountered when
1234 writing the elements of the data or zero if no errors were encountered.
1235 See the return values described for the "write()" method above.
1236
1237 See also the "write_arrays.pl" program in the "examples" directory of
1238 the distro.
1239
1240 write_date_time($row, $col, $date_string, $format)
1241 The "write_date_time()" method can be used to write a date or time to
1242 the cell specified by $row and $column:
1243
1244 $worksheet->write_date_time('A1', '2004-05-13T23:20', $date_format);
1245
1246 The $date_string should be in the following format:
1247
1248 yyyy-mm-ddThh:mm:ss.sss
1249
1250 This conforms to an ISO8601 date but it should be noted that the full
1251 range of ISO8601 formats are not supported.
1252
1253 The following variations on the $date_string parameter are permitted:
1254
1255 yyyy-mm-ddThh:mm:ss.sss # Standard format
1256 yyyy-mm-ddT # No time
1257 Thh:mm:ss.sss # No date
1258 yyyy-mm-ddThh:mm:ss.sssZ # Additional Z (but not time zones)
1259 yyyy-mm-ddThh:mm:ss # No fractional seconds
1260 yyyy-mm-ddThh:mm # No seconds
1261
1262 Note that the "T" is required in all cases.
1263
1264 A date should always have a $format, otherwise it will appear as a
1265 number, see "DATES AND TIME IN EXCEL" and "CELL FORMATTING". Here is a
1266 typical example:
1267
1268 my $date_format = $workbook->add_format(num_format => 'mm/dd/yy');
1269 $worksheet->write_date_time('A1', '2004-05-13T23:20', $date_format);
1270
1271 Valid dates should be in the range 1900-01-01 to 9999-12-31, for the
1272 1900 epoch and 1904-01-01 to 9999-12-31, for the 1904 epoch. As with
1273 Excel, dates outside these ranges will be written as a string.
1274
1275 See also the date_time.pl program in the "examples" directory of the
1276 distro.
1277
1278 write_url($row, $col, $url, $label, $format)
1279 Write a hyperlink to a URL in the cell specified by $row and $column.
1280 The hyperlink is comprised of two elements: the visible label and the
1281 invisible link. The visible label is the same as the link unless an
1282 alternative label is specified. The parameters $label and the $format
1283 are optional and their position is interchangeable.
1284
1285 The label is written using the "write()" method. Therefore it is
1286 possible to write strings, numbers or formulas as labels.
1287
1288 There are four web style URI's supported: "http://", "https://",
1289 "ftp://" and "mailto:":
1290
1291 $worksheet->write_url(0, 0, 'ftp://www.perl.org/' );
1292 $worksheet->write_url(1, 0, 'http://www.perl.com/', 'Perl home' );
1293 $worksheet->write_url('A3', 'http://www.perl.com/', $format );
1294 $worksheet->write_url('A4', 'http://www.perl.com/', 'Perl', $format);
1295 $worksheet->write_url('A5', 'mailto:jmcnamara@cpan.org' );
1296
1297 There are two local URIs supported: "internal:" and "external:". These
1298 are used for hyperlinks to internal worksheet references or external
1299 workbook and worksheet references:
1300
1301 $worksheet->write_url('A6', 'internal:Sheet2!A1' );
1302 $worksheet->write_url('A7', 'internal:Sheet2!A1', $format );
1303 $worksheet->write_url('A8', 'internal:Sheet2!A1:B2' );
1304 $worksheet->write_url('A9', q{internal:'Sales Data'!A1} );
1305 $worksheet->write_url('A10', 'external:c:\temp\foo.xls' );
1306 $worksheet->write_url('A11', 'external:c:\temp\foo.xls#Sheet2!A1' );
1307 $worksheet->write_url('A12', 'external:..\..\..\foo.xls' );
1308 $worksheet->write_url('A13', 'external:..\..\..\foo.xls#Sheet2!A1' );
1309 $worksheet->write_url('A13', 'external:\\\\NETWORK\share\foo.xls' );
1310
1311 All of the these URI types are recognised by the "write()" method, see
1312 above.
1313
1314 Worksheet references are typically of the form "Sheet1!A1". You can
1315 also refer to a worksheet range using the standard Excel notation:
1316 "Sheet1!A1:B2".
1317
1318 In external links the workbook and worksheet name must be separated by
1319 the "#" character: "external:Workbook.xls#Sheet1!A1'".
1320
1321 You can also link to a named range in the target worksheet. For example
1322 say you have a named range called "my_name" in the workbook
1323 "c:\temp\foo.xls" you could link to it as follows:
1324
1325 $worksheet->write_url('A14', 'external:c:\temp\foo.xls#my_name');
1326
1327 Note, you cannot currently create named ranges with
1328 "Spreadsheet::WriteExcel".
1329
1330 Excel requires that worksheet names containing spaces or non
1331 alphanumeric characters are single quoted as follows "'Sales Data'!A1".
1332 If you need to do this in a single quoted string then you can either
1333 escape the single quotes "\'" or use the quote operator "q{}" as
1334 described in "perlop" in the main Perl documentation.
1335
1336 Links to network files are also supported. MS/Novell Network files
1337 normally begin with two back slashes as follows "\\NETWORK\etc". In
1338 order to generate this in a single or double quoted string you will
1339 have to escape the backslashes, '\\\\NETWORK\etc'.
1340
1341 If you are using double quote strings then you should be careful to
1342 escape anything that looks like a metacharacter. For more information
1343 see "perlfaq5: Why can't I use "C:\temp\foo" in DOS paths?".
1344
1345 Finally, you can avoid most of these quoting problems by using forward
1346 slashes. These are translated internally to backslashes:
1347
1348 $worksheet->write_url('A14', "external:c:/temp/foo.xls" );
1349 $worksheet->write_url('A15', 'external://NETWORK/share/foo.xls' );
1350
1351 See also, the note about "Cell notation".
1352
1353 write_url_range($row1, $col1, $row2, $col2, $url, $string, $format)
1354 This method is essentially the same as the "write_url()" method
1355 described above. The main difference is that you can specify a link for
1356 a range of cells:
1357
1358 $worksheet->write_url(0, 0, 0, 3, 'ftp://www.perl.org/' );
1359 $worksheet->write_url(1, 0, 0, 3, 'http://www.perl.com/', 'Perl home');
1360 $worksheet->write_url('A3:D3', 'internal:Sheet2!A1' );
1361 $worksheet->write_url('A4:D4', 'external:c:\temp\foo.xls' );
1362
1363 This method is generally only required when used in conjunction with
1364 merged cells. See the "merge_range()" method and the "merge" property
1365 of a Format object, "CELL FORMATTING".
1366
1367 There is no way to force this behaviour through the "write()" method.
1368
1369 The parameters $string and the $format are optional and their position
1370 is interchangeable. However, they are applied only to the first cell in
1371 the range.
1372
1373 See also, the note about "Cell notation".
1374
1375 write_formula($row, $column, $formula, $format, $value)
1376 Write a formula or function to the cell specified by $row and $column:
1377
1378 $worksheet->write_formula(0, 0, '=$B$3 + B4' );
1379 $worksheet->write_formula(1, 0, '=SIN(PI()/4)');
1380 $worksheet->write_formula(2, 0, '=SUM(B1:B5)' );
1381 $worksheet->write_formula('A4', '=IF(A3>1,"Yes", "No")' );
1382 $worksheet->write_formula('A5', '=AVERAGE(1, 2, 3, 4)' );
1383 $worksheet->write_formula('A6', '=DATEVALUE("1-Jan-2001")');
1384
1385 See the note about "Cell notation". For more information about writing
1386 Excel formulas see "FORMULAS AND FUNCTIONS IN EXCEL"
1387
1388 See also the section "Improving performance when working with formulas"
1389 and the "store_formula()" and "repeat_formula()" methods.
1390
1391 If required, it is also possible to specify the calculated value of the
1392 formula. This is occasionally necessary when working with non-Excel
1393 applications that don't calculate the value of the formula. The
1394 calculated $value is added at the end of the argument list:
1395
1396 $worksheet->write('A1', '=2+2', $format, 4);
1397
1398 However, this probably isn't something that will ever need to do. If
1399 you do use this feature then do so with care.
1400
1401 store_formula($formula)
1402 The "store_formula()" method is used in conjunction with
1403 "repeat_formula()" to speed up the generation of repeated formulas. See
1404 "Improving performance when working with formulas" in "FORMULAS AND
1405 FUNCTIONS IN EXCEL".
1406
1407 The "store_formula()" method pre-parses a textual representation of a
1408 formula and stores it for use at a later stage by the
1409 "repeat_formula()" method.
1410
1411 "store_formula()" carries the same speed penalty as "write_formula()".
1412 However, in practice it will be used less frequently.
1413
1414 The return value of this method is a scalar that can be thought of as a
1415 reference to a formula.
1416
1417 my $sin = $worksheet->store_formula('=SIN(A1)');
1418 my $cos = $worksheet->store_formula('=COS(A1)');
1419
1420 $worksheet->repeat_formula('B1', $sin, $format, 'A1', 'A2');
1421 $worksheet->repeat_formula('C1', $cos, $format, 'A1', 'A2');
1422
1423 Although "store_formula()" is a worksheet method the return value can
1424 be used in any worksheet:
1425
1426 my $now = $worksheet->store_formula('=NOW()');
1427
1428 $worksheet1->repeat_formula('B1', $now);
1429 $worksheet2->repeat_formula('B1', $now);
1430 $worksheet3->repeat_formula('B1', $now);
1431
1432 repeat_formula($row, $col, $formula, $format, ($pattern => $replace, ...))
1433 The "repeat_formula()" method is used in conjunction with
1434 "store_formula()" to speed up the generation of repeated formulas. See
1435 "Improving performance when working with formulas" in "FORMULAS AND
1436 FUNCTIONS IN EXCEL".
1437
1438 In many respects "repeat_formula()" behaves like "write_formula()"
1439 except that it is significantly faster.
1440
1441 The "repeat_formula()" method creates a new formula based on the pre-
1442 parsed tokens returned by "store_formula()". The new formula is
1443 generated by substituting $pattern, $replace pairs in the stored
1444 formula:
1445
1446 my $formula = $worksheet->store_formula('=A1 * 3 + 50');
1447
1448 for my $row (0..99) {
1449 $worksheet->repeat_formula($row, 1, $formula, $format, 'A1', 'A'.($row +1));
1450 }
1451
1452 It should be noted that "repeat_formula()" doesn't modify the tokens.
1453 In the above example the substitution is always made against the
1454 original token, "A1", which doesn't change.
1455
1456 As usual, you can use "undef" if you don't wish to specify a $format:
1457
1458 $worksheet->repeat_formula('B2', $formula, $format, 'A1', 'A2');
1459 $worksheet->repeat_formula('B3', $formula, undef, 'A1', 'A3');
1460
1461 The substitutions are made from left to right and you can use as many
1462 $pattern, $replace pairs as you need. However, each substitution is
1463 made only once:
1464
1465 my $formula = $worksheet->store_formula('=A1 + A1');
1466
1467 # Gives '=B1 + A1'
1468 $worksheet->repeat_formula('B1', $formula, undef, 'A1', 'B1');
1469
1470 # Gives '=B1 + B1'
1471 $worksheet->repeat_formula('B2', $formula, undef, ('A1', 'B1') x 2);
1472
1473 Since the $pattern is interpolated each time that it is used it is
1474 worth using the "qr" operator to quote the pattern. The "qr" operator
1475 is explained in the "perlop" man page.
1476
1477 $worksheet->repeat_formula('B1', $formula, $format, qr/A1/, 'A2');
1478
1479 Care should be taken with the values that are substituted. The formula
1480 returned by "repeat_formula()" contains several other tokens in
1481 addition to those in the formula and these might also match the
1482 pattern that you are trying to replace. In particular you should avoid
1483 substituting a single 0, 1, 2 or 3.
1484
1485 You should also be careful to avoid false matches. For example the
1486 following snippet is meant to change the stored formula in steps from
1487 "=A1 + SIN(A1)" to "=A10 + SIN(A10)".
1488
1489 my $formula = $worksheet->store_formula('=A1 + SIN(A1)');
1490
1491 for my $row (1 .. 10) {
1492 $worksheet->repeat_formula($row -1, 1, $formula, undef,
1493 qw/A1/, 'A' . $row, #! Bad.
1494 qw/A1/, 'A' . $row #! Bad.
1495 );
1496 }
1497
1498 However it contains a bug. In the last iteration of the loop when $row
1499 is 10 the following substitutions will occur:
1500
1501 s/A1/A10/; changes =A1 + SIN(A1) to =A10 + SIN(A1)
1502 s/A1/A10/; changes =A10 + SIN(A1) to =A100 + SIN(A1) # !!
1503
1504 The solution in this case is to use a more explicit match such as
1505 "qw/^A1$/":
1506
1507 $worksheet->repeat_formula($row -1, 1, $formula, undef,
1508 qw/^A1$/, 'A' . $row,
1509 qw/^A1$/, 'A' . $row
1510 );
1511
1512 Another similar problem occurs due to the fact that substitutions are
1513 made in order. For example the following snippet is meant to change the
1514 stored formula from "=A10 + A11" to "=A11 + A12":
1515
1516 my $formula = $worksheet->store_formula('=A10 + A11');
1517
1518 $worksheet->repeat_formula('A1', $formula, undef,
1519 qw/A10/, 'A11', #! Bad.
1520 qw/A11/, 'A12' #! Bad.
1521 );
1522
1523 However, the actual substitution yields "=A12 + A11":
1524
1525 s/A10/A11/; changes =A10 + A11 to =A11 + A11
1526 s/A11/A12/; changes =A11 + A11 to =A12 + A11 # !!
1527
1528 The solution here would be to reverse the order of the substitutions or
1529 to start with a stored formula that won't yield a false match such as
1530 "=X10 + Y11":
1531
1532 my $formula = $worksheet->store_formula('=X10 + Y11');
1533
1534 $worksheet->repeat_formula('A1', $formula, undef,
1535 qw/X10/, 'A11',
1536 qw/Y11/, 'A12'
1537 );
1538
1539 If you think that you have a problem related to a false match you can
1540 check the tokens that you are substituting against as follows.
1541
1542 my $formula = $worksheet->store_formula('=A1*5+4');
1543 print "@$formula\n";
1544
1545 See also the "repeat.pl" program in the "examples" directory of the
1546 distro.
1547
1548 write_comment($row, $column, $string, ...)
1549 The "write_comment()" method is used to add a comment to a cell. A cell
1550 comment is indicated in Excel by a small red triangle in the upper
1551 right-hand corner of the cell. Moving the cursor over the red triangle
1552 will reveal the comment.
1553
1554 The following example shows how to add a comment to a cell:
1555
1556 $worksheet->write (2, 2, 'Hello');
1557 $worksheet->write_comment(2, 2, 'This is a comment.');
1558
1559 As usual you can replace the $row and $column parameters with an "A1"
1560 cell reference. See the note about "Cell notation".
1561
1562 $worksheet->write ('C3', 'Hello');
1563 $worksheet->write_comment('C3', 'This is a comment.');
1564
1565 On systems with "perl 5.8" and later the "write_comment()" method will
1566 also handle strings in "UTF-8" format.
1567
1568 $worksheet->write_comment('C3', "\x{263a}"); # Smiley
1569 $worksheet->write_comment('C4', 'Comment ca va?');
1570
1571 In addition to the basic 3 argument form of "write_comment()" you can
1572 pass in several optional key/value pairs to control the format of the
1573 comment. For example:
1574
1575 $worksheet->write_comment('C3', 'Hello', visible => 1, author => 'Perl');
1576
1577 Most of these options are quite specific and in general the default
1578 comment behaviour will be all that you need. However, should you need
1579 greater control over the format of the cell comment the following
1580 options are available:
1581
1582 encoding
1583 author
1584 author_encoding
1585 visible
1586 x_scale
1587 width
1588 y_scale
1589 height
1590 color
1591 start_cell
1592 start_row
1593 start_col
1594 x_offset
1595 y_offset
1596
1597 Option: encoding
1598 This option is used to indicate that the comment string is encoded
1599 as "UTF-16BE".
1600
1601 my $comment = pack 'n', 0x263a; # UTF-16BE Smiley symbol
1602
1603 $worksheet->write_comment('C3', $comment, encoding => 1);
1604
1605 If you wish to use Unicode characters in the comment string then
1606 the preferred method is to use perl 5.8 and "UTF-8" strings, see
1607 "UNICODE IN EXCEL".
1608
1609 Option: author
1610 This option is used to indicate who the author of the comment is.
1611 Excel displays the author of the comment in the status bar at the
1612 bottom of the worksheet. This is usually of interest in corporate
1613 environments where several people might review and provide comments
1614 to a workbook.
1615
1616 $worksheet->write_comment('C3', 'Atonement', author => 'Ian McEwan');
1617
1618 Option: author_encoding
1619 This option is used to indicate that the author string is encoded
1620 as "UTF-16BE".
1621
1622 Option: visible
1623 This option is used to make a cell comment visible when the
1624 worksheet is opened. The default behaviour in Excel is that
1625 comments are initially hidden. However, it is also possible in
1626 Excel to make individual or all comments visible. In
1627 Spreadsheet::WriteExcel individual comments can be made visible as
1628 follows:
1629
1630 $worksheet->write_comment('C3', 'Hello', visible => 1);
1631
1632 It is possible to make all comments in a worksheet visible using
1633 the "show_comments()" worksheet method (see below). Alternatively,
1634 if all of the cell comments have been made visible you can hide
1635 individual comments:
1636
1637 $worksheet->write_comment('C3', 'Hello', visible => 0);
1638
1639 Option: x_scale
1640 This option is used to set the width of the cell comment box as a
1641 factor of the default width.
1642
1643 $worksheet->write_comment('C3', 'Hello', x_scale => 2);
1644 $worksheet->write_comment('C4', 'Hello', x_scale => 4.2);
1645
1646 Option: width
1647 This option is used to set the width of the cell comment box
1648 explicitly in pixels.
1649
1650 $worksheet->write_comment('C3', 'Hello', width => 200);
1651
1652 Option: y_scale
1653 This option is used to set the height of the cell comment box as a
1654 factor of the default height.
1655
1656 $worksheet->write_comment('C3', 'Hello', y_scale => 2);
1657 $worksheet->write_comment('C4', 'Hello', y_scale => 4.2);
1658
1659 Option: height
1660 This option is used to set the height of the cell comment box
1661 explicitly in pixels.
1662
1663 $worksheet->write_comment('C3', 'Hello', height => 200);
1664
1665 Option: color
1666 This option is used to set the background colour of cell comment
1667 box. You can use one of the named colours recognised by
1668 Spreadsheet::WriteExcel or a colour index. See "COLOURS IN EXCEL".
1669
1670 $worksheet->write_comment('C3', 'Hello', color => 'green');
1671 $worksheet->write_comment('C4', 'Hello', color => 0x35); # Orange
1672
1673 Option: start_cell
1674 This option is used to set the cell in which the comment will
1675 appear. By default Excel displays comments one cell to the right
1676 and one cell above the cell to which the comment relates. However,
1677 you can change this behaviour if you wish. In the following example
1678 the comment which would appear by default in cell "D2" is moved to
1679 "E2".
1680
1681 $worksheet->write_comment('C3', 'Hello', start_cell => 'E2');
1682
1683 Option: start_row
1684 This option is used to set the row in which the comment will
1685 appear. See the "start_cell" option above. The row is zero indexed.
1686
1687 $worksheet->write_comment('C3', 'Hello', start_row => 0);
1688
1689 Option: start_col
1690 This option is used to set the column in which the comment will
1691 appear. See the "start_cell" option above. The column is zero
1692 indexed.
1693
1694 $worksheet->write_comment('C3', 'Hello', start_col => 4);
1695
1696 Option: x_offset
1697 This option is used to change the x offset, in pixels, of a comment
1698 within a cell:
1699
1700 $worksheet->write_comment('C3', $comment, x_offset => 30);
1701
1702 Option: y_offset
1703 This option is used to change the y offset, in pixels, of a comment
1704 within a cell:
1705
1706 $worksheet->write_comment('C3', $comment, x_offset => 30);
1707
1708 You can apply as many of these options as you require.
1709
1710 See also "ROW HEIGHTS AND WORKSHEET OBJECTS".
1711
1712 show_comments()
1713 This method is used to make all cell comments visible when a worksheet
1714 is opened.
1715
1716 Individual comments can be made visible using the "visible" parameter
1717 of the "write_comment" method (see above):
1718
1719 $worksheet->write_comment('C3', 'Hello', visible => 1);
1720
1721 If all of the cell comments have been made visible you can hide
1722 individual comments as follows:
1723
1724 $worksheet->write_comment('C3', 'Hello', visible => 0);
1725
1726 add_write_handler($re, $code_ref)
1727 This method is used to extend the Spreadsheet::WriteExcel write()
1728 method to handle user defined data.
1729
1730 If you refer to the section on "write()" above you will see that it
1731 acts as an alias for several more specific "write_*" methods. However,
1732 it doesn't always act in exactly the way that you would like it to.
1733
1734 One solution is to filter the input data yourself and call the
1735 appropriate "write_*" method. Another approach is to use the
1736 "add_write_handler()" method to add your own automated behaviour to
1737 "write()".
1738
1739 The "add_write_handler()" method take two arguments, $re, a regular
1740 expression to match incoming data and $code_ref a callback function to
1741 handle the matched data:
1742
1743 $worksheet->add_write_handler(qr/^\d\d\d\d$/, \&my_write);
1744
1745 (In the these examples the "qr" operator is used to quote the regular
1746 expression strings, see perlop for more details).
1747
1748 The method is used as follows. say you wished to write 7 digit ID
1749 numbers as a string so that any leading zeros were preserved*, you
1750 could do something like the following:
1751
1752 $worksheet->add_write_handler(qr/^\d{7}$/, \&write_my_id);
1753
1754
1755 sub write_my_id {
1756 my $worksheet = shift;
1757 return $worksheet->write_string(@_);
1758 }
1759
1760 * You could also use the "keep_leading_zeros()" method for this.
1761
1762 Then if you call "write()" with an appropriate string it will be
1763 handled automatically:
1764
1765 # Writes 0000000. It would normally be written as a number; 0.
1766 $worksheet->write('A1', '0000000');
1767
1768 The callback function will receive a reference to the calling worksheet
1769 and all of the other arguments that were passed to "write()". The
1770 callback will see an @_ argument list that looks like the following:
1771
1772 $_[0] A ref to the calling worksheet. *
1773 $_[1] Zero based row number.
1774 $_[2] Zero based column number.
1775 $_[3] A number or string or token.
1776 $_[4] A format ref if any.
1777 $_[5] Any other arguments.
1778 ...
1779
1780 * It is good style to shift this off the list so the @_ is the same
1781 as the argument list seen by write().
1782
1783 Your callback should "return()" the return value of the "write_*"
1784 method that was called or "undef" to indicate that you rejected the
1785 match and want "write()" to continue as normal.
1786
1787 So for example if you wished to apply the previous filter only to ID
1788 values that occur in the first column you could modify your callback
1789 function as follows:
1790
1791 sub write_my_id {
1792 my $worksheet = shift;
1793 my $col = $_[1];
1794
1795 if ($col == 0) {
1796 return $worksheet->write_string(@_);
1797 }
1798 else {
1799 # Reject the match and return control to write()
1800 return undef;
1801 }
1802 }
1803
1804 Now, you will get different behaviour for the first column and other
1805 columns:
1806
1807 $worksheet->write('A1', '0000000'); # Writes 0000000
1808 $worksheet->write('B1', '0000000'); # Writes 0
1809
1810 You may add more than one handler in which case they will be called in
1811 the order that they were added.
1812
1813 Note, the "add_write_handler()" method is particularly suited for
1814 handling dates.
1815
1816 See the "write_handler 1-4" programs in the "examples" directory for
1817 further examples.
1818
1819 insert_image($row, $col, $filename, $x, $y, $scale_x, $scale_y)
1820 This method can be used to insert a image into a worksheet. The image
1821 can be in PNG, JPEG or BMP format. The $x, $y, $scale_x and $scale_y
1822 parameters are optional.
1823
1824 $worksheet1->insert_image('A1', 'perl.bmp');
1825 $worksheet2->insert_image('A1', '../images/perl.bmp');
1826 $worksheet3->insert_image('A1', '.c:\images\perl.bmp');
1827
1828 The parameters $x and $y can be used to specify an offset from the top
1829 left hand corner of the cell specified by $row and $col. The offset
1830 values are in pixels.
1831
1832 $worksheet1->insert_image('A1', 'perl.bmp', 32, 10);
1833
1834 The default width of a cell is 63 pixels. The default height of a cell
1835 is 17 pixels. The pixels offsets can be calculated using the following
1836 relationships:
1837
1838 Wp = int(12We) if We < 1
1839 Wp = int(7We +5) if We >= 1
1840 Hp = int(4/3He)
1841
1842 where:
1843 We is the cell width in Excels units
1844 Wp is width in pixels
1845 He is the cell height in Excels units
1846 Hp is height in pixels
1847
1848 The offsets can be greater than the width or height of the underlying
1849 cell. This can be occasionally useful if you wish to align two or more
1850 images relative to the same cell.
1851
1852 The parameters $scale_x and $scale_y can be used to scale the inserted
1853 image horizontally and vertically:
1854
1855 # Scale the inserted image: width x 2.0, height x 0.8
1856 $worksheet->insert_image('A1', 'perl.bmp', 0, 0, 2, 0.8);
1857
1858 See also the "images.pl" program in the "examples" directory of the
1859 distro.
1860
1861 BMP images must be 24 bit, true colour, bitmaps. In general it is best
1862 to avoid BMP images since they aren't compressed. The older
1863 "insert_bitmap()" method is still supported but deprecated.
1864
1865 See also "ROW HEIGHTS AND WORKSHEET OBJECTS".
1866
1867 insert_chart($row, $col, $chart, $x, $y, $scale_x, $scale_y)
1868 This method can be used to insert a Chart object into a worksheet. The
1869 Chart must be created by the "add_chart()" Workbook method and it must
1870 have the "embedded" option set.
1871
1872 my $chart = $workbook->add_chart( type => 'line', embedded => 1 );
1873
1874 # Configure the chart.
1875 ...
1876
1877 # Insert the chart into the a worksheet.
1878 $worksheet->insert_chart('E2', $chart);
1879
1880 See "add_chart()" for details on how to create the Chart object and
1881 Spreadsheet::WriteExcel::Chart for details on how to configure it. See
1882 also the "chart_*.pl" programs in the examples directory of the distro.
1883
1884 The $x, $y, $scale_x and $scale_y parameters are optional.
1885
1886 The parameters $x and $y can be used to specify an offset from the top
1887 left hand corner of the cell specified by $row and $col. The offset
1888 values are in pixels. See the "insert_image" method above for more
1889 information on sizes.
1890
1891 $worksheet1->insert_chart('E2', $chart, 3, 3);
1892
1893 The parameters $scale_x and $scale_y can be used to scale the inserted
1894 image horizontally and vertically:
1895
1896 # Scale the width by 120% and the height by 150%
1897 $worksheet->insert_chart('E2', $chart, 0, 0, 1.2, 1.5);
1898
1899 The easiest way to calculate the required scaling is to create a test
1900 chart worksheet with Spreadsheet::WriteExcel. Then open the file,
1901 select the chart and drag the corner to get the required size. While
1902 holding down the mouse the scale of the resized chart is shown to the
1903 left of the formula bar.
1904
1905 See also "ROW HEIGHTS AND WORKSHEET OBJECTS".
1906
1907 embed_chart($row, $col, $filename, $x, $y, $scale_x, $scale_y)
1908 This method can be used to insert a externally generated chart into a
1909 worksheet. The chart must first be extracted from an existing Excel
1910 file. This feature is semi-deprecated in favour of the "native" charts
1911 created using "add_chart()". Read "external_charts.txt" (or ".pod") in
1912 the external_charts directory of the distro for a full explanation.
1913
1914 Here is an example:
1915
1916 $worksheet->embed_chart('B2', 'sales_chart.bin');
1917
1918 The $x, $y, $scale_x and $scale_y parameters are optional. See
1919 "insert_chart()" above for details.
1920
1921 data_validation()
1922 The "data_validation()" method is used to construct an Excel data
1923 validation or to limit the user input to a dropdown list of values.
1924
1925 $worksheet->data_validation('B3',
1926 {
1927 validate => 'integer',
1928 criteria => '>',
1929 value => 100,
1930 });
1931
1932 $worksheet->data_validation('B5:B9',
1933 {
1934 validate => 'list',
1935 value => ['open', 'high', 'close'],
1936 });
1937
1938 This method contains a lot of parameters and is described in detail in
1939 a separate section "DATA VALIDATION IN EXCEL".
1940
1941 See also the "data_validate.pl" program in the examples directory of
1942 the distro
1943
1944 get_name()
1945 The "get_name()" method is used to retrieve the name of a worksheet.
1946 For example:
1947
1948 foreach my $sheet ($workbook->sheets()) {
1949 print $sheet->get_name();
1950 }
1951
1952 For reasons related to the design of Spreadsheet::WriteExcel and to the
1953 internals of Excel there is no "set_name()" method. The only way to set
1954 the worksheet name is via the "add_worksheet()" method.
1955
1956 activate()
1957 The "activate()" method is used to specify which worksheet is initially
1958 visible in a multi-sheet workbook:
1959
1960 $worksheet1 = $workbook->add_worksheet('To');
1961 $worksheet2 = $workbook->add_worksheet('the');
1962 $worksheet3 = $workbook->add_worksheet('wind');
1963
1964 $worksheet3->activate();
1965
1966 This is similar to the Excel VBA activate method. More than one
1967 worksheet can be selected via the "select()" method, see below, however
1968 only one worksheet can be active.
1969
1970 The default active worksheet is the first worksheet.
1971
1972 select()
1973 The "select()" method is used to indicate that a worksheet is selected
1974 in a multi-sheet workbook:
1975
1976 $worksheet1->activate();
1977 $worksheet2->select();
1978 $worksheet3->select();
1979
1980 A selected worksheet has its tab highlighted. Selecting worksheets is a
1981 way of grouping them together so that, for example, several worksheets
1982 could be printed in one go. A worksheet that has been activated via the
1983 "activate()" method will also appear as selected.
1984
1985 hide()
1986 The "hide()" method is used to hide a worksheet:
1987
1988 $worksheet2->hide();
1989
1990 You may wish to hide a worksheet in order to avoid confusing a user
1991 with intermediate data or calculations.
1992
1993 A hidden worksheet can not be activated or selected so this method is
1994 mutually exclusive with the "activate()" and "select()" methods. In
1995 addition, since the first worksheet will default to being the active
1996 worksheet, you cannot hide the first worksheet without activating
1997 another sheet:
1998
1999 $worksheet2->activate();
2000 $worksheet1->hide();
2001
2002 set_first_sheet()
2003 The "activate()" method determines which worksheet is initially
2004 selected. However, if there are a large number of worksheets the
2005 selected worksheet may not appear on the screen. To avoid this you can
2006 select which is the leftmost visible worksheet using
2007 "set_first_sheet()":
2008
2009 for (1..20) {
2010 $workbook->add_worksheet;
2011 }
2012
2013 $worksheet21 = $workbook->add_worksheet();
2014 $worksheet22 = $workbook->add_worksheet();
2015
2016 $worksheet21->set_first_sheet();
2017 $worksheet22->activate();
2018
2019 This method is not required very often. The default value is the first
2020 worksheet.
2021
2022 protect($password)
2023 The "protect()" method is used to protect a worksheet from
2024 modification:
2025
2026 $worksheet->protect();
2027
2028 It can be turned off in Excel via the "Tools->Protection->Unprotect
2029 Sheet" menu command.
2030
2031 The "protect()" method also has the effect of enabling a cell's
2032 "locked" and "hidden" properties if they have been set. A "locked" cell
2033 cannot be edited. A "hidden" cell will display the results of a formula
2034 but not the formula itself. In Excel a cell's locked property is on by
2035 default.
2036
2037 # Set some format properties
2038 my $unlocked = $workbook->add_format(locked => 0);
2039 my $hidden = $workbook->add_format(hidden => 1);
2040
2041 # Enable worksheet protection
2042 $worksheet->protect();
2043
2044 # This cell cannot be edited, it is locked by default
2045 $worksheet->write('A1', '=1+2');
2046
2047 # This cell can be edited
2048 $worksheet->write('A2', '=1+2', $unlocked);
2049
2050 # The formula in this cell isn't visible
2051 $worksheet->write('A3', '=1+2', $hidden);
2052
2053 See also the "set_locked" and "set_hidden" format methods in "CELL
2054 FORMATTING".
2055
2056 You can optionally add a password to the worksheet protection:
2057
2058 $worksheet->protect('drowssap');
2059
2060 Note, the worksheet level password in Excel provides very weak
2061 protection. It does not encrypt your data in any way and it is very
2062 easy to deactivate. Therefore, do not use the above method if you wish
2063 to protect sensitive data or calculations. However, before you get
2064 worried, Excel's own workbook level password protection does provide
2065 strong encryption in Excel 97+. For technical reasons this will never
2066 be supported by "Spreadsheet::WriteExcel".
2067
2068 set_selection($first_row, $first_col, $last_row, $last_col)
2069 This method can be used to specify which cell or cells are selected in
2070 a worksheet. The most common requirement is to select a single cell, in
2071 which case $last_row and $last_col can be omitted. The active cell
2072 within a selected range is determined by the order in which $first and
2073 $last are specified. It is also possible to specify a cell or a range
2074 using A1 notation. See the note about "Cell notation".
2075
2076 Examples:
2077
2078 $worksheet1->set_selection(3, 3); # 1. Cell D4.
2079 $worksheet2->set_selection(3, 3, 6, 6); # 2. Cells D4 to G7.
2080 $worksheet3->set_selection(6, 6, 3, 3); # 3. Cells G7 to D4.
2081 $worksheet4->set_selection('D4'); # Same as 1.
2082 $worksheet5->set_selection('D4:G7'); # Same as 2.
2083 $worksheet6->set_selection('G7:D4'); # Same as 3.
2084
2085 The default cell selections is (0, 0), 'A1'.
2086
2087 set_row($row, $height, $format, $hidden, $level, $collapsed)
2088 This method can be used to change the default properties of a row. All
2089 parameters apart from $row are optional.
2090
2091 The most common use for this method is to change the height of a row:
2092
2093 $worksheet->set_row(0, 20); # Row 1 height set to 20
2094
2095 If you wish to set the format without changing the height you can pass
2096 "undef" as the height parameter:
2097
2098 $worksheet->set_row(0, undef, $format);
2099
2100 The $format parameter will be applied to any cells in the row that
2101 don't have a format. For example
2102
2103 $worksheet->set_row(0, undef, $format1); # Set the format for row 1
2104 $worksheet->write('A1', 'Hello'); # Defaults to $format1
2105 $worksheet->write('B1', 'Hello', $format2); # Keeps $format2
2106
2107 If you wish to define a row format in this way you should call the
2108 method before any calls to "write()". Calling it afterwards will
2109 overwrite any format that was previously specified.
2110
2111 The $hidden parameter should be set to 1 if you wish to hide a row.
2112 This can be used, for example, to hide intermediary steps in a
2113 complicated calculation:
2114
2115 $worksheet->set_row(0, 20, $format, 1);
2116 $worksheet->set_row(1, undef, undef, 1);
2117
2118 The $level parameter is used to set the outline level of the row.
2119 Outlines are described in "OUTLINES AND GROUPING IN EXCEL". Adjacent
2120 rows with the same outline level are grouped together into a single
2121 outline.
2122
2123 The following example sets an outline level of 1 for rows 1 and 2
2124 (zero-indexed):
2125
2126 $worksheet->set_row(1, undef, undef, 0, 1);
2127 $worksheet->set_row(2, undef, undef, 0, 1);
2128
2129 The $hidden parameter can also be used to hide collapsed outlined rows
2130 when used in conjunction with the $level parameter.
2131
2132 $worksheet->set_row(1, undef, undef, 1, 1);
2133 $worksheet->set_row(2, undef, undef, 1, 1);
2134
2135 For collapsed outlines you should also indicate which row has the
2136 collapsed "+" symbol using the optional $collapsed parameter.
2137
2138 $worksheet->set_row(3, undef, undef, 0, 0, 1);
2139
2140 For a more complete example see the "outline.pl" and
2141 "outline_collapsed.pl" programs in the examples directory of the
2142 distro.
2143
2144 Excel allows up to 7 outline levels. Therefore the $level parameter
2145 should be in the range "0 <= $level <= 7".
2146
2147 set_column($first_col, $last_col, $width, $format, $hidden, $level,
2148 $collapsed)
2149 This method can be used to change the default properties of a single
2150 column or a range of columns. All parameters apart from $first_col and
2151 $last_col are optional.
2152
2153 If "set_column()" is applied to a single column the value of $first_col
2154 and $last_col should be the same. In the case where $last_col is zero
2155 it is set to the same value as $first_col.
2156
2157 It is also possible, and generally clearer, to specify a column range
2158 using the form of A1 notation used for columns. See the note about
2159 "Cell notation".
2160
2161 Examples:
2162
2163 $worksheet->set_column(0, 0, 20); # Column A width set to 20
2164 $worksheet->set_column(1, 3, 30); # Columns B-D width set to 30
2165 $worksheet->set_column('E:E', 20); # Column E width set to 20
2166 $worksheet->set_column('F:H', 30); # Columns F-H width set to 30
2167
2168 The width corresponds to the column width value that is specified in
2169 Excel. It is approximately equal to the length of a string in the
2170 default font of Arial 10. Unfortunately, there is no way to specify
2171 "AutoFit" for a column in the Excel file format. This feature is only
2172 available at runtime from within Excel.
2173
2174 As usual the $format parameter is optional, for additional information,
2175 see "CELL FORMATTING". If you wish to set the format without changing
2176 the width you can pass "undef" as the width parameter:
2177
2178 $worksheet->set_column(0, 0, undef, $format);
2179
2180 The $format parameter will be applied to any cells in the column that
2181 don't have a format. For example
2182
2183 $worksheet->set_column('A:A', undef, $format1); # Set format for col 1
2184 $worksheet->write('A1', 'Hello'); # Defaults to $format1
2185 $worksheet->write('A2', 'Hello', $format2); # Keeps $format2
2186
2187 If you wish to define a column format in this way you should call the
2188 method before any calls to "write()". If you call it afterwards it
2189 won't have any effect.
2190
2191 A default row format takes precedence over a default column format
2192
2193 $worksheet->set_row(0, undef, $format1); # Set format for row 1
2194 $worksheet->set_column('A:A', undef, $format2); # Set format for col 1
2195 $worksheet->write('A1', 'Hello'); # Defaults to $format1
2196 $worksheet->write('A2', 'Hello'); # Defaults to $format2
2197
2198 The $hidden parameter should be set to 1 if you wish to hide a column.
2199 This can be used, for example, to hide intermediary steps in a
2200 complicated calculation:
2201
2202 $worksheet->set_column('D:D', 20, $format, 1);
2203 $worksheet->set_column('E:E', undef, undef, 1);
2204
2205 The $level parameter is used to set the outline level of the column.
2206 Outlines are described in "OUTLINES AND GROUPING IN EXCEL". Adjacent
2207 columns with the same outline level are grouped together into a single
2208 outline.
2209
2210 The following example sets an outline level of 1 for columns B to G:
2211
2212 $worksheet->set_column('B:G', undef, undef, 0, 1);
2213
2214 The $hidden parameter can also be used to hide collapsed outlined
2215 columns when used in conjunction with the $level parameter.
2216
2217 $worksheet->set_column('B:G', undef, undef, 1, 1);
2218
2219 For collapsed outlines you should also indicate which row has the
2220 collapsed "+" symbol using the optional $collapsed parameter.
2221
2222 $worksheet->set_column('H:H', undef, undef, 0, 0, 1);
2223
2224 For a more complete example see the "outline.pl" and
2225 "outline_collapsed.pl" programs in the examples directory of the
2226 distro.
2227
2228 Excel allows up to 7 outline levels. Therefore the $level parameter
2229 should be in the range "0 <= $level <= 7".
2230
2231 outline_settings($visible, $symbols_below, $symbols_right, $auto_style)
2232 The "outline_settings()" method is used to control the appearance of
2233 outlines in Excel. Outlines are described in "OUTLINES AND GROUPING IN
2234 EXCEL".
2235
2236 The $visible parameter is used to control whether or not outlines are
2237 visible. Setting this parameter to 0 will cause all outlines on the
2238 worksheet to be hidden. They can be unhidden in Excel by means of the
2239 "Show Outline Symbols" command button. The default setting is 1 for
2240 visible outlines.
2241
2242 $worksheet->outline_settings(0);
2243
2244 The $symbols_below parameter is used to control whether the row outline
2245 symbol will appear above or below the outline level bar. The default
2246 setting is 1 for symbols to appear below the outline level bar.
2247
2248 The "symbols_right" parameter is used to control whether the column
2249 outline symbol will appear to the left or the right of the outline
2250 level bar. The default setting is 1 for symbols to appear to the right
2251 of the outline level bar.
2252
2253 The $auto_style parameter is used to control whether the automatic
2254 outline generator in Excel uses automatic styles when creating an
2255 outline. This has no effect on a file generated by
2256 "Spreadsheet::WriteExcel" but it does have an effect on how the
2257 worksheet behaves after it is created. The default setting is 0 for
2258 "Automatic Styles" to be turned off.
2259
2260 The default settings for all of these parameters correspond to Excel's
2261 default parameters.
2262
2263 The worksheet parameters controlled by "outline_settings()" are rarely
2264 used.
2265
2266 freeze_panes($row, $col, $top_row, $left_col)
2267 This method can be used to divide a worksheet into horizontal or
2268 vertical regions known as panes and to also "freeze" these panes so
2269 that the splitter bars are not visible. This is the same as the
2270 "Window->Freeze Panes" menu command in Excel
2271
2272 The parameters $row and $col are used to specify the location of the
2273 split. It should be noted that the split is specified at the top or
2274 left of a cell and that the method uses zero based indexing. Therefore
2275 to freeze the first row of a worksheet it is necessary to specify the
2276 split at row 2 (which is 1 as the zero-based index). This might lead
2277 you to think that you are using a 1 based index but this is not the
2278 case.
2279
2280 You can set one of the $row and $col parameters as zero if you do not
2281 want either a vertical or horizontal split.
2282
2283 Examples:
2284
2285 $worksheet->freeze_panes(1, 0); # Freeze the first row
2286 $worksheet->freeze_panes('A2'); # Same using A1 notation
2287 $worksheet->freeze_panes(0, 1); # Freeze the first column
2288 $worksheet->freeze_panes('B1'); # Same using A1 notation
2289 $worksheet->freeze_panes(1, 2); # Freeze first row and first 2 columns
2290 $worksheet->freeze_panes('C2'); # Same using A1 notation
2291
2292 The parameters $top_row and $left_col are optional. They are used to
2293 specify the top-most or left-most visible row or column in the
2294 scrolling region of the panes. For example to freeze the first row and
2295 to have the scrolling region begin at row twenty:
2296
2297 $worksheet->freeze_panes(1, 0, 20, 0);
2298
2299 You cannot use A1 notation for the $top_row and $left_col parameters.
2300
2301 See also the "panes.pl" program in the "examples" directory of the
2302 distribution.
2303
2304 split_panes($y, $x, $top_row, $left_col)
2305 This method can be used to divide a worksheet into horizontal or
2306 vertical regions known as panes. This method is different from the
2307 "freeze_panes()" method in that the splits between the panes will be
2308 visible to the user and each pane will have its own scroll bars.
2309
2310 The parameters $y and $x are used to specify the vertical and
2311 horizontal position of the split. The units for $y and $x are the same
2312 as those used by Excel to specify row height and column width. However,
2313 the vertical and horizontal units are different from each other.
2314 Therefore you must specify the $y and $x parameters in terms of the row
2315 heights and column widths that you have set or the default values which
2316 are 12.75 for a row and 8.43 for a column.
2317
2318 You can set one of the $y and $x parameters as zero if you do not want
2319 either a vertical or horizontal split. The parameters $top_row and
2320 $left_col are optional. They are used to specify the top-most or left-
2321 most visible row or column in the bottom-right pane.
2322
2323 Example:
2324
2325 $worksheet->split_panes(12.75, 0, 1, 0); # First row
2326 $worksheet->split_panes(0, 8.43, 0, 1); # First column
2327 $worksheet->split_panes(12.75, 8.43, 1, 1); # First row and column
2328
2329 You cannot use A1 notation with this method.
2330
2331 See also the "freeze_panes()" method and the "panes.pl" program in the
2332 "examples" directory of the distribution.
2333
2334 Note: This "split_panes()" method was called "thaw_panes()" in older
2335 versions. The older name is still available for backwards
2336 compatibility.
2337
2338 merge_range($first_row, $first_col, $last_row, $last_col, $token, $format,
2339 $utf_16_be)
2340 Merging cells can be achieved by setting the "merge" property of a
2341 Format object, see "CELL FORMATTING". However, this only allows simple
2342 Excel5 style horizontal merging which Excel refers to as "center across
2343 selection".
2344
2345 The "merge_range()" method allows you to do Excel97+ style formatting
2346 where the cells can contain other types of alignment in addition to the
2347 merging:
2348
2349 my $format = $workbook->add_format(
2350 border => 6,
2351 valign => 'vcenter',
2352 align => 'center',
2353 );
2354
2355 $worksheet->merge_range('B3:D4', 'Vertical and horizontal', $format);
2356
2357 WARNING. The format object that is used with a "merge_range()" method
2358 call is marked internally as being associated with a merged range. It
2359 is a fatal error to use a merged format in a non-merged cell. Instead
2360 you should use separate formats for merged and non-merged cells. This
2361 restriction will be removed in a future release.
2362
2363 The $utf_16_be parameter is optional, see below.
2364
2365 "merge_range()" writes its $token argument using the worksheet
2366 "write()" method. Therefore it will handle numbers, strings, formulas
2367 or urls as required.
2368
2369 Setting the "merge" property of the format isn't required when you are
2370 using "merge_range()". In fact using it will exclude the use of any
2371 other horizontal alignment option.
2372
2373 On systems with "perl 5.8" and later the "merge_range()" method will
2374 also handle strings in "UTF-8" format.
2375
2376 $worksheet->merge_range('B3:D4', "\x{263a}", $format); # Smiley
2377
2378 On earlier Perl systems your can specify "UTF-16BE" worksheet names
2379 using an additional optional parameter:
2380
2381 my $str = pack 'n', 0x263a;
2382 $worksheet->merge_range('B3:D4', $str, $format, 1); # Smiley
2383
2384 The full possibilities of this method are shown in the "merge3.pl" to
2385 "merge6.pl" programs in the "examples" directory of the distribution.
2386
2387 set_zoom($scale)
2388 Set the worksheet zoom factor in the range "10 <= $scale <= 400":
2389
2390 $worksheet1->set_zoom(50);
2391 $worksheet2->set_zoom(75);
2392 $worksheet3->set_zoom(300);
2393 $worksheet4->set_zoom(400);
2394
2395 The default zoom factor is 100. You cannot zoom to "Selection" because
2396 it is calculated by Excel at run-time.
2397
2398 Note, "set_zoom()" does not affect the scale of the printed page. For
2399 that you should use "set_print_scale()".
2400
2401 right_to_left()
2402 The "right_to_left()" method is used to change the default direction of
2403 the worksheet from left-to-right, with the A1 cell in the top left, to
2404 right-to-left, with the he A1 cell in the top right.
2405
2406 $worksheet->right_to_left();
2407
2408 This is useful when creating Arabic, Hebrew or other near or far
2409 eastern worksheets that use right-to-left as the default direction.
2410
2411 hide_zero()
2412 The "hide_zero()" method is used to hide any zero values that appear in
2413 cells.
2414
2415 $worksheet->hide_zero();
2416
2417 In Excel this option is found under Tools->Options->View.
2418
2419 set_tab_color()
2420 The "set_tab_color()" method is used to change the colour of the
2421 worksheet tab. This feature is only available in Excel 2002 and later.
2422 You can use one of the standard colour names provided by the Format
2423 object or a colour index. See "COLOURS IN EXCEL" and the
2424 "set_custom_color()" method.
2425
2426 $worksheet1->set_tab_color('red');
2427 $worksheet2->set_tab_color(0x0C);
2428
2429 See the "tab_colors.pl" program in the examples directory of the
2430 distro.
2431
2432 autofilter($first_row, $first_col, $last_row, $last_col)
2433 This method allows an autofilter to be added to a worksheet. An
2434 autofilter is a way of adding drop down lists to the headers of a 2D
2435 range of worksheet data. This in turn allow users to filter the data
2436 based on simple criteria so that some data is shown and some is hidden.
2437
2438 To add an autofilter to a worksheet:
2439
2440 $worksheet->autofilter(0, 0, 10, 3);
2441 $worksheet->autofilter('A1:D11'); # Same as above in A1 notation.
2442
2443 Filter conditions can be applied using the "filter_column()" method.
2444
2445 See the "autofilter.pl" program in the examples directory of the distro
2446 for a more detailed example.
2447
2448 filter_column($column, $expression)
2449 The "filter_column" method can be used to filter columns in a
2450 autofilter range based on simple conditions.
2451
2452 NOTE: It isn't sufficient to just specify the filter condition. You
2453 must also hide any rows that don't match the filter condition. Rows are
2454 hidden using the "set_row()" "visible" parameter.
2455 "Spreadsheet::WriteExcel" cannot do this automatically since it isn't
2456 part of the file format. See the "autofilter.pl" program in the
2457 examples directory of the distro for an example.
2458
2459 The conditions for the filter are specified using simple expressions:
2460
2461 $worksheet->filter_column('A', 'x > 2000');
2462 $worksheet->filter_column('B', 'x > 2000 and x < 5000');
2463
2464 The $column parameter can either be a zero indexed column number or a
2465 string column name.
2466
2467 The following operators are available:
2468
2469 Operator Synonyms
2470 == = eq =~
2471 != <> ne !=
2472 >
2473 <
2474 >=
2475 <=
2476
2477 and &&
2478 or ||
2479
2480 The operator synonyms are just syntactic sugar to make you more
2481 comfortable using the expressions. It is important to remember that the
2482 expressions will be interpreted by Excel and not by perl.
2483
2484 An expression can comprise a single statement or two statements
2485 separated by the "and" and "or" operators. For example:
2486
2487 'x < 2000'
2488 'x > 2000'
2489 'x == 2000'
2490 'x > 2000 and x < 5000'
2491 'x == 2000 or x == 5000'
2492
2493 Filtering of blank or non-blank data can be achieved by using a value
2494 of "Blanks" or "NonBlanks" in the expression:
2495
2496 'x == Blanks'
2497 'x == NonBlanks'
2498
2499 Top 10 style filters can be specified using a expression like the
2500 following:
2501
2502 Top|Bottom 1-500 Items|%
2503
2504 For example:
2505
2506 'Top 10 Items'
2507 'Bottom 5 Items'
2508 'Top 25 %'
2509 'Bottom 50 %'
2510
2511 Excel also allows some simple string matching operations:
2512
2513 'x =~ b*' # begins with b
2514 'x !~ b*' # doesn't begin with b
2515 'x =~ *b' # ends with b
2516 'x !~ *b' # doesn't end with b
2517 'x =~ *b*' # contains b
2518 'x !~ *b*' # doesn't contains b
2519
2520 You can also use "*" to match any character or number and "?" to match
2521 any single character or number. No other regular expression quantifier
2522 is supported by Excel's filters. Excel's regular expression characters
2523 can be escaped using "~".
2524
2525 The placeholder variable "x" in the above examples can be replaced by
2526 any simple string. The actual placeholder name is ignored internally so
2527 the following are all equivalent:
2528
2529 'x < 2000'
2530 'col < 2000'
2531 'Price < 2000'
2532
2533 Also, note that a filter condition can only be applied to a column in a
2534 range specified by the "autofilter()" Worksheet method.
2535
2536 See the "autofilter.pl" program in the examples directory of the distro
2537 for a more detailed example.
2538
2540 Page set-up methods affect the way that a worksheet looks when it is
2541 printed. They control features such as page headers and footers and
2542 margins. These methods are really just standard worksheet methods. They
2543 are documented here in a separate section for the sake of clarity.
2544
2545 The following methods are available for page set-up:
2546
2547 set_landscape()
2548 set_portrait()
2549 set_page_view()
2550 set_paper()
2551 center_horizontally()
2552 center_vertically()
2553 set_margins()
2554 set_header()
2555 set_footer()
2556 repeat_rows()
2557 repeat_columns()
2558 hide_gridlines()
2559 print_row_col_headers()
2560 print_area()
2561 print_across()
2562 fit_to_pages()
2563 set_start_page()
2564 set_print_scale()
2565 set_h_pagebreaks()
2566 set_v_pagebreaks()
2567
2568 A common requirement when working with Spreadsheet::WriteExcel is to
2569 apply the same page set-up features to all of the worksheets in a
2570 workbook. To do this you can use the "sheets()" method of the
2571 "workbook" class to access the array of worksheets in a workbook:
2572
2573 foreach $worksheet ($workbook->sheets()) {
2574 $worksheet->set_landscape();
2575 }
2576
2577 set_landscape()
2578 This method is used to set the orientation of a worksheet's printed
2579 page to landscape:
2580
2581 $worksheet->set_landscape(); # Landscape mode
2582
2583 set_portrait()
2584 This method is used to set the orientation of a worksheet's printed
2585 page to portrait. The default worksheet orientation is portrait, so you
2586 won't generally need to call this method.
2587
2588 $worksheet->set_portrait(); # Portrait mode
2589
2590 set_page_view()
2591 This method is used to display the worksheet in "Page View" mode. This
2592 is currently only supported by Mac Excel, where it is the default.
2593
2594 $worksheet->set_page_view();
2595
2596 set_paper($index)
2597 This method is used to set the paper format for the printed output of a
2598 worksheet. The following paper styles are available:
2599
2600 Index Paper format Paper size
2601 ===== ============ ==========
2602 0 Printer default -
2603 1 Letter 8 1/2 x 11 in
2604 2 Letter Small 8 1/2 x 11 in
2605 3 Tabloid 11 x 17 in
2606 4 Ledger 17 x 11 in
2607 5 Legal 8 1/2 x 14 in
2608 6 Statement 5 1/2 x 8 1/2 in
2609 7 Executive 7 1/4 x 10 1/2 in
2610 8 A3 297 x 420 mm
2611 9 A4 210 x 297 mm
2612 10 A4 Small 210 x 297 mm
2613 11 A5 148 x 210 mm
2614 12 B4 250 x 354 mm
2615 13 B5 182 x 257 mm
2616 14 Folio 8 1/2 x 13 in
2617 15 Quarto 215 x 275 mm
2618 16 - 10x14 in
2619 17 - 11x17 in
2620 18 Note 8 1/2 x 11 in
2621 19 Envelope 9 3 7/8 x 8 7/8
2622 20 Envelope 10 4 1/8 x 9 1/2
2623 21 Envelope 11 4 1/2 x 10 3/8
2624 22 Envelope 12 4 3/4 x 11
2625 23 Envelope 14 5 x 11 1/2
2626 24 C size sheet -
2627 25 D size sheet -
2628 26 E size sheet -
2629 27 Envelope DL 110 x 220 mm
2630 28 Envelope C3 324 x 458 mm
2631 29 Envelope C4 229 x 324 mm
2632 30 Envelope C5 162 x 229 mm
2633 31 Envelope C6 114 x 162 mm
2634 32 Envelope C65 114 x 229 mm
2635 33 Envelope B4 250 x 353 mm
2636 34 Envelope B5 176 x 250 mm
2637 35 Envelope B6 176 x 125 mm
2638 36 Envelope 110 x 230 mm
2639 37 Monarch 3.875 x 7.5 in
2640 38 Envelope 3 5/8 x 6 1/2 in
2641 39 Fanfold 14 7/8 x 11 in
2642 40 German Std Fanfold 8 1/2 x 12 in
2643 41 German Legal Fanfold 8 1/2 x 13 in
2644
2645 Note, it is likely that not all of these paper types will be available
2646 to the end user since it will depend on the paper formats that the
2647 user's printer supports. Therefore, it is best to stick to standard
2648 paper types.
2649
2650 $worksheet->set_paper(1); # US Letter
2651 $worksheet->set_paper(9); # A4
2652
2653 If you do not specify a paper type the worksheet will print using the
2654 printer's default paper.
2655
2656 center_horizontally()
2657 Center the worksheet data horizontally between the margins on the
2658 printed page:
2659
2660 $worksheet->center_horizontally();
2661
2662 center_vertically()
2663 Center the worksheet data vertically between the margins on the printed
2664 page:
2665
2666 $worksheet->center_vertically();
2667
2668 set_margins($inches)
2669 There are several methods available for setting the worksheet margins
2670 on the printed page:
2671
2672 set_margins() # Set all margins to the same value
2673 set_margins_LR() # Set left and right margins to the same value
2674 set_margins_TB() # Set top and bottom margins to the same value
2675 set_margin_left(); # Set left margin
2676 set_margin_right(); # Set right margin
2677 set_margin_top(); # Set top margin
2678 set_margin_bottom(); # Set bottom margin
2679
2680 All of these methods take a distance in inches as a parameter. Note: 1
2681 inch = 25.4mm. ;-) The default left and right margin is 0.75 inch. The
2682 default top and bottom margin is 1.00 inch.
2683
2684 set_header($string, $margin)
2685 Headers and footers are generated using a $string which is a
2686 combination of plain text and control characters. The $margin parameter
2687 is optional.
2688
2689 The available control character are:
2690
2691 Control Category Description
2692 ======= ======== ===========
2693 &L Justification Left
2694 &C Center
2695 &R Right
2696
2697 &P Information Page number
2698 &N Total number of pages
2699 &D Date
2700 &T Time
2701 &F File name
2702 &A Worksheet name
2703 &Z Workbook path
2704
2705 &fontsize Font Font size
2706 &"font,style" Font name and style
2707 &U Single underline
2708 &E Double underline
2709 &S Strikethrough
2710 &X Superscript
2711 &Y Subscript
2712
2713 && Miscellaneous Literal ampersand &
2714
2715 Text in headers and footers can be justified (aligned) to the left,
2716 center and right by prefixing the text with the control characters &L,
2717 &C and &R.
2718
2719 For example (with ASCII art representation of the results):
2720
2721 $worksheet->set_header('&LHello');
2722
2723 ---------------------------------------------------------------
2724 | |
2725 | Hello |
2726 | |
2727
2728
2729 $worksheet->set_header('&CHello');
2730
2731 ---------------------------------------------------------------
2732 | |
2733 | Hello |
2734 | |
2735
2736
2737 $worksheet->set_header('&RHello');
2738
2739 ---------------------------------------------------------------
2740 | |
2741 | Hello |
2742 | |
2743
2744 For simple text, if you do not specify any justification the text will
2745 be centred. However, you must prefix the text with &C if you specify a
2746 font name or any other formatting:
2747
2748 $worksheet->set_header('Hello');
2749
2750 ---------------------------------------------------------------
2751 | |
2752 | Hello |
2753 | |
2754
2755 You can have text in each of the justification regions:
2756
2757 $worksheet->set_header('&LCiao&CBello&RCielo');
2758
2759 ---------------------------------------------------------------
2760 | |
2761 | Ciao Bello Cielo |
2762 | |
2763
2764 The information control characters act as variables that Excel will
2765 update as the workbook or worksheet changes. Times and dates are in the
2766 users default format:
2767
2768 $worksheet->set_header('&CPage &P of &N');
2769
2770 ---------------------------------------------------------------
2771 | |
2772 | Page 1 of 6 |
2773 | |
2774
2775
2776 $worksheet->set_header('&CUpdated at &T');
2777
2778 ---------------------------------------------------------------
2779 | |
2780 | Updated at 12:30 PM |
2781 | |
2782
2783 You can specify the font size of a section of the text by prefixing it
2784 with the control character &n where "n" is the font size:
2785
2786 $worksheet1->set_header('&C&30Hello Big' );
2787 $worksheet2->set_header('&C&10Hello Small');
2788
2789 You can specify the font of a section of the text by prefixing it with
2790 the control sequence "&"font,style"" where "fontname" is a font name
2791 such as "Courier New" or "Times New Roman" and "style" is one of the
2792 standard Windows font descriptions: "Regular", "Italic", "Bold" or
2793 "Bold Italic":
2794
2795 $worksheet1->set_header('&C&"Courier New,Italic"Hello');
2796 $worksheet2->set_header('&C&"Courier New,Bold Italic"Hello');
2797 $worksheet3->set_header('&C&"Times New Roman,Regular"Hello');
2798
2799 It is possible to combine all of these features together to create
2800 sophisticated headers and footers. As an aid to setting up complicated
2801 headers and footers you can record a page set-up as a macro in Excel
2802 and look at the format strings that VBA produces. Remember however that
2803 VBA uses two double quotes "" to indicate a single double quote. For
2804 the last example above the equivalent VBA code looks like this:
2805
2806 .LeftHeader = ""
2807 .CenterHeader = "&""Times New Roman,Regular""Hello"
2808 .RightHeader = ""
2809
2810 To include a single literal ampersand "&" in a header or footer you
2811 should use a double ampersand "&&":
2812
2813 $worksheet1->set_header('&CCuriouser && Curiouser - Attorneys at Law');
2814
2815 As stated above the margin parameter is optional. As with the other
2816 margins the value should be in inches. The default header and footer
2817 margin is 0.50 inch. The header and footer margin size can be set as
2818 follows:
2819
2820 $worksheet->set_header('&CHello', 0.75);
2821
2822 The header and footer margins are independent of the top and bottom
2823 margins.
2824
2825 Note, the header or footer string must be less than 255 characters.
2826 Strings longer than this will not be written and a warning will be
2827 generated.
2828
2829 On systems with "perl 5.8" and later the "set_header()" method can also
2830 handle Unicode strings in "UTF-8" format.
2831
2832 $worksheet->set_header("&C\x{263a}")
2833
2834 See, also the "headers.pl" program in the "examples" directory of the
2835 distribution.
2836
2837 set_footer()
2838 The syntax of the "set_footer()" method is the same as "set_header()",
2839 see above.
2840
2841 repeat_rows($first_row, $last_row)
2842 Set the number of rows to repeat at the top of each printed page.
2843
2844 For large Excel documents it is often desirable to have the first row
2845 or rows of the worksheet print out at the top of each page. This can be
2846 achieved by using the "repeat_rows()" method. The parameters $first_row
2847 and $last_row are zero based. The $last_row parameter is optional if
2848 you only wish to specify one row:
2849
2850 $worksheet1->repeat_rows(0); # Repeat the first row
2851 $worksheet2->repeat_rows(0, 1); # Repeat the first two rows
2852
2853 repeat_columns($first_col, $last_col)
2854 Set the columns to repeat at the left hand side of each printed page.
2855
2856 For large Excel documents it is often desirable to have the first
2857 column or columns of the worksheet print out at the left hand side of
2858 each page. This can be achieved by using the "repeat_columns()" method.
2859 The parameters $first_column and $last_column are zero based. The
2860 $last_column parameter is optional if you only wish to specify one
2861 column. You can also specify the columns using A1 column notation, see
2862 the note about "Cell notation".
2863
2864 $worksheet1->repeat_columns(0); # Repeat the first column
2865 $worksheet2->repeat_columns(0, 1); # Repeat the first two columns
2866 $worksheet3->repeat_columns('A:A'); # Repeat the first column
2867 $worksheet4->repeat_columns('A:B'); # Repeat the first two columns
2868
2869 hide_gridlines($option)
2870 This method is used to hide the gridlines on the screen and printed
2871 page. Gridlines are the lines that divide the cells on a worksheet.
2872 Screen and printed gridlines are turned on by default in an Excel
2873 worksheet. If you have defined your own cell borders you may wish to
2874 hide the default gridlines.
2875
2876 $worksheet->hide_gridlines();
2877
2878 The following values of $option are valid:
2879
2880 0 : Don't hide gridlines
2881 1 : Hide printed gridlines only
2882 2 : Hide screen and printed gridlines
2883
2884 If you don't supply an argument or use "undef" the default option is 1,
2885 i.e. only the printed gridlines are hidden.
2886
2887 print_row_col_headers()
2888 Set the option to print the row and column headers on the printed page.
2889
2890 An Excel worksheet looks something like the following;
2891
2892 ------------------------------------------
2893 | | A | B | C | D | ...
2894 ------------------------------------------
2895 | 1 | | | | | ...
2896 | 2 | | | | | ...
2897 | 3 | | | | | ...
2898 | 4 | | | | | ...
2899 |...| ... | ... | ... | ... | ...
2900
2901 The headers are the letters and numbers at the top and the left of the
2902 worksheet. Since these headers serve mainly as a indication of position
2903 on the worksheet they generally do not appear on the printed page. If
2904 you wish to have them printed you can use the "print_row_col_headers()"
2905 method :
2906
2907 $worksheet->print_row_col_headers();
2908
2909 Do not confuse these headers with page headers as described in the
2910 "set_header()" section above.
2911
2912 print_area($first_row, $first_col, $last_row, $last_col)
2913 This method is used to specify the area of the worksheet that will be
2914 printed. All four parameters must be specified. You can also use A1
2915 notation, see the note about "Cell notation".
2916
2917 $worksheet1->print_area('A1:H20'); # Cells A1 to H20
2918 $worksheet2->print_area(0, 0, 19, 7); # The same
2919 $worksheet2->print_area('A:H'); # Columns A to H if rows have data
2920
2921 print_across()
2922 The "print_across" method is used to change the default print
2923 direction. This is referred to by Excel as the sheet "page order".
2924
2925 $worksheet->print_across();
2926
2927 The default page order is shown below for a worksheet that extends over
2928 4 pages. The order is called "down then across":
2929
2930 [1] [3]
2931 [2] [4]
2932
2933 However, by using the "print_across" method the print order will be
2934 changed to "across then down":
2935
2936 [1] [2]
2937 [3] [4]
2938
2939 fit_to_pages($width, $height)
2940 The "fit_to_pages()" method is used to fit the printed area to a
2941 specific number of pages both vertically and horizontally. If the
2942 printed area exceeds the specified number of pages it will be scaled
2943 down to fit. This guarantees that the printed area will always appear
2944 on the specified number of pages even if the page size or margins
2945 change.
2946
2947 $worksheet1->fit_to_pages(1, 1); # Fit to 1x1 pages
2948 $worksheet2->fit_to_pages(2, 1); # Fit to 2x1 pages
2949 $worksheet3->fit_to_pages(1, 2); # Fit to 1x2 pages
2950
2951 The print area can be defined using the "print_area()" method as
2952 described above.
2953
2954 A common requirement is to fit the printed output to n pages wide but
2955 have the height be as long as necessary. To achieve this set the
2956 $height to zero or leave it blank:
2957
2958 $worksheet1->fit_to_pages(1, 0); # 1 page wide and as long as necessary
2959 $worksheet2->fit_to_pages(1); # The same
2960
2961 Note that although it is valid to use both "fit_to_pages()" and
2962 "set_print_scale()" on the same worksheet only one of these options can
2963 be active at a time. The last method call made will set the active
2964 option.
2965
2966 Note that "fit_to_pages()" will override any manual page breaks that
2967 are defined in the worksheet.
2968
2969 set_start_page($start_page)
2970 The "set_start_page()" method is used to set the number of the starting
2971 page when the worksheet is printed out. The default value is 1.
2972
2973 $worksheet->set_start_page(2);
2974
2975 set_print_scale($scale)
2976 Set the scale factor of the printed page. Scale factors in the range
2977 "10 <= $scale <= 400" are valid:
2978
2979 $worksheet1->set_print_scale(50);
2980 $worksheet2->set_print_scale(75);
2981 $worksheet3->set_print_scale(300);
2982 $worksheet4->set_print_scale(400);
2983
2984 The default scale factor is 100. Note, "set_print_scale()" does not
2985 affect the scale of the visible page in Excel. For that you should use
2986 "set_zoom()".
2987
2988 Note also that although it is valid to use both "fit_to_pages()" and
2989 "set_print_scale()" on the same worksheet only one of these options can
2990 be active at a time. The last method call made will set the active
2991 option.
2992
2993 set_h_pagebreaks(@breaks)
2994 Add horizontal page breaks to a worksheet. A page break causes all the
2995 data that follows it to be printed on the next page. Horizontal page
2996 breaks act between rows. To create a page break between rows 20 and 21
2997 you must specify the break at row 21. However in zero index notation
2998 this is actually row 20. So you can pretend for a small while that you
2999 are using 1 index notation:
3000
3001 $worksheet1->set_h_pagebreaks(20); # Break between row 20 and 21
3002
3003 The "set_h_pagebreaks()" method will accept a list of page breaks and
3004 you can call it more than once:
3005
3006 $worksheet2->set_h_pagebreaks( 20, 40, 60, 80, 100); # Add breaks
3007 $worksheet2->set_h_pagebreaks(120, 140, 160, 180, 200); # Add some more
3008
3009 Note: If you specify the "fit to page" option via the "fit_to_pages()"
3010 method it will override all manual page breaks.
3011
3012 There is a silent limitation of about 1000 horizontal page breaks per
3013 worksheet in line with an Excel internal limitation.
3014
3015 set_v_pagebreaks(@breaks)
3016 Add vertical page breaks to a worksheet. A page break causes all the
3017 data that follows it to be printed on the next page. Vertical page
3018 breaks act between columns. To create a page break between columns 20
3019 and 21 you must specify the break at column 21. However in zero index
3020 notation this is actually column 20. So you can pretend for a small
3021 while that you are using 1 index notation:
3022
3023 $worksheet1->set_v_pagebreaks(20); # Break between column 20 and 21
3024
3025 The "set_v_pagebreaks()" method will accept a list of page breaks and
3026 you can call it more than once:
3027
3028 $worksheet2->set_v_pagebreaks( 20, 40, 60, 80, 100); # Add breaks
3029 $worksheet2->set_v_pagebreaks(120, 140, 160, 180, 200); # Add some more
3030
3031 Note: If you specify the "fit to page" option via the "fit_to_pages()"
3032 method it will override all manual page breaks.
3033
3035 This section describes the methods and properties that are available
3036 for formatting cells in Excel. The properties of a cell that can be
3037 formatted include: fonts, colours, patterns, borders, alignment and
3038 number formatting.
3039
3040 Creating and using a Format object
3041 Cell formatting is defined through a Format object. Format objects are
3042 created by calling the workbook "add_format()" method as follows:
3043
3044 my $format1 = $workbook->add_format(); # Set properties later
3045 my $format2 = $workbook->add_format(%props); # Set at creation
3046
3047 The format object holds all the formatting properties that can be
3048 applied to a cell, a row or a column. The process of setting these
3049 properties is discussed in the next section.
3050
3051 Once a Format object has been constructed and its properties have been
3052 set it can be passed as an argument to the worksheet "write" methods as
3053 follows:
3054
3055 $worksheet->write(0, 0, 'One', $format);
3056 $worksheet->write_string(1, 0, 'Two', $format);
3057 $worksheet->write_number(2, 0, 3, $format);
3058 $worksheet->write_blank(3, 0, $format);
3059
3060 Formats can also be passed to the worksheet "set_row()" and
3061 "set_column()" methods to define the default property for a row or
3062 column.
3063
3064 $worksheet->set_row(0, 15, $format);
3065 $worksheet->set_column(0, 0, 15, $format);
3066
3067 Format methods and Format properties
3068 The following table shows the Excel format categories, the formatting
3069 properties that can be applied and the equivalent object method:
3070
3071 Category Description Property Method Name
3072 -------- ----------- -------- -----------
3073 Font Font type font set_font()
3074 Font size size set_size()
3075 Font color color set_color()
3076 Bold bold set_bold()
3077 Italic italic set_italic()
3078 Underline underline set_underline()
3079 Strikeout font_strikeout set_font_strikeout()
3080 Super/Subscript font_script set_font_script()
3081 Outline font_outline set_font_outline()
3082 Shadow font_shadow set_font_shadow()
3083
3084 Number Numeric format num_format set_num_format()
3085
3086 Protection Lock cells locked set_locked()
3087 Hide formulas hidden set_hidden()
3088
3089 Alignment Horizontal align align set_align()
3090 Vertical align valign set_align()
3091 Rotation rotation set_rotation()
3092 Text wrap text_wrap set_text_wrap()
3093 Justify last text_justlast set_text_justlast()
3094 Center across center_across set_center_across()
3095 Indentation indent set_indent()
3096 Shrink to fit shrink set_shrink()
3097
3098 Pattern Cell pattern pattern set_pattern()
3099 Background color bg_color set_bg_color()
3100 Foreground color fg_color set_fg_color()
3101
3102 Border Cell border border set_border()
3103 Bottom border bottom set_bottom()
3104 Top border top set_top()
3105 Left border left set_left()
3106 Right border right set_right()
3107 Border color border_color set_border_color()
3108 Bottom color bottom_color set_bottom_color()
3109 Top color top_color set_top_color()
3110 Left color left_color set_left_color()
3111 Right color right_color set_right_color()
3112
3113 There are two ways of setting Format properties: by using the object
3114 method interface or by setting the property directly. For example, a
3115 typical use of the method interface would be as follows:
3116
3117 my $format = $workbook->add_format();
3118 $format->set_bold();
3119 $format->set_color('red');
3120
3121 By comparison the properties can be set directly by passing a hash of
3122 properties to the Format constructor:
3123
3124 my $format = $workbook->add_format(bold => 1, color => 'red');
3125
3126 or after the Format has been constructed by means of the
3127 "set_format_properties()" method as follows:
3128
3129 my $format = $workbook->add_format();
3130 $format->set_format_properties(bold => 1, color => 'red');
3131
3132 You can also store the properties in one or more named hashes and pass
3133 them to the required method:
3134
3135 my %font = (
3136 font => 'Arial',
3137 size => 12,
3138 color => 'blue',
3139 bold => 1,
3140 );
3141
3142 my %shading = (
3143 bg_color => 'green',
3144 pattern => 1,
3145 );
3146
3147
3148 my $format1 = $workbook->add_format(%font); # Font only
3149 my $format2 = $workbook->add_format(%font, %shading); # Font and shading
3150
3151 The provision of two ways of setting properties might lead you to
3152 wonder which is the best way. The method mechanism may be better is you
3153 prefer setting properties via method calls (which the author did when
3154 the code was first written) otherwise passing properties to the
3155 constructor has proved to be a little more flexible and self
3156 documenting in practice. An additional advantage of working with
3157 property hashes is that it allows you to share formatting between
3158 workbook objects as shown in the example above.
3159
3160 The Perl/Tk style of adding properties is also supported:
3161
3162 my %font = (
3163 -font => 'Arial',
3164 -size => 12,
3165 -color => 'blue',
3166 -bold => 1,
3167 );
3168
3169 Working with formats
3170 The default format is Arial 10 with all other properties off.
3171
3172 Each unique format in Spreadsheet::WriteExcel must have a corresponding
3173 Format object. It isn't possible to use a Format with a write() method
3174 and then redefine the Format for use at a later stage. This is because
3175 a Format is applied to a cell not in its current state but in its final
3176 state. Consider the following example:
3177
3178 my $format = $workbook->add_format();
3179 $format->set_bold();
3180 $format->set_color('red');
3181 $worksheet->write('A1', 'Cell A1', $format);
3182 $format->set_color('green');
3183 $worksheet->write('B1', 'Cell B1', $format);
3184
3185 Cell A1 is assigned the Format $format which is initially set to the
3186 colour red. However, the colour is subsequently set to green. When
3187 Excel displays Cell A1 it will display the final state of the Format
3188 which in this case will be the colour green.
3189
3190 In general a method call without an argument will turn a property on,
3191 for example:
3192
3193 my $format1 = $workbook->add_format();
3194 $format1->set_bold(); # Turns bold on
3195 $format1->set_bold(1); # Also turns bold on
3196 $format1->set_bold(0); # Turns bold off
3197
3199 The Format object methods are described in more detail in the following
3200 sections. In addition, there is a Perl program called "formats.pl" in
3201 the "examples" directory of the WriteExcel distribution. This program
3202 creates an Excel workbook called "formats.xls" which contains examples
3203 of almost all the format types.
3204
3205 The following Format methods are available:
3206
3207 set_font()
3208 set_size()
3209 set_color()
3210 set_bold()
3211 set_italic()
3212 set_underline()
3213 set_font_strikeout()
3214 set_font_script()
3215 set_font_outline()
3216 set_font_shadow()
3217 set_num_format()
3218 set_locked()
3219 set_hidden()
3220 set_align()
3221 set_rotation()
3222 set_text_wrap()
3223 set_text_justlast()
3224 set_center_across()
3225 set_indent()
3226 set_shrink()
3227 set_pattern()
3228 set_bg_color()
3229 set_fg_color()
3230 set_border()
3231 set_bottom()
3232 set_top()
3233 set_left()
3234 set_right()
3235 set_border_color()
3236 set_bottom_color()
3237 set_top_color()
3238 set_left_color()
3239 set_right_color()
3240
3241 The above methods can also be applied directly as properties. For
3242 example "$format->set_bold()" is equivalent to
3243 "$workbook->add_format(bold => 1)".
3244
3245 set_format_properties(%properties)
3246 The properties of an existing Format object can be also be set by means
3247 of "set_format_properties()":
3248
3249 my $format = $workbook->add_format();
3250 $format->set_format_properties(bold => 1, color => 'red');
3251
3252 However, this method is here mainly for legacy reasons. It is
3253 preferable to set the properties in the format constructor:
3254
3255 my $format = $workbook->add_format(bold => 1, color => 'red');
3256
3257 set_font($fontname)
3258 Default state: Font is Arial
3259 Default action: None
3260 Valid args: Any valid font name
3261
3262 Specify the font used:
3263
3264 $format->set_font('Times New Roman');
3265
3266 Excel can only display fonts that are installed on the system that it
3267 is running on. Therefore it is best to use the fonts that come as
3268 standard such as 'Arial', 'Times New Roman' and 'Courier New'. See also
3269 the Fonts worksheet created by formats.pl
3270
3271 set_size()
3272 Default state: Font size is 10
3273 Default action: Set font size to 1
3274 Valid args: Integer values from 1 to as big as your screen.
3275
3276 Set the font size. Excel adjusts the height of a row to accommodate the
3277 largest font size in the row. You can also explicitly specify the
3278 height of a row using the set_row() worksheet method.
3279
3280 my $format = $workbook->add_format();
3281 $format->set_size(30);
3282
3283 set_color()
3284 Default state: Excels default color, usually black
3285 Default action: Set the default color
3286 Valid args: Integers from 8..63 or the following strings:
3287 'black'
3288 'blue'
3289 'brown'
3290 'cyan'
3291 'gray'
3292 'green'
3293 'lime'
3294 'magenta'
3295 'navy'
3296 'orange'
3297 'pink'
3298 'purple'
3299 'red'
3300 'silver'
3301 'white'
3302 'yellow'
3303
3304 Set the font colour. The "set_color()" method is used as follows:
3305
3306 my $format = $workbook->add_format();
3307 $format->set_color('red');
3308 $worksheet->write(0, 0, 'wheelbarrow', $format);
3309
3310 Note: The "set_color()" method is used to set the colour of the font in
3311 a cell. To set the colour of a cell use the "set_bg_color()" and
3312 "set_pattern()" methods.
3313
3314 For additional examples see the 'Named colors' and 'Standard colors'
3315 worksheets created by formats.pl in the examples directory.
3316
3317 See also "COLOURS IN EXCEL".
3318
3319 set_bold()
3320 Default state: bold is off
3321 Default action: Turn bold on
3322 Valid args: 0, 1 [1]
3323
3324 Set the bold property of the font:
3325
3326 $format->set_bold(); # Turn bold on
3327
3328 [1] Actually, values in the range 100..1000 are also valid. 400 is
3329 normal, 700 is bold and 1000 is very bold indeed. It is probably best
3330 to set the value to 1 and use normal bold.
3331
3332 set_italic()
3333 Default state: Italic is off
3334 Default action: Turn italic on
3335 Valid args: 0, 1
3336
3337 Set the italic property of the font:
3338
3339 $format->set_italic(); # Turn italic on
3340
3341 set_underline()
3342 Default state: Underline is off
3343 Default action: Turn on single underline
3344 Valid args: 0 = No underline
3345 1 = Single underline
3346 2 = Double underline
3347 33 = Single accounting underline
3348 34 = Double accounting underline
3349
3350 Set the underline property of the font.
3351
3352 $format->set_underline(); # Single underline
3353
3354 set_font_strikeout()
3355 Default state: Strikeout is off
3356 Default action: Turn strikeout on
3357 Valid args: 0, 1
3358
3359 Set the strikeout property of the font.
3360
3361 set_font_script()
3362 Default state: Super/Subscript is off
3363 Default action: Turn Superscript on
3364 Valid args: 0 = Normal
3365 1 = Superscript
3366 2 = Subscript
3367
3368 Set the superscript/subscript property of the font. This format is
3369 currently not very useful.
3370
3371 set_font_outline()
3372 Default state: Outline is off
3373 Default action: Turn outline on
3374 Valid args: 0, 1
3375
3376 Macintosh only.
3377
3378 set_font_shadow()
3379 Default state: Shadow is off
3380 Default action: Turn shadow on
3381 Valid args: 0, 1
3382
3383 Macintosh only.
3384
3385 set_num_format()
3386 Default state: General format
3387 Default action: Format index 1
3388 Valid args: See the following table
3389
3390 This method is used to define the numerical format of a number in
3391 Excel. It controls whether a number is displayed as an integer, a
3392 floating point number, a date, a currency value or some other user
3393 defined format.
3394
3395 The numerical format of a cell can be specified by using a format
3396 string or an index to one of Excel's built-in formats:
3397
3398 my $format1 = $workbook->add_format();
3399 my $format2 = $workbook->add_format();
3400 $format1->set_num_format('d mmm yyyy'); # Format string
3401 $format2->set_num_format(0x0f); # Format index
3402
3403 $worksheet->write(0, 0, 36892.521, $format1); # 1 Jan 2001
3404 $worksheet->write(0, 0, 36892.521, $format2); # 1-Jan-01
3405
3406 Using format strings you can define very sophisticated formatting of
3407 numbers.
3408
3409 $format01->set_num_format('0.000');
3410 $worksheet->write(0, 0, 3.1415926, $format01); # 3.142
3411
3412 $format02->set_num_format('#,##0');
3413 $worksheet->write(1, 0, 1234.56, $format02); # 1,235
3414
3415 $format03->set_num_format('#,##0.00');
3416 $worksheet->write(2, 0, 1234.56, $format03); # 1,234.56
3417
3418 $format04->set_num_format('$0.00');
3419 $worksheet->write(3, 0, 49.99, $format04); # $49.99
3420
3421 # Note you can use other currency symbols such as the pound or yen as well.
3422 # Other currencies may require the use of Unicode.
3423
3424 $format07->set_num_format('mm/dd/yy');
3425 $worksheet->write(6, 0, 36892.521, $format07); # 01/01/01
3426
3427 $format08->set_num_format('mmm d yyyy');
3428 $worksheet->write(7, 0, 36892.521, $format08); # Jan 1 2001
3429
3430 $format09->set_num_format('d mmmm yyyy');
3431 $worksheet->write(8, 0, 36892.521, $format09); # 1 January 2001
3432
3433 $format10->set_num_format('dd/mm/yyyy hh:mm AM/PM');
3434 $worksheet->write(9, 0, 36892.521, $format10); # 01/01/2001 12:30 AM
3435
3436 $format11->set_num_format('0 "dollar and" .00 "cents"');
3437 $worksheet->write(10, 0, 1.87, $format11); # 1 dollar and .87 cents
3438
3439 # Conditional formatting
3440 $format12->set_num_format('[Green]General;[Red]-General;General');
3441 $worksheet->write(11, 0, 123, $format12); # > 0 Green
3442 $worksheet->write(12, 0, -45, $format12); # < 0 Red
3443 $worksheet->write(13, 0, 0, $format12); # = 0 Default colour
3444
3445 # Zip code
3446 $format13->set_num_format('00000');
3447 $worksheet->write(14, 0, '01209', $format13);
3448
3449 The number system used for dates is described in "DATES AND TIME IN
3450 EXCEL".
3451
3452 The colour format should have one of the following values:
3453
3454 [Black] [Blue] [Cyan] [Green] [Magenta] [Red] [White] [Yellow]
3455
3456 Alternatively you can specify the colour based on a colour index as
3457 follows: "[Color n]", where n is a standard Excel colour index - 7. See
3458 the 'Standard colors' worksheet created by formats.pl.
3459
3460 For more information refer to the documentation on formatting in the
3461 "docs" directory of the Spreadsheet::WriteExcel distro, the Excel on-
3462 line help or
3463 <http://office.microsoft.com/en-gb/assistance/HP051995001033.aspx>.
3464
3465 You should ensure that the format string is valid in Excel prior to
3466 using it in WriteExcel.
3467
3468 Excel's built-in formats are shown in the following table:
3469
3470 Index Index Format String
3471 0 0x00 General
3472 1 0x01 0
3473 2 0x02 0.00
3474 3 0x03 #,##0
3475 4 0x04 #,##0.00
3476 5 0x05 ($#,##0_);($#,##0)
3477 6 0x06 ($#,##0_);[Red]($#,##0)
3478 7 0x07 ($#,##0.00_);($#,##0.00)
3479 8 0x08 ($#,##0.00_);[Red]($#,##0.00)
3480 9 0x09 0%
3481 10 0x0a 0.00%
3482 11 0x0b 0.00E+00
3483 12 0x0c # ?/?
3484 13 0x0d # ??/??
3485 14 0x0e m/d/yy
3486 15 0x0f d-mmm-yy
3487 16 0x10 d-mmm
3488 17 0x11 mmm-yy
3489 18 0x12 h:mm AM/PM
3490 19 0x13 h:mm:ss AM/PM
3491 20 0x14 h:mm
3492 21 0x15 h:mm:ss
3493 22 0x16 m/d/yy h:mm
3494 .. .... ...........
3495 37 0x25 (#,##0_);(#,##0)
3496 38 0x26 (#,##0_);[Red](#,##0)
3497 39 0x27 (#,##0.00_);(#,##0.00)
3498 40 0x28 (#,##0.00_);[Red](#,##0.00)
3499 41 0x29 _(* #,##0_);_(* (#,##0);_(* "-"_);_(@_)
3500 42 0x2a _($* #,##0_);_($* (#,##0);_($* "-"_);_(@_)
3501 43 0x2b _(* #,##0.00_);_(* (#,##0.00);_(* "-"??_);_(@_)
3502 44 0x2c _($* #,##0.00_);_($* (#,##0.00);_($* "-"??_);_(@_)
3503 45 0x2d mm:ss
3504 46 0x2e [h]:mm:ss
3505 47 0x2f mm:ss.0
3506 48 0x30 ##0.0E+0
3507 49 0x31 @
3508
3509 For examples of these formatting codes see the 'Numerical formats'
3510 worksheet created by formats.pl. See also the number_formats1.html and
3511 the number_formats2.html documents in the "docs" directory of the
3512 distro.
3513
3514 Note 1. Numeric formats 23 to 36 are not documented by Microsoft and
3515 may differ in international versions.
3516
3517 Note 2. In Excel 5 the dollar sign appears as a dollar sign. In Excel
3518 97-2000 it appears as the defined local currency symbol.
3519
3520 Note 3. The red negative numeric formats display slightly differently
3521 in Excel 5 and Excel 97-2000.
3522
3523 set_locked()
3524 Default state: Cell locking is on
3525 Default action: Turn locking on
3526 Valid args: 0, 1
3527
3528 This property can be used to prevent modification of a cells contents.
3529 Following Excel's convention, cell locking is turned on by default.
3530 However, it only has an effect if the worksheet has been protected, see
3531 the worksheet "protect()" method.
3532
3533 my $locked = $workbook->add_format();
3534 $locked->set_locked(1); # A non-op
3535
3536 my $unlocked = $workbook->add_format();
3537 $locked->set_locked(0);
3538
3539 # Enable worksheet protection
3540 $worksheet->protect();
3541
3542 # This cell cannot be edited.
3543 $worksheet->write('A1', '=1+2', $locked);
3544
3545 # This cell can be edited.
3546 $worksheet->write('A2', '=1+2', $unlocked);
3547
3548 Note: This offers weak protection even with a password, see the note in
3549 relation to the "protect()" method.
3550
3551 set_hidden()
3552 Default state: Formula hiding is off
3553 Default action: Turn hiding on
3554 Valid args: 0, 1
3555
3556 This property is used to hide a formula while still displaying its
3557 result. This is generally used to hide complex calculations from end
3558 users who are only interested in the result. It only has an effect if
3559 the worksheet has been protected, see the worksheet "protect()" method.
3560
3561 my $hidden = $workbook->add_format();
3562 $hidden->set_hidden();
3563
3564 # Enable worksheet protection
3565 $worksheet->protect();
3566
3567 # The formula in this cell isn't visible
3568 $worksheet->write('A1', '=1+2', $hidden);
3569
3570 Note: This offers weak protection even with a password, see the note in
3571 relation to the "protect()" method.
3572
3573 set_align()
3574 Default state: Alignment is off
3575 Default action: Left alignment
3576 Valid args: 'left' Horizontal
3577 'center'
3578 'right'
3579 'fill'
3580 'justify'
3581 'center_across'
3582
3583 'top' Vertical
3584 'vcenter'
3585 'bottom'
3586 'vjustify'
3587
3588 This method is used to set the horizontal and vertical text alignment
3589 within a cell. Vertical and horizontal alignments can be combined. The
3590 method is used as follows:
3591
3592 my $format = $workbook->add_format();
3593 $format->set_align('center');
3594 $format->set_align('vcenter');
3595 $worksheet->set_row(0, 30);
3596 $worksheet->write(0, 0, 'X', $format);
3597
3598 Text can be aligned across two or more adjacent cells using the
3599 "center_across" property. However, for genuine merged cells it is
3600 better to use the "merge_range()" worksheet method.
3601
3602 The "vjustify" (vertical justify) option can be used to provide
3603 automatic text wrapping in a cell. The height of the cell will be
3604 adjusted to accommodate the wrapped text. To specify where the text
3605 wraps use the "set_text_wrap()" method.
3606
3607 For further examples see the 'Alignment' worksheet created by
3608 formats.pl.
3609
3610 set_center_across()
3611 Default state: Center across selection is off
3612 Default action: Turn center across on
3613 Valid args: 1
3614
3615 Text can be aligned across two or more adjacent cells using the
3616 "set_center_across()" method. This is an alias for the
3617 "set_align('center_across')" method call.
3618
3619 Only one cell should contain the text, the other cells should be blank:
3620
3621 my $format = $workbook->add_format();
3622 $format->set_center_across();
3623
3624 $worksheet->write(1, 1, 'Center across selection', $format);
3625 $worksheet->write_blank(1, 2, $format);
3626
3627 See also the "merge1.pl" to "merge6.pl" programs in the "examples"
3628 directory and the "merge_range()" method.
3629
3630 set_text_wrap()
3631 Default state: Text wrap is off
3632 Default action: Turn text wrap on
3633 Valid args: 0, 1
3634
3635 Here is an example using the text wrap property, the escape character
3636 "\n" is used to indicate the end of line:
3637
3638 my $format = $workbook->add_format();
3639 $format->set_text_wrap();
3640 $worksheet->write(0, 0, "It's\na bum\nwrap", $format);
3641
3642 Excel will adjust the height of the row to accommodate the wrapped
3643 text. A similar effect can be obtained without newlines using the
3644 "set_align('vjustify')" method. See the "textwrap.pl" program in the
3645 "examples" directory.
3646
3647 set_rotation()
3648 Default state: Text rotation is off
3649 Default action: None
3650 Valid args: Integers in the range -90 to 90 and 270
3651
3652 Set the rotation of the text in a cell. The rotation can be any angle
3653 in the range -90 to 90 degrees.
3654
3655 my $format = $workbook->add_format();
3656 $format->set_rotation(30);
3657 $worksheet->write(0, 0, 'This text is rotated', $format);
3658
3659 The angle 270 is also supported. This indicates text where the letters
3660 run from top to bottom.
3661
3662 set_indent()
3663 Default state: Text indentation is off
3664 Default action: Indent text 1 level
3665 Valid args: Positive integers
3666
3667 This method can be used to indent text. The argument, which should be
3668 an integer, is taken as the level of indentation:
3669
3670 my $format = $workbook->add_format();
3671 $format->set_indent(2);
3672 $worksheet->write(0, 0, 'This text is indented', $format);
3673
3674 Indentation is a horizontal alignment property. It will override any
3675 other horizontal properties but it can be used in conjunction with
3676 vertical properties.
3677
3678 set_shrink()
3679 Default state: Text shrinking is off
3680 Default action: Turn "shrink to fit" on
3681 Valid args: 1
3682
3683 This method can be used to shrink text so that it fits in a cell.
3684
3685 my $format = $workbook->add_format();
3686 $format->set_shrink();
3687 $worksheet->write(0, 0, 'Honey, I shrunk the text!', $format);
3688
3689 set_text_justlast()
3690 Default state: Justify last is off
3691 Default action: Turn justify last on
3692 Valid args: 0, 1
3693
3694 Only applies to Far Eastern versions of Excel.
3695
3696 set_pattern()
3697 Default state: Pattern is off
3698 Default action: Solid fill is on
3699 Valid args: 0 .. 18
3700
3701 Set the background pattern of a cell.
3702
3703 Examples of the available patterns are shown in the 'Patterns'
3704 worksheet created by formats.pl. However, it is unlikely that you will
3705 ever need anything other than Pattern 1 which is a solid fill of the
3706 background color.
3707
3708 set_bg_color()
3709 Default state: Color is off
3710 Default action: Solid fill.
3711 Valid args: See set_color()
3712
3713 The "set_bg_color()" method can be used to set the background colour of
3714 a pattern. Patterns are defined via the "set_pattern()" method. If a
3715 pattern hasn't been defined then a solid fill pattern is used as the
3716 default.
3717
3718 Here is an example of how to set up a solid fill in a cell:
3719
3720 my $format = $workbook->add_format();
3721
3722 $format->set_pattern(); # This is optional when using a solid fill
3723
3724 $format->set_bg_color('green');
3725 $worksheet->write('A1', 'Ray', $format);
3726
3727 For further examples see the 'Patterns' worksheet created by
3728 formats.pl.
3729
3730 set_fg_color()
3731 Default state: Color is off
3732 Default action: Solid fill.
3733 Valid args: See set_color()
3734
3735 The "set_fg_color()" method can be used to set the foreground colour of
3736 a pattern.
3737
3738 For further examples see the 'Patterns' worksheet created by
3739 formats.pl.
3740
3741 set_border()
3742 Also applies to: set_bottom()
3743 set_top()
3744 set_left()
3745 set_right()
3746
3747 Default state: Border is off
3748 Default action: Set border type 1
3749 Valid args: 0-13, See below.
3750
3751 A cell border is comprised of a border on the bottom, top, left and
3752 right. These can be set to the same value using "set_border()" or
3753 individually using the relevant method calls shown above.
3754
3755 The following shows the border styles sorted by Spreadsheet::WriteExcel
3756 index number:
3757
3758 Index Name Weight Style
3759 ===== ============= ====== ===========
3760 0 None 0
3761 1 Continuous 1 -----------
3762 2 Continuous 2 -----------
3763 3 Dash 1 - - - - - -
3764 4 Dot 1 . . . . . .
3765 5 Continuous 3 -----------
3766 6 Double 3 ===========
3767 7 Continuous 0 -----------
3768 8 Dash 2 - - - - - -
3769 9 Dash Dot 1 - . - . - .
3770 10 Dash Dot 2 - . - . - .
3771 11 Dash Dot Dot 1 - . . - . .
3772 12 Dash Dot Dot 2 - . . - . .
3773 13 SlantDash Dot 2 / - . / - .
3774
3775 The following shows the borders sorted by style:
3776
3777 Name Weight Style Index
3778 ============= ====== =========== =====
3779 Continuous 0 ----------- 7
3780 Continuous 1 ----------- 1
3781 Continuous 2 ----------- 2
3782 Continuous 3 ----------- 5
3783 Dash 1 - - - - - - 3
3784 Dash 2 - - - - - - 8
3785 Dash Dot 1 - . - . - . 9
3786 Dash Dot 2 - . - . - . 10
3787 Dash Dot Dot 1 - . . - . . 11
3788 Dash Dot Dot 2 - . . - . . 12
3789 Dot 1 . . . . . . 4
3790 Double 3 =========== 6
3791 None 0 0
3792 SlantDash Dot 2 / - . / - . 13
3793
3794 The following shows the borders in the order shown in the Excel Dialog.
3795
3796 Index Style Index Style
3797 ===== ===== ===== =====
3798 0 None 12 - . . - . .
3799 7 ----------- 13 / - . / - .
3800 4 . . . . . . 10 - . - . - .
3801 11 - . . - . . 8 - - - - - -
3802 9 - . - . - . 2 -----------
3803 3 - - - - - - 5 -----------
3804 1 ----------- 6 ===========
3805
3806 Examples of the available border styles are shown in the 'Borders'
3807 worksheet created by formats.pl.
3808
3809 set_border_color()
3810 Also applies to: set_bottom_color()
3811 set_top_color()
3812 set_left_color()
3813 set_right_color()
3814
3815 Default state: Color is off
3816 Default action: Undefined
3817 Valid args: See set_color()
3818
3819 Set the colour of the cell borders. A cell border is comprised of a
3820 border on the bottom, top, left and right. These can be set to the same
3821 colour using "set_border_color()" or individually using the relevant
3822 method calls shown above. Examples of the border styles and colours are
3823 shown in the 'Borders' worksheet created by formats.pl.
3824
3825 copy($format)
3826 This method is used to copy all of the properties from one Format
3827 object to another:
3828
3829 my $lorry1 = $workbook->add_format();
3830 $lorry1->set_bold();
3831 $lorry1->set_italic();
3832 $lorry1->set_color('red'); # lorry1 is bold, italic and red
3833
3834 my $lorry2 = $workbook->add_format();
3835 $lorry2->copy($lorry1);
3836 $lorry2->set_color('yellow'); # lorry2 is bold, italic and yellow
3837
3838 The "copy()" method is only useful if you are using the method
3839 interface to Format properties. It generally isn't required if you are
3840 setting Format properties directly using hashes.
3841
3842 Note: this is not a copy constructor, both objects must exist prior to
3843 copying.
3844
3846 The following is a brief introduction to handling Unicode in
3847 "Spreadsheet::WriteExcel".
3848
3849 For a more general introduction to Unicode handling in Perl see
3850 perlunitut and perluniintro.
3851
3852 When using Spreadsheet::WriteExcel the best and easiest way to write
3853 unicode strings to an Excel file is to use "UTF-8" encoded strings and
3854 perl 5.8 (or later). Spreadsheet::WriteExcel also allows you to write
3855 unicode strings using older perls but it generally requires more work,
3856 as explained below.
3857
3858 Internally, Excel encodes unicode data as "UTF-16LE" (where LE means
3859 little-endian). If you are using perl 5.8+ then Spreadsheet::WriteExcel
3860 will convert "UTF-8" strings to "UTF-16LE" when required. No further
3861 intervention is required from the programmer, for example:
3862
3863 # perl 5.8+ example:
3864 my $smiley = "\x{263A}";
3865
3866 $worksheet->write('A1', 'Hello world'); # ASCII
3867 $worksheet->write('A2', $smiley); # UTF-8
3868
3869 Spreadsheet::WriteExcel also lets you write unicode data as "UTF-16".
3870 Since the majority of CPAN modules default to "UTF-16BE" (big-endian)
3871 Spreadsheet::WriteExcel also uses "UTF-16BE" and converts it internally
3872 to "UTF-16LE":
3873
3874 # perl 5.005 example:
3875 my $smiley = pack 'n', 0x263A;
3876
3877 $worksheet->write ('A3', 'Hello world'); # ASCII
3878 $worksheet->write_utf16be_string('A4', $smiley); # UTF-16
3879
3880 Although the above examples look similar there is an important
3881 difference. With "uft8" and perl 5.8+ Spreadsheet::WriteExcel treats
3882 "UTF-8" strings in exactly the same way as any other string. However,
3883 with "UTF16" data we need to distinguish it from other strings either
3884 by calling a separate function or by passing an additional flag to
3885 indicate the data type.
3886
3887 If you are dealing with non-ASCII characters that aren't in "UTF-8"
3888 then perl 5.8+ provides useful tools in the guise of the "Encode"
3889 module to help you to convert to the required format. For example:
3890
3891 use Encode 'decode';
3892
3893 my $string = 'some string with koi8-r characters';
3894 $string = decode('koi8-r', $string); # koi8-r to utf8
3895
3896 Alternatively you can read data from an encoded file and convert it to
3897 "UTF-8" as you read it in:
3898
3899 my $file = 'unicode_koi8r.txt';
3900 open FH, '<:encoding(koi8-r)', $file or die "Couldn't open $file: $!\n";
3901
3902 my $row = 0;
3903 while (<FH>) {
3904 # Data read in is now in utf8 format.
3905 chomp;
3906 $worksheet->write($row++, 0, $_);
3907 }
3908
3909 These methodologies are explained in more detail in perlunitut,
3910 perluniintro and perlunicode.
3911
3912 See also the "unicode_*.pl" programs in the examples directory of the
3913 distro.
3914
3916 Excel provides a colour palette of 56 colours. In
3917 Spreadsheet::WriteExcel these colours are accessed via their palette
3918 index in the range 8..63. This index is used to set the colour of
3919 fonts, cell patterns and cell borders. For example:
3920
3921 my $format = $workbook->add_format(
3922 color => 12, # index for blue
3923 font => 'Arial',
3924 size => 12,
3925 bold => 1,
3926 );
3927
3928 The most commonly used colours can also be accessed by name. The name
3929 acts as a simple alias for the colour index:
3930
3931 black => 8
3932 blue => 12
3933 brown => 16
3934 cyan => 15
3935 gray => 23
3936 green => 17
3937 lime => 11
3938 magenta => 14
3939 navy => 18
3940 orange => 53
3941 pink => 33
3942 purple => 20
3943 red => 10
3944 silver => 22
3945 white => 9
3946 yellow => 13
3947
3948 For example:
3949
3950 my $font = $workbook->add_format(color => 'red');
3951
3952 Users of VBA in Excel should note that the equivalent colour indices
3953 are in the range 1..56 instead of 8..63.
3954
3955 If the default palette does not provide a required colour you can
3956 override one of the built-in values. This is achieved by using the
3957 "set_custom_color()" workbook method to adjust the RGB (red green blue)
3958 components of the colour:
3959
3960 my $ferrari = $workbook->set_custom_color(40, 216, 12, 12);
3961
3962 my $format = $workbook->add_format(
3963 bg_color => $ferrari,
3964 pattern => 1,
3965 border => 1
3966 );
3967
3968 $worksheet->write_blank('A1', $format);
3969
3970 The default Excel colour palette is shown in "palette.html" in the
3971 "docs" directory of the distro. You can generate an Excel version of
3972 the palette using "colors.pl" in the "examples" directory.
3973
3975 There are two important things to understand about dates and times in
3976 Excel:
3977
3978 1 A date/time in Excel is a real number plus an Excel number format.
3979 2 Spreadsheet::WriteExcel doesn't automatically convert date/time
3980 strings in "write()" to an Excel date/time.
3981
3982 These two points are explained in more detail below along with some
3983 suggestions on how to convert times and dates to the required format.
3984
3985 An Excel date/time is a number plus a format
3986 If you write a date string with "write()" then all you will get is a
3987 string:
3988
3989 $worksheet->write('A1', '02/03/04'); # !! Writes a string not a date. !!
3990
3991 Dates and times in Excel are represented by real numbers, for example
3992 "Jan 1 2001 12:30 AM" is represented by the number 36892.521.
3993
3994 The integer part of the number stores the number of days since the
3995 epoch and the fractional part stores the percentage of the day.
3996
3997 A date or time in Excel is just like any other number. To have the
3998 number display as a date you must apply an Excel number format to it.
3999 Here are some examples.
4000
4001 #!/usr/bin/perl -w
4002
4003 use strict;
4004 use Spreadsheet::WriteExcel;
4005
4006 my $workbook = Spreadsheet::WriteExcel->new('date_examples.xls');
4007 my $worksheet = $workbook->add_worksheet();
4008
4009 $worksheet->set_column('A:A', 30); # For extra visibility.
4010
4011 my $number = 39506.5;
4012
4013 $worksheet->write('A1', $number); # 39506.5
4014
4015 my $format2 = $workbook->add_format(num_format => 'dd/mm/yy');
4016 $worksheet->write('A2', $number , $format2); # 28/02/08
4017
4018 my $format3 = $workbook->add_format(num_format => 'mm/dd/yy');
4019 $worksheet->write('A3', $number , $format3); # 02/28/08
4020
4021 my $format4 = $workbook->add_format(num_format => 'd-m-yyyy');
4022 $worksheet->write('A4', $number , $format4); # 28-2-2008
4023
4024 my $format5 = $workbook->add_format(num_format => 'dd/mm/yy hh:mm');
4025 $worksheet->write('A5', $number , $format5); # 28/02/08 12:00
4026
4027 my $format6 = $workbook->add_format(num_format => 'd mmm yyyy');
4028 $worksheet->write('A6', $number , $format6); # 28 Feb 2008
4029
4030 my $format7 = $workbook->add_format(num_format => 'mmm d yyyy hh:mm AM/PM');
4031 $worksheet->write('A7', $number , $format7); # Feb 28 2008 12:00 PM
4032
4033 Spreadsheet::WriteExcel doesn't automatically convert date/time strings
4034 Spreadsheet::WriteExcel doesn't automatically convert input date
4035 strings into Excel's formatted date numbers due to the large number of
4036 possible date formats and also due to the possibility of
4037 misinterpretation.
4038
4039 For example, does "02/03/04" mean March 2 2004, February 3 2004 or even
4040 March 4 2002.
4041
4042 Therefore, in order to handle dates you will have to convert them to
4043 numbers and apply an Excel format. Some methods for converting dates
4044 are listed in the next section.
4045
4046 The most direct way is to convert your dates to the ISO8601
4047 "yyyy-mm-ddThh:mm:ss.sss" date format and use the "write_date_time()"
4048 worksheet method:
4049
4050 $worksheet->write_date_time('A2', '2001-01-01T12:20', $format);
4051
4052 See the "write_date_time()" section of the documentation for more
4053 details.
4054
4055 A general methodology for handling date strings with
4056 "write_date_time()" is:
4057
4058 1. Identify incoming date/time strings with a regex.
4059 2. Extract the component parts of the date/time using the same regex.
4060 3. Convert the date/time to the ISO8601 format.
4061 4. Write the date/time using write_date_time() and a number format.
4062
4063 Here is an example:
4064
4065 #!/usr/bin/perl -w
4066
4067 use strict;
4068 use Spreadsheet::WriteExcel;
4069
4070 my $workbook = Spreadsheet::WriteExcel->new('example.xls');
4071 my $worksheet = $workbook->add_worksheet();
4072
4073 # Set the default format for dates.
4074 my $date_format = $workbook->add_format(num_format => 'mmm d yyyy');
4075
4076 # Increase column width to improve visibility of data.
4077 $worksheet->set_column('A:C', 20);
4078
4079 # Simulate reading from a data source.
4080 my $row = 0;
4081
4082 while (<DATA>) {
4083 chomp;
4084
4085 my $col = 0;
4086 my @data = split ' ';
4087
4088 for my $item (@data) {
4089
4090 # Match dates in the following formats: d/m/yy, d/m/yyyy
4091 if ($item =~ qr[^(\d{1,2})/(\d{1,2})/(\d{4})$]) {
4092
4093 # Change to the date format required by write_date_time().
4094 my $date = sprintf "%4d-%02d-%02dT", $3, $2, $1;
4095
4096 $worksheet->write_date_time($row, $col++, $date, $date_format);
4097 }
4098 else {
4099 # Just plain data
4100 $worksheet->write($row, $col++, $item);
4101 }
4102 }
4103 $row++;
4104 }
4105
4106 __DATA__
4107 Item Cost Date
4108 Book 10 1/9/2007
4109 Beer 4 12/9/2007
4110 Bed 500 5/10/2007
4111
4112 For a slightly more advanced solution you can modify the "write()"
4113 method to handle date formats of your choice via the
4114 "add_write_handler()" method. See the "add_write_handler()" section of
4115 the docs and the write_handler3.pl and write_handler4.pl programs in
4116 the examples directory of the distro.
4117
4118 Converting dates and times to an Excel date or time
4119 The "write_date_time()" method above is just one way of handling dates
4120 and times.
4121
4122 The Spreadsheet::WriteExcel::Utility module which is included in the
4123 distro has date/time handling functions:
4124
4125 use Spreadsheet::WriteExcel::Utility;
4126
4127 $date = xl_date_list(2002, 1, 1); # 37257
4128 $date = xl_parse_date("11 July 1997"); # 35622
4129 $time = xl_parse_time('3:21:36 PM'); # 0.64
4130 $date = xl_decode_date_EU("13 May 2002"); # 37389
4131
4132 Note: some of these functions require additional CPAN modules.
4133
4134 For date conversions using the CPAN "DateTime" framework see
4135 DateTime::Format::Excel
4136 <http://search.cpan.org/search?dist=DateTime-Format-Excel>.
4137
4139 Excel allows you to group rows or columns so that they can be hidden or
4140 displayed with a single mouse click. This feature is referred to as
4141 outlines.
4142
4143 Outlines can reduce complex data down to a few salient sub-totals or
4144 summaries.
4145
4146 This feature is best viewed in Excel but the following is an ASCII
4147 representation of what a worksheet with three outlines might look like.
4148 Rows 3-4 and rows 7-8 are grouped at level 2. Rows 2-9 are grouped at
4149 level 1. The lines at the left hand side are called outline level bars.
4150
4151 ------------------------------------------
4152 1 2 3 | | A | B | C | D | ...
4153 ------------------------------------------
4154 _ | 1 | A | | | | ...
4155 | _ | 2 | B | | | | ...
4156 | | | 3 | (C) | | | | ...
4157 | | | 4 | (D) | | | | ...
4158 | - | 5 | E | | | | ...
4159 | _ | 6 | F | | | | ...
4160 | | | 7 | (G) | | | | ...
4161 | | | 8 | (H) | | | | ...
4162 | - | 9 | I | | | | ...
4163 - | . | ... | ... | ... | ... | ...
4164
4165 Clicking the minus sign on each of the level 2 outlines will collapse
4166 and hide the data as shown in the next figure. The minus sign changes
4167 to a plus sign to indicate that the data in the outline is hidden.
4168
4169 ------------------------------------------
4170 1 2 3 | | A | B | C | D | ...
4171 ------------------------------------------
4172 _ | 1 | A | | | | ...
4173 | | 2 | B | | | | ...
4174 | + | 5 | E | | | | ...
4175 | | 6 | F | | | | ...
4176 | + | 9 | I | | | | ...
4177 - | . | ... | ... | ... | ... | ...
4178
4179 Clicking on the minus sign on the level 1 outline will collapse the
4180 remaining rows as follows:
4181
4182 ------------------------------------------
4183 1 2 3 | | A | B | C | D | ...
4184 ------------------------------------------
4185 | 1 | A | | | | ...
4186 + | . | ... | ... | ... | ... | ...
4187
4188 Grouping in "Spreadsheet::WriteExcel" is achieved by setting the
4189 outline level via the "set_row()" and "set_column()" worksheet methods:
4190
4191 set_row($row, $height, $format, $hidden, $level, $collapsed)
4192 set_column($first_col, $last_col, $width, $format, $hidden, $level, $collapsed)
4193
4194 The following example sets an outline level of 1 for rows 1 and 2
4195 (zero-indexed) and columns B to G. The parameters $height and $XF are
4196 assigned default values since they are undefined:
4197
4198 $worksheet->set_row(1, undef, undef, 0, 1);
4199 $worksheet->set_row(2, undef, undef, 0, 1);
4200 $worksheet->set_column('B:G', undef, undef, 0, 1);
4201
4202 Excel allows up to 7 outline levels. Therefore the $level parameter
4203 should be in the range "0 <= $level <= 7".
4204
4205 Rows and columns can be collapsed by setting the $hidden flag for the
4206 hidden rows/columns and setting the $collapsed flag for the row/column
4207 that has the collapsed "+" symbol:
4208
4209 $worksheet->set_row(1, undef, undef, 1, 1);
4210 $worksheet->set_row(2, undef, undef, 1, 1);
4211 $worksheet->set_row(3, undef, undef, 0, 0, 1); # Collapsed flag.
4212
4213 $worksheet->set_column('B:G', undef, undef, 1, 1);
4214 $worksheet->set_column('H:H', undef, undef, 0, 0, 1); # Collapsed flag.
4215
4216 Note: Setting the $collapsed flag is particularly important for
4217 compatibility with OpenOffice.org and Gnumeric.
4218
4219 For a more complete example see the "outline.pl" and
4220 "outline_collapsed.pl" programs in the examples directory of the
4221 distro.
4222
4223 Some additional outline properties can be set via the
4224 "outline_settings()" worksheet method, see above.
4225
4227 Data validation is a feature of Excel which allows you to restrict the
4228 data that a users enters in a cell and to display help and warning
4229 messages. It also allows you to restrict input to values in a drop down
4230 list.
4231
4232 A typical use case might be to restrict data in a cell to integer
4233 values in a certain range, to provide a help message to indicate the
4234 required value and to issue a warning if the input data doesn't meet
4235 the stated criteria. In Spreadsheet::WriteExcel we could do that as
4236 follows:
4237
4238 $worksheet->data_validation('B3',
4239 {
4240 validate => 'integer',
4241 criteria => 'between',
4242 minimum => 1,
4243 maximum => 100,
4244 input_title => 'Input an integer:',
4245 input_message => 'Between 1 and 100',
4246 error_message => 'Sorry, try again.',
4247 });
4248
4249 The above example would look like this in Excel:
4250 <http://homepage.eircom.net/~jmcnamara/perl/data_validation.jpg>.
4251
4252 For more information on data validation see the following Microsoft
4253 support article "Description and examples of data validation in Excel":
4254 <http://support.microsoft.com/kb/211485>.
4255
4256 The following sections describe how to use the "data_validation()"
4257 method and its various options.
4258
4259 data_validation($row, $col, { parameter => 'value', ... })
4260 The "data_validation()" method is used to construct an Excel data
4261 validation.
4262
4263 It can be applied to a single cell or a range of cells. You can pass 3
4264 parameters such as "($row, $col, {...})" or 5 parameters such as
4265 "($first_row, $first_col, $last_row, $last_col, {...})". You can also
4266 use "A1" style notation. For example:
4267
4268 $worksheet->data_validation(0, 0, {...});
4269 $worksheet->data_validation(0, 0, 4, 1, {...});
4270
4271 # Which are the same as:
4272
4273 $worksheet->data_validation('A1', {...});
4274 $worksheet->data_validation('A1:B5', {...});
4275
4276 See also the note about "Cell notation" for more information.
4277
4278 The last parameter in "data_validation()" must be a hash ref containing
4279 the parameters that describe the type and style of the data validation.
4280 The allowable parameters are:
4281
4282 validate
4283 criteria
4284 value | minimum | source
4285 maximum
4286 ignore_blank
4287 dropdown
4288
4289 input_title
4290 input_message
4291 show_input
4292
4293 error_title
4294 error_message
4295 error_type
4296 show_error
4297
4298 These parameters are explained in the following sections. Most of the
4299 parameters are optional, however, you will generally require the three
4300 main options "validate", "criteria" and "value".
4301
4302 $worksheet->data_validation('B3',
4303 {
4304 validate => 'integer',
4305 criteria => '>',
4306 value => 100,
4307 });
4308
4309 The "data_validation" method returns:
4310
4311 0 for success.
4312 -1 for insufficient number of arguments.
4313 -2 for row or column out of bounds.
4314 -3 for incorrect parameter or value.
4315
4316 validate
4317 This parameter is passed in a hash ref to "data_validation()".
4318
4319 The "validate" parameter is used to set the type of data that you wish
4320 to validate. It is always required and it has no default value.
4321 Allowable values are:
4322
4323 any
4324 integer
4325 decimal
4326 list
4327 date
4328 time
4329 length
4330 custom
4331
4332 • any is used to specify that the type of data is unrestricted. This
4333 is the same as not applying a data validation. It is only provided
4334 for completeness and isn't used very often in the context of
4335 Spreadsheet::WriteExcel.
4336
4337 • integer restricts the cell to integer values. Excel refers to this
4338 as 'whole number'.
4339
4340 validate => 'integer',
4341 criteria => '>',
4342 value => 100,
4343
4344 • decimal restricts the cell to decimal values.
4345
4346 validate => 'decimal',
4347 criteria => '>',
4348 value => 38.6,
4349
4350 • list restricts the cell to a set of user specified values. These
4351 can be passed in an array ref or as a cell range (named ranges
4352 aren't currently supported):
4353
4354 validate => 'list',
4355 value => ['open', 'high', 'close'],
4356 # Or like this:
4357 value => 'B1:B3',
4358
4359 Excel requires that range references are only to cells on the same
4360 worksheet.
4361
4362 • date restricts the cell to date values. Dates in Excel are
4363 expressed as integer values but you can also pass an ISO860 style
4364 string as used in "write_date_time()". See also "DATES AND TIME IN
4365 EXCEL" for more information about working with Excel's dates.
4366
4367 validate => 'date',
4368 criteria => '>',
4369 value => 39653, # 24 July 2008
4370 # Or like this:
4371 value => '2008-07-24T',
4372
4373 • time restricts the cell to time values. Times in Excel are
4374 expressed as decimal values but you can also pass an ISO860 style
4375 string as used in "write_date_time()". See also "DATES AND TIME IN
4376 EXCEL" for more information about working with Excel's times.
4377
4378 validate => 'time',
4379 criteria => '>',
4380 value => 0.5, # Noon
4381 # Or like this:
4382 value => 'T12:00:00',
4383
4384 • length restricts the cell data based on an integer string length.
4385 Excel refers to this as 'Text length'.
4386
4387 validate => 'length',
4388 criteria => '>',
4389 value => 10,
4390
4391 • custom restricts the cell based on an external Excel formula that
4392 returns a "TRUE/FALSE" value.
4393
4394 validate => 'custom',
4395 value => '=IF(A10>B10,TRUE,FALSE)',
4396
4397 criteria
4398 This parameter is passed in a hash ref to "data_validation()".
4399
4400 The "criteria" parameter is used to set the criteria by which the data
4401 in the cell is validated. It is almost always required except for the
4402 "list" and "custom" validate options. It has no default value.
4403 Allowable values are:
4404
4405 'between'
4406 'not between'
4407 'equal to' | '==' | '='
4408 'not equal to' | '!=' | '<>'
4409 'greater than' | '>'
4410 'less than' | '<'
4411 'greater than or equal to' | '>='
4412 'less than or equal to' | '<='
4413
4414 You can either use Excel's textual description strings, in the first
4415 column above, or the more common operator alternatives. The following
4416 are equivalent:
4417
4418 validate => 'integer',
4419 criteria => 'greater than',
4420 value => 100,
4421
4422 validate => 'integer',
4423 criteria => '>',
4424 value => 100,
4425
4426 The "list" and "custom" validate options don't require a "criteria". If
4427 you specify one it will be ignored.
4428
4429 validate => 'list',
4430 value => ['open', 'high', 'close'],
4431
4432 validate => 'custom',
4433 value => '=IF(A10>B10,TRUE,FALSE)',
4434
4435 value | minimum | source
4436 This parameter is passed in a hash ref to "data_validation()".
4437
4438 The "value" parameter is used to set the limiting value to which the
4439 "criteria" is applied. It is always required and it has no default
4440 value. You can also use the synonyms "minimum" or "source" to make the
4441 validation a little clearer and closer to Excel's description of the
4442 parameter:
4443
4444 # Use 'value'
4445 validate => 'integer',
4446 criteria => '>',
4447 value => 100,
4448
4449 # Use 'minimum'
4450 validate => 'integer',
4451 criteria => 'between',
4452 minimum => 1,
4453 maximum => 100,
4454
4455 # Use 'source'
4456 validate => 'list',
4457 source => '$B$1:$B$3',
4458
4459 maximum
4460 This parameter is passed in a hash ref to "data_validation()".
4461
4462 The "maximum" parameter is used to set the upper limiting value when
4463 the "criteria" is either 'between' or 'not between':
4464
4465 validate => 'integer',
4466 criteria => 'between',
4467 minimum => 1,
4468 maximum => 100,
4469
4470 ignore_blank
4471 This parameter is passed in a hash ref to "data_validation()".
4472
4473 The "ignore_blank" parameter is used to toggle on and off the 'Ignore
4474 blank' option in the Excel data validation dialog. When the option is
4475 on the data validation is not applied to blank data in the cell. It is
4476 on by default.
4477
4478 ignore_blank => 0, # Turn the option off
4479
4480 dropdown
4481 This parameter is passed in a hash ref to "data_validation()".
4482
4483 The "dropdown" parameter is used to toggle on and off the 'In-cell
4484 dropdown' option in the Excel data validation dialog. When the option
4485 is on a dropdown list will be shown for "list" validations. It is on by
4486 default.
4487
4488 dropdown => 0, # Turn the option off
4489
4490 input_title
4491 This parameter is passed in a hash ref to "data_validation()".
4492
4493 The "input_title" parameter is used to set the title of the input
4494 message that is displayed when a cell is entered. It has no default
4495 value and is only displayed if the input message is displayed. See the
4496 "input_message" parameter below.
4497
4498 input_title => 'This is the input title',
4499
4500 The maximum title length is 32 characters. UTF8 strings are handled
4501 automatically in perl 5.8 and later.
4502
4503 input_message
4504 This parameter is passed in a hash ref to "data_validation()".
4505
4506 The "input_message" parameter is used to set the input message that is
4507 displayed when a cell is entered. It has no default value.
4508
4509 validate => 'integer',
4510 criteria => 'between',
4511 minimum => 1,
4512 maximum => 100,
4513 input_title => 'Enter the applied discount:',
4514 input_message => 'between 1 and 100',
4515
4516 The message can be split over several lines using newlines, "\n" in
4517 double quoted strings.
4518
4519 input_message => "This is\na test.",
4520
4521 The maximum message length is 255 characters. UTF8 strings are handled
4522 automatically in perl 5.8 and later.
4523
4524 show_input
4525 This parameter is passed in a hash ref to "data_validation()".
4526
4527 The "show_input" parameter is used to toggle on and off the 'Show input
4528 message when cell is selected' option in the Excel data validation
4529 dialog. When the option is off an input message is not displayed even
4530 if it has been set using "input_message". It is on by default.
4531
4532 show_input => 0, # Turn the option off
4533
4534 error_title
4535 This parameter is passed in a hash ref to "data_validation()".
4536
4537 The "error_title" parameter is used to set the title of the error
4538 message that is displayed when the data validation criteria is not met.
4539 The default error title is 'Microsoft Excel'.
4540
4541 error_title => 'Input value is not valid',
4542
4543 The maximum title length is 32 characters. UTF8 strings are handled
4544 automatically in perl 5.8 and later.
4545
4546 error_message
4547 This parameter is passed in a hash ref to "data_validation()".
4548
4549 The "error_message" parameter is used to set the error message that is
4550 displayed when a cell is entered. The default error message is "The
4551 value you entered is not valid.\nA user has restricted values that can
4552 be entered into the cell.".
4553
4554 validate => 'integer',
4555 criteria => 'between',
4556 minimum => 1,
4557 maximum => 100,
4558 error_title => 'Input value is not valid',
4559 error_message => 'It should be an integer between 1 and 100',
4560
4561 The message can be split over several lines using newlines, "\n" in
4562 double quoted strings.
4563
4564 input_message => "This is\na test.",
4565
4566 The maximum message length is 255 characters. UTF8 strings are handled
4567 automatically in perl 5.8 and later.
4568
4569 error_type
4570 This parameter is passed in a hash ref to "data_validation()".
4571
4572 The "error_type" parameter is used to specify the type of error dialog
4573 that is displayed. There are 3 options:
4574
4575 'stop'
4576 'warning'
4577 'information'
4578
4579 The default is 'stop'.
4580
4581 show_error
4582 This parameter is passed in a hash ref to "data_validation()".
4583
4584 The "show_error" parameter is used to toggle on and off the 'Show error
4585 alert after invalid data is entered' option in the Excel data
4586 validation dialog. When the option is off an error message is not
4587 displayed even if it has been set using "error_message". It is on by
4588 default.
4589
4590 show_error => 0, # Turn the option off
4591
4592 Data Validation Examples
4593 Example 1. Limiting input to an integer greater than a fixed value.
4594
4595 $worksheet->data_validation('A1',
4596 {
4597 validate => 'integer',
4598 criteria => '>',
4599 value => 0,
4600 });
4601
4602 Example 2. Limiting input to an integer greater than a fixed value
4603 where the value is referenced from a cell.
4604
4605 $worksheet->data_validation('A2',
4606 {
4607 validate => 'integer',
4608 criteria => '>',
4609 value => '=E3',
4610 });
4611
4612 Example 3. Limiting input to a decimal in a fixed range.
4613
4614 $worksheet->data_validation('A3',
4615 {
4616 validate => 'decimal',
4617 criteria => 'between',
4618 minimum => 0.1,
4619 maximum => 0.5,
4620 });
4621
4622 Example 4. Limiting input to a value in a dropdown list.
4623
4624 $worksheet->data_validation('A4',
4625 {
4626 validate => 'list',
4627 source => ['open', 'high', 'close'],
4628 });
4629
4630 Example 5. Limiting input to a value in a dropdown list where the list
4631 is specified as a cell range.
4632
4633 $worksheet->data_validation('A5',
4634 {
4635 validate => 'list',
4636 source => '=E4:G4',
4637 });
4638
4639 Example 6. Limiting input to a date in a fixed range.
4640
4641 $worksheet->data_validation('A6',
4642 {
4643 validate => 'date',
4644 criteria => 'between',
4645 minimum => '2008-01-01T',
4646 maximum => '2008-12-12T',
4647 });
4648
4649 Example 7. Displaying a message when the cell is selected.
4650
4651 $worksheet->data_validation('A7',
4652 {
4653 validate => 'integer',
4654 criteria => 'between',
4655 minimum => 1,
4656 maximum => 100,
4657 input_title => 'Enter an integer:',
4658 input_message => 'between 1 and 100',
4659 });
4660
4661 See also the "data_validate.pl" program in the examples directory of
4662 the distro.
4663
4665 The following relates to worksheet objects such as images, comments and
4666 charts.
4667
4668 If you specify the height of a row that contains a worksheet object
4669 then Spreadsheet::WriteExcel will adjust the height of the object to
4670 maintain its default or user specified dimensions. In this way the
4671 object won't appear stretched or compressed in Excel.
4672
4673 However, Excel can also adjust the height of a row automatically if it
4674 contains cells that have the text wrap property set or contain large
4675 fonts. In these cases the height of the row is unknown to
4676 Spreadsheet::WriteExcel at execution time and the scaling calculations
4677 it performs are incorrect. The effect of this is that the object is
4678 stretched with the row when it is displayed in Excel.
4679
4680 In order to avoid this issue you should use the "set_row()" method to
4681 explicitly specify the height of any row that may otherwise be changed
4682 automatically by Excel.
4683
4685 Caveats
4686 The first thing to note is that there are still some outstanding issues
4687 with the implementation of formulas and functions:
4688
4689 1. Writing a formula is much slower than writing the equivalent string.
4690 2. You cannot use array constants, i.e. {1;2;3}, in functions.
4691 3. Unary minus isn't supported.
4692 4. Whitespace is not preserved around operators.
4693 5. Named ranges are not supported.
4694 6. Array formulas are not supported.
4695
4696 However, these constraints will be removed in future versions. They are
4697 here because of a trade-off between features and time. Also, it is
4698 possible to work around issue 1 using the "store_formula()" and
4699 "repeat_formula()" methods as described later in this section.
4700
4701 Introduction
4702 The following is a brief introduction to formulas and functions in
4703 Excel and Spreadsheet::WriteExcel.
4704
4705 A formula is a string that begins with an equals sign:
4706
4707 '=A1+B1'
4708 '=AVERAGE(1, 2, 3)'
4709
4710 The formula can contain numbers, strings, boolean values, cell
4711 references, cell ranges and functions. Named ranges are not supported.
4712 Formulas should be written as they appear in Excel, that is cells and
4713 functions must be in uppercase.
4714
4715 Cells in Excel are referenced using the A1 notation system where the
4716 column is designated by a letter and the row by a number. Columns range
4717 from A to IV i.e. 0 to 255, rows range from 1 to 65536. The
4718 "Spreadsheet::WriteExcel::Utility" module that is included in the
4719 distro contains helper functions for dealing with A1 notation, for
4720 example:
4721
4722 use Spreadsheet::WriteExcel::Utility;
4723
4724 ($row, $col) = xl_cell_to_rowcol('C2'); # (1, 2)
4725 $str = xl_rowcol_to_cell(1, 2); # C2
4726
4727 The Excel "$" notation in cell references is also supported. This
4728 allows you to specify whether a row or column is relative or absolute.
4729 This only has an effect if the cell is copied. The following examples
4730 show relative and absolute values.
4731
4732 '=A1' # Column and row are relative
4733 '=$A1' # Column is absolute and row is relative
4734 '=A$1' # Column is relative and row is absolute
4735 '=$A$1' # Column and row are absolute
4736
4737 Formulas can also refer to cells in other worksheets of the current
4738 workbook. For example:
4739
4740 '=Sheet2!A1'
4741 '=Sheet2!A1:A5'
4742 '=Sheet2:Sheet3!A1'
4743 '=Sheet2:Sheet3!A1:A5'
4744 q{='Test Data'!A1}
4745 q{='Test Data1:Test Data2'!A1}
4746
4747 The sheet reference and the cell reference are separated by "!" the
4748 exclamation mark symbol. If worksheet names contain spaces, commas or
4749 parentheses then Excel requires that the name is enclosed in single
4750 quotes as shown in the last two examples above. In order to avoid using
4751 a lot of escape characters you can use the quote operator "q{}" to
4752 protect the quotes. See "perlop" in the main Perl documentation. Only
4753 valid sheet names that have been added using the "add_worksheet()"
4754 method can be used in formulas. You cannot reference external
4755 workbooks.
4756
4757 The following table lists the operators that are available in Excel's
4758 formulas. The majority of the operators are the same as Perl's,
4759 differences are indicated:
4760
4761 Arithmetic operators:
4762 =====================
4763 Operator Meaning Example
4764 + Addition 1+2
4765 - Subtraction 2-1
4766 * Multiplication 2*3
4767 / Division 1/4
4768 ^ Exponentiation 2^3 # Equivalent to **
4769 - Unary minus -(1+2) # Not yet supported
4770 % Percent (Not modulus) 13% # Not supported, [1]
4771
4772
4773 Comparison operators:
4774 =====================
4775 Operator Meaning Example
4776 = Equal to A1 = B1 # Equivalent to ==
4777 <> Not equal to A1 <> B1 # Equivalent to !=
4778 > Greater than A1 > B1
4779 < Less than A1 < B1
4780 >= Greater than or equal to A1 >= B1
4781 <= Less than or equal to A1 <= B1
4782
4783
4784 String operator:
4785 ================
4786 Operator Meaning Example
4787 & Concatenation "Hello " & "World!" # [2]
4788
4789
4790 Reference operators:
4791 ====================
4792 Operator Meaning Example
4793 : Range operator A1:A4 # [3]
4794 , Union operator SUM(1, 2+2, B3) # [4]
4795
4796
4797 Notes:
4798 [1]: You can get a percentage with formatting and modulus with MOD().
4799 [2]: Equivalent to ("Hello " . "World!") in Perl.
4800 [3]: This range is equivalent to cells A1, A2, A3 and A4.
4801 [4]: The comma behaves like the list separator in Perl.
4802
4803 The range and comma operators can have different symbols in non-English
4804 versions of Excel. These will be supported in a later version of
4805 Spreadsheet::WriteExcel. European users of Excel take note:
4806
4807 $worksheet->write('A1', '=SUM(1; 2; 3)'); # Wrong!!
4808 $worksheet->write('A1', '=SUM(1, 2, 3)'); # Okay
4809
4810 The following table lists all of the core functions supported by Excel
4811 5 and Spreadsheet::WriteExcel. Any additional functions that are
4812 available through the "Analysis ToolPak" or other add-ins are not
4813 supported. These functions have all been tested to verify that they
4814 work.
4815
4816 ABS DB INDIRECT NORMINV SLN
4817 ACOS DCOUNT INFO NORMSDIST SLOPE
4818 ACOSH DCOUNTA INT NORMSINV SMALL
4819 ADDRESS DDB INTERCEPT NOT SQRT
4820 AND DEGREES IPMT NOW STANDARDIZE
4821 AREAS DEVSQ IRR NPER STDEV
4822 ASIN DGET ISBLANK NPV STDEVP
4823 ASINH DMAX ISERR ODD STEYX
4824 ATAN DMIN ISERROR OFFSET SUBSTITUTE
4825 ATAN2 DOLLAR ISLOGICAL OR SUBTOTAL
4826 ATANH DPRODUCT ISNA PEARSON SUM
4827 AVEDEV DSTDEV ISNONTEXT PERCENTILE SUMIF
4828 AVERAGE DSTDEVP ISNUMBER PERCENTRANK SUMPRODUCT
4829 BETADIST DSUM ISREF PERMUT SUMSQ
4830 BETAINV DVAR ISTEXT PI SUMX2MY2
4831 BINOMDIST DVARP KURT PMT SUMX2PY2
4832 CALL ERROR.TYPE LARGE POISSON SUMXMY2
4833 CEILING EVEN LEFT POWER SYD
4834 CELL EXACT LEN PPMT T
4835 CHAR EXP LINEST PROB TAN
4836 CHIDIST EXPONDIST LN PRODUCT TANH
4837 CHIINV FACT LOG PROPER TDIST
4838 CHITEST FALSE LOG10 PV TEXT
4839 CHOOSE FDIST LOGEST QUARTILE TIME
4840 CLEAN FIND LOGINV RADIANS TIMEVALUE
4841 CODE FINV LOGNORMDIST RAND TINV
4842 COLUMN FISHER LOOKUP RANK TODAY
4843 COLUMNS FISHERINV LOWER RATE TRANSPOSE
4844 COMBIN FIXED MATCH REGISTER.ID TREND
4845 CONCATENATE FLOOR MAX REPLACE TRIM
4846 CONFIDENCE FORECAST MDETERM REPT TRIMMEAN
4847 CORREL FREQUENCY MEDIAN RIGHT TRUE
4848 COS FTEST MID ROMAN TRUNC
4849 COSH FV MIN ROUND TTEST
4850 COUNT GAMMADIST MINUTE ROUNDDOWN TYPE
4851 COUNTA GAMMAINV MINVERSE ROUNDUP UPPER
4852 COUNTBLANK GAMMALN MIRR ROW VALUE
4853 COUNTIF GEOMEAN MMULT ROWS VAR
4854 COVAR GROWTH MOD RSQ VARP
4855 CRITBINOM HARMEAN MODE SEARCH VDB
4856 DATE HLOOKUP MONTH SECOND VLOOKUP
4857 DATEVALUE HOUR N SIGN WEEKDAY
4858 DAVERAGE HYPGEOMDIST NA SIN WEIBULL
4859 DAY IF NEGBINOMDIST SINH YEAR
4860 DAYS360 INDEX NORMDIST SKEW ZTEST
4861
4862 You can also modify the module to support function names in the
4863 following languages: German, French, Spanish, Portuguese, Dutch,
4864 Finnish, Italian and Swedish. See the "function_locale.pl" program in
4865 the "examples" directory of the distro.
4866
4867 For a general introduction to Excel's formulas and an explanation of
4868 the syntax of the function refer to the Excel help files or the
4869 following:
4870 <http://office.microsoft.com/en-us/assistance/CH062528031033.aspx>.
4871
4872 If your formula doesn't work in Spreadsheet::WriteExcel try the
4873 following:
4874
4875 1. Verify that the formula works in Excel (or Gnumeric or OpenOffice.org).
4876 2. Ensure that it isn't on the Caveats list shown above.
4877 3. Ensure that cell references and formula names are in uppercase.
4878 4. Ensure that you are using ':' as the range operator, A1:A4.
4879 5. Ensure that you are using ',' as the union operator, SUM(1,2,3).
4880 6. Ensure that the function is in the above table.
4881
4882 If you go through steps 1-6 and you still have a problem, mail me.
4883
4884 Improving performance when working with formulas
4885 Writing a large number of formulas with Spreadsheet::WriteExcel can be
4886 slow. This is due to the fact that each formula has to be parsed and
4887 with the current implementation this is computationally expensive.
4888
4889 However, in a lot of cases the formulas that you write will be quite
4890 similar, for example:
4891
4892 $worksheet->write_formula('B1', '=A1 * 3 + 50', $format);
4893 $worksheet->write_formula('B2', '=A2 * 3 + 50', $format);
4894 ...
4895 ...
4896 $worksheet->write_formula('B99', '=A999 * 3 + 50', $format);
4897 $worksheet->write_formula('B1000', '=A1000 * 3 + 50', $format);
4898
4899 In this example the cell reference changes in iterations from "A1" to
4900 "A1000". The parser treats this variable as a token and arranges it
4901 according to predefined rules. However, since the parser is oblivious
4902 to the value of the token, it is essentially performing the same
4903 calculation 1000 times. This is inefficient.
4904
4905 The way to avoid this inefficiency and thereby speed up the writing of
4906 formulas is to parse the formula once and then repeatedly substitute
4907 similar tokens.
4908
4909 A formula can be parsed and stored via the "store_formula()" worksheet
4910 method. You can then use the "repeat_formula()" method to substitute
4911 $pattern, $replace pairs in the stored formula:
4912
4913 my $formula = $worksheet->store_formula('=A1 * 3 + 50');
4914
4915 for my $row (0..999) {
4916 $worksheet->repeat_formula($row, 1, $formula, $format, 'A1', 'A'.($row +1));
4917 }
4918
4919 On an arbitrary test machine this method was 10 times faster than the
4920 brute force method shown above.
4921
4922 For more information about how Spreadsheet::WriteExcel parses and
4923 stores formulas see the "Spreadsheet::WriteExcel::Formula" man page.
4924
4925 It should be noted however that the overall speed of direct formula
4926 parsing will be improved in a future version.
4927
4929 See Spreadsheet::WriteExcel::Examples for a full list of examples.
4930
4931 Example 1
4932 The following example shows some of the basic features of
4933 Spreadsheet::WriteExcel.
4934
4935 #!/usr/bin/perl -w
4936
4937 use strict;
4938 use Spreadsheet::WriteExcel;
4939
4940 # Create a new workbook called simple.xls and add a worksheet
4941 my $workbook = Spreadsheet::WriteExcel->new('simple.xls');
4942 my $worksheet = $workbook->add_worksheet();
4943
4944 # The general syntax is write($row, $column, $token). Note that row and
4945 # column are zero indexed
4946
4947 # Write some text
4948 $worksheet->write(0, 0, 'Hi Excel!');
4949
4950
4951 # Write some numbers
4952 $worksheet->write(2, 0, 3); # Writes 3
4953 $worksheet->write(3, 0, 3.00000); # Writes 3
4954 $worksheet->write(4, 0, 3.00001); # Writes 3.00001
4955 $worksheet->write(5, 0, 3.14159); # TeX revision no.?
4956
4957
4958 # Write some formulas
4959 $worksheet->write(7, 0, '=A3 + A6');
4960 $worksheet->write(8, 0, '=IF(A5>3,"Yes", "No")');
4961
4962
4963 # Write a hyperlink
4964 $worksheet->write(10, 0, 'http://www.perl.com/');
4965
4966 Example 2
4967 The following is a general example which demonstrates some features of
4968 working with multiple worksheets.
4969
4970 #!/usr/bin/perl -w
4971
4972 use strict;
4973 use Spreadsheet::WriteExcel;
4974
4975 # Create a new Excel workbook
4976 my $workbook = Spreadsheet::WriteExcel->new('regions.xls');
4977
4978 # Add some worksheets
4979 my $north = $workbook->add_worksheet('North');
4980 my $south = $workbook->add_worksheet('South');
4981 my $east = $workbook->add_worksheet('East');
4982 my $west = $workbook->add_worksheet('West');
4983
4984 # Add a Format
4985 my $format = $workbook->add_format();
4986 $format->set_bold();
4987 $format->set_color('blue');
4988
4989 # Add a caption to each worksheet
4990 foreach my $worksheet ($workbook->sheets()) {
4991 $worksheet->write(0, 0, 'Sales', $format);
4992 }
4993
4994 # Write some data
4995 $north->write(0, 1, 200000);
4996 $south->write(0, 1, 100000);
4997 $east->write (0, 1, 150000);
4998 $west->write (0, 1, 100000);
4999
5000 # Set the active worksheet
5001 $south->activate();
5002
5003 # Set the width of the first column
5004 $south->set_column(0, 0, 20);
5005
5006 # Set the active cell
5007 $south->set_selection(0, 1);
5008
5009 Example 3
5010 This example shows how to use a conditional numerical format with
5011 colours to indicate if a share price has gone up or down.
5012
5013 use strict;
5014 use Spreadsheet::WriteExcel;
5015
5016 # Create a new workbook and add a worksheet
5017 my $workbook = Spreadsheet::WriteExcel->new('stocks.xls');
5018 my $worksheet = $workbook->add_worksheet();
5019
5020 # Set the column width for columns 1, 2, 3 and 4
5021 $worksheet->set_column(0, 3, 15);
5022
5023
5024 # Create a format for the column headings
5025 my $header = $workbook->add_format();
5026 $header->set_bold();
5027 $header->set_size(12);
5028 $header->set_color('blue');
5029
5030
5031 # Create a format for the stock price
5032 my $f_price = $workbook->add_format();
5033 $f_price->set_align('left');
5034 $f_price->set_num_format('$0.00');
5035
5036
5037 # Create a format for the stock volume
5038 my $f_volume = $workbook->add_format();
5039 $f_volume->set_align('left');
5040 $f_volume->set_num_format('#,##0');
5041
5042
5043 # Create a format for the price change. This is an example of a
5044 # conditional format. The number is formatted as a percentage. If it is
5045 # positive it is formatted in green, if it is negative it is formatted
5046 # in red and if it is zero it is formatted as the default font colour
5047 # (in this case black). Note: the [Green] format produces an unappealing
5048 # lime green. Try [Color 10] instead for a dark green.
5049 #
5050 my $f_change = $workbook->add_format();
5051 $f_change->set_align('left');
5052 $f_change->set_num_format('[Green]0.0%;[Red]-0.0%;0.0%');
5053
5054
5055 # Write out the data
5056 $worksheet->write(0, 0, 'Company',$header);
5057 $worksheet->write(0, 1, 'Price', $header);
5058 $worksheet->write(0, 2, 'Volume', $header);
5059 $worksheet->write(0, 3, 'Change', $header);
5060
5061 $worksheet->write(1, 0, 'Damage Inc.' );
5062 $worksheet->write(1, 1, 30.25, $f_price ); # $30.25
5063 $worksheet->write(1, 2, 1234567, $f_volume); # 1,234,567
5064 $worksheet->write(1, 3, 0.085, $f_change); # 8.5% in green
5065
5066 $worksheet->write(2, 0, 'Dump Corp.' );
5067 $worksheet->write(2, 1, 1.56, $f_price ); # $1.56
5068 $worksheet->write(2, 2, 7564, $f_volume); # 7,564
5069 $worksheet->write(2, 3, -0.015, $f_change); # -1.5% in red
5070
5071 $worksheet->write(3, 0, 'Rev Ltd.' );
5072 $worksheet->write(3, 1, 0.13, $f_price ); # $0.13
5073 $worksheet->write(3, 2, 321, $f_volume); # 321
5074 $worksheet->write(3, 3, 0, $f_change); # 0 in the font color (black)
5075
5076 Example 4
5077 The following is a simple example of using functions.
5078
5079 #!/usr/bin/perl -w
5080
5081 use strict;
5082 use Spreadsheet::WriteExcel;
5083
5084 # Create a new workbook and add a worksheet
5085 my $workbook = Spreadsheet::WriteExcel->new('stats.xls');
5086 my $worksheet = $workbook->add_worksheet('Test data');
5087
5088 # Set the column width for columns 1
5089 $worksheet->set_column(0, 0, 20);
5090
5091
5092 # Create a format for the headings
5093 my $format = $workbook->add_format();
5094 $format->set_bold();
5095
5096
5097 # Write the sample data
5098 $worksheet->write(0, 0, 'Sample', $format);
5099 $worksheet->write(0, 1, 1);
5100 $worksheet->write(0, 2, 2);
5101 $worksheet->write(0, 3, 3);
5102 $worksheet->write(0, 4, 4);
5103 $worksheet->write(0, 5, 5);
5104 $worksheet->write(0, 6, 6);
5105 $worksheet->write(0, 7, 7);
5106 $worksheet->write(0, 8, 8);
5107
5108 $worksheet->write(1, 0, 'Length', $format);
5109 $worksheet->write(1, 1, 25.4);
5110 $worksheet->write(1, 2, 25.4);
5111 $worksheet->write(1, 3, 24.8);
5112 $worksheet->write(1, 4, 25.0);
5113 $worksheet->write(1, 5, 25.3);
5114 $worksheet->write(1, 6, 24.9);
5115 $worksheet->write(1, 7, 25.2);
5116 $worksheet->write(1, 8, 24.8);
5117
5118 # Write some statistical functions
5119 $worksheet->write(4, 0, 'Count', $format);
5120 $worksheet->write(4, 1, '=COUNT(B1:I1)');
5121
5122 $worksheet->write(5, 0, 'Sum', $format);
5123 $worksheet->write(5, 1, '=SUM(B2:I2)');
5124
5125 $worksheet->write(6, 0, 'Average', $format);
5126 $worksheet->write(6, 1, '=AVERAGE(B2:I2)');
5127
5128 $worksheet->write(7, 0, 'Min', $format);
5129 $worksheet->write(7, 1, '=MIN(B2:I2)');
5130
5131 $worksheet->write(8, 0, 'Max', $format);
5132 $worksheet->write(8, 1, '=MAX(B2:I2)');
5133
5134 $worksheet->write(9, 0, 'Standard Deviation', $format);
5135 $worksheet->write(9, 1, '=STDEV(B2:I2)');
5136
5137 $worksheet->write(10, 0, 'Kurtosis', $format);
5138 $worksheet->write(10, 1, '=KURT(B2:I2)');
5139
5140 Example 5
5141 The following example converts a tab separated file called "tab.txt"
5142 into an Excel file called "tab.xls".
5143
5144 #!/usr/bin/perl -w
5145
5146 use strict;
5147 use Spreadsheet::WriteExcel;
5148
5149 open (TABFILE, 'tab.txt') or die "tab.txt: $!";
5150
5151 my $workbook = Spreadsheet::WriteExcel->new('tab.xls');
5152 my $worksheet = $workbook->add_worksheet();
5153
5154 # Row and column are zero indexed
5155 my $row = 0;
5156
5157 while (<TABFILE>) {
5158 chomp;
5159 # Split on single tab
5160 my @Fld = split('\t', $_);
5161
5162 my $col = 0;
5163 foreach my $token (@Fld) {
5164 $worksheet->write($row, $col, $token);
5165 $col++;
5166 }
5167 $row++;
5168 }
5169
5170 NOTE: This is a simple conversion program for illustrative purposes
5171 only. For converting a CSV or Tab separated or any other type of
5172 delimited text file to Excel I recommend the more rigorous csv2xls
5173 program that is part of H.Merijn Brand's Text::CSV_XS module distro.
5174
5175 See the examples/csv2xls link here:
5176 <http://search.cpan.org/~hmbrand/Text-CSV_XS/MANIFEST>.
5177
5178 Additional Examples
5179 The following is a description of the example files that are provided
5180 in the standard Spreadsheet::WriteExcel distribution. They demonstrate
5181 the different features and options of the module. See
5182 Spreadsheet::WriteExcel::Examples for more details.
5183
5184 Getting started
5185 ===============
5186 a_simple.pl A get started example with some basic features.
5187 demo.pl A demo of some of the available features.
5188 regions.pl A simple example of multiple worksheets.
5189 stats.pl Basic formulas and functions.
5190 formats.pl All the available formatting on several worksheets.
5191 bug_report.pl A template for submitting bug reports.
5192
5193
5194 Advanced
5195 ========
5196 autofilter.pl Examples of worksheet autofilters.
5197 autofit.pl Simulate Excel's autofit for column widths.
5198 bigfile.pl Write past the 7MB limit with OLE::Storage_Lite.
5199 cgi.pl A simple CGI program.
5200 chart_area.pl A demo of area style charts.
5201 chart_bar.pl A demo of bar (vertical histogram) style charts.
5202 chart_column.pl A demo of column (histogram) style charts.
5203 chart_line.pl A demo of line style charts.
5204 chart_pie.pl A demo of pie style charts.
5205 chart_scatter.pl A demo of scatter style charts.
5206 chart_stock.pl A demo of stock style charts.
5207 chess.pl An example of reusing formatting via properties.
5208 colors.pl A demo of the colour palette and named colours.
5209 comments1.pl Add comments to worksheet cells.
5210 comments2.pl Add comments with advanced options.
5211 copyformat.pl Example of copying a cell format.
5212 data_validate.pl An example of data validation and dropdown lists.
5213 date_time.pl Write dates and times with write_date_time().
5214 defined_name.pl Example of how to create defined names.
5215 diag_border.pl A simple example of diagonal cell borders.
5216 easter_egg.pl Expose the Excel97 flight simulator.
5217 filehandle.pl Examples of working with filehandles.
5218 formula_result.pl Formulas with user specified results.
5219 headers.pl Examples of worksheet headers and footers.
5220 hide_sheet.pl Simple example of hiding a worksheet.
5221 hyperlink1.pl Shows how to create web hyperlinks.
5222 hyperlink2.pl Examples of internal and external hyperlinks.
5223 images.pl Adding images to worksheets.
5224 indent.pl An example of cell indentation.
5225 merge1.pl A simple example of cell merging.
5226 merge2.pl A simple example of cell merging with formatting.
5227 merge3.pl Add hyperlinks to merged cells.
5228 merge4.pl An advanced example of merging with formatting.
5229 merge5.pl An advanced example of merging with formatting.
5230 merge6.pl An example of merging with Unicode strings.
5231 mod_perl1.pl A simple mod_perl 1 program.
5232 mod_perl2.pl A simple mod_perl 2 program.
5233 outline.pl An example of outlines and grouping.
5234 outline_collapsed.pl An example of collapsed outlines.
5235 panes.pl An examples of how to create panes.
5236 properties.pl Add document properties to a workbook.
5237 protection.pl Example of cell locking and formula hiding.
5238 repeat.pl Example of writing repeated formulas.
5239 right_to_left.pl Change default sheet direction to right to left.
5240 row_wrap.pl How to wrap data from one worksheet onto another.
5241 sales.pl An example of a simple sales spreadsheet.
5242 sendmail.pl Send an Excel email attachment using Mail::Sender.
5243 stats_ext.pl Same as stats.pl with external references.
5244 stocks.pl Demonstrates conditional formatting.
5245 tab_colors.pl Example of how to set worksheet tab colours.
5246 textwrap.pl Demonstrates text wrapping options.
5247 win32ole.pl A sample Win32::OLE example for comparison.
5248 write_arrays.pl Example of writing 1D or 2D arrays of data.
5249 write_handler1.pl Example of extending the write() method. Step 1.
5250 write_handler2.pl Example of extending the write() method. Step 2.
5251 write_handler3.pl Example of extending the write() method. Step 3.
5252 write_handler4.pl Example of extending the write() method. Step 4.
5253 write_to_scalar.pl Example of writing an Excel file to a Perl scalar.
5254
5255
5256 Unicode
5257 =======
5258 unicode_utf16.pl Simple example of using Unicode UTF16 strings.
5259 unicode_utf16_japan.pl Write Japanese Unicode strings using UTF-16.
5260 unicode_cyrillic.pl Write Russian Cyrillic strings using UTF-8.
5261 unicode_list.pl List the chars in a Unicode font.
5262 unicode_2022_jp.pl Japanese: ISO-2022-JP to utf8 in perl 5.8.
5263 unicode_8859_11.pl Thai: ISO-8859_11 to utf8 in perl 5.8.
5264 unicode_8859_7.pl Greek: ISO-8859_7 to utf8 in perl 5.8.
5265 unicode_big5.pl Chinese: BIG5 to utf8 in perl 5.8.
5266 unicode_cp1251.pl Russian: CP1251 to utf8 in perl 5.8.
5267 unicode_cp1256.pl Arabic: CP1256 to utf8 in perl 5.8.
5268 unicode_koi8r.pl Russian: KOI8-R to utf8 in perl 5.8.
5269 unicode_polish_utf8.pl Polish : UTF8 to utf8 in perl 5.8.
5270 unicode_shift_jis.pl Japanese: Shift JIS to utf8 in perl 5.8.
5271
5272
5273 Utility
5274 =======
5275 csv2xls.pl Program to convert a CSV file to an Excel file.
5276 tab2xls.pl Program to convert a tab separated file to xls.
5277 datecalc1.pl Convert Unix/Perl time to Excel time.
5278 datecalc2.pl Calculate an Excel date using Date::Calc.
5279 lecxe.pl Convert Excel to WriteExcel using Win32::OLE.
5280
5281
5282 Developer
5283 =========
5284 convertA1.pl Helper functions for dealing with A1 notation.
5285 function_locale.pl Add non-English function names to Formula.pm.
5286 writeA1.pl Example of how to extend the module.
5287
5289 The following limits are imposed by Excel:
5290
5291 Description Limit
5292 ----------------------------------- ------
5293 Maximum number of chars in a string 32767
5294 Maximum number of columns 256
5295 Maximum number of rows 65536
5296 Maximum chars in a sheet name 31
5297 Maximum chars in a header/footer 254
5298
5299 For Excel 2007+ file limits see the Excel::Writer::XLSX module.
5300
5301 The minimum file size is 6K due to the OLE overhead. The maximum file
5302 size is approximately 7MB (7087104 bytes) of BIFF data. This can be
5303 extended by installing Takanori Kawai's OLE::Storage_Lite module
5304 <http://search.cpan.org/search?dist=OLE-Storage_Lite> see the
5305 "bigfile.pl" example in the "examples" directory of the distro.
5306
5308 The latest version of this module is always available at:
5309 <http://search.cpan.org/search?dist=Spreadsheet-WriteExcel/>.
5310
5312 This module requires Perl >= 5.005, Parse::RecDescent, File::Temp and
5313 OLE::Storage_Lite:
5314
5315 http://search.cpan.org/search?dist=Parse-RecDescent/ # For formulas.
5316 http://search.cpan.org/search?dist=File-Temp/ # For set_tempdir().
5317 http://search.cpan.org/search?dist=OLE-Storage_Lite/ # For files > 7MB.
5318
5319 Note, these aren't strict requirements. Spreadsheet::WriteExcel will
5320 work without these modules if you don't use write_formula(),
5321 set_tempdir() or create files greater than 7MB. However, it is best to
5322 install them if possible and they will be installed automatically if
5323 you use a tool such as CPAN.pm or ppm.
5324
5326 See the INSTALL or install.html docs that come with the distribution
5327 or:
5328 <http://search.cpan.org/src/JMCNAMARA/Spreadsheet-WriteExcel-2.31/INSTALL>.
5329
5331 Spreadsheet::WriteExcel will work on the majority of Windows, UNIX and
5332 Macintosh platforms. Specifically, the module will work on any system
5333 where perl packs floats in the 64 bit IEEE format. The float must also
5334 be in little-endian format but it will be reversed if necessary. Thus:
5335
5336 print join(' ', map { sprintf '%#02x', $_ } unpack('C*', pack 'd', 1.2345)), "\n";
5337
5338 should give (or in reverse order):
5339
5340 0x8d 0x97 0x6e 0x12 0x83 0xc0 0xf3 0x3f
5341
5342 In general, if you don't know whether your system supports a 64 bit
5343 IEEE float or not, it probably does. If your system doesn't, WriteExcel
5344 will "croak()" with the message given in the "DIAGNOSTICS" section. You
5345 can check which platforms the module has been tested on at the CPAN
5346 testers site:
5347 <http://testers.cpan.org/search?request=dist&dist=Spreadsheet-WriteExcel>.
5348
5350 Filename required by Spreadsheet::WriteExcel->new()
5351 A filename must be given in the constructor.
5352
5353 Can't open filename. It may be in use or protected.
5354 The file cannot be opened for writing. The directory that you are
5355 writing to may be protected or the file may be in use by another
5356 program.
5357
5358 Unable to create tmp files via File::Temp::tempfile()...
5359 This is a "-w" warning. You will see it if you are using
5360 Spreadsheet::WriteExcel in an environment where temporary files
5361 cannot be created, in which case all data will be stored in memory.
5362 The warning is for information only: it does not affect creation
5363 but it will affect the speed of execution for large files. See the
5364 "set_tempdir" workbook method.
5365
5366 Maximum file size, 7087104, exceeded.
5367 The current OLE implementation only supports a maximum BIFF file of
5368 this size. This limit can be extended, see the "LIMITATIONS"
5369 section.
5370
5371 Can't locate Parse/RecDescent.pm in @INC ...
5372 Spreadsheet::WriteExcel requires the Parse::RecDescent module.
5373 Download it from CPAN:
5374 <http://search.cpan.org/search?dist=Parse-RecDescent>
5375
5376 Couldn't parse formula ...
5377 There are a large number of warnings which relate to badly formed
5378 formulas and functions. See the "FORMULAS AND FUNCTIONS IN EXCEL"
5379 section for suggestions on how to avoid these errors. You should
5380 also check the formula in Excel to ensure that it is valid.
5381
5382 Required floating point format not supported on this platform.
5383 Operating system doesn't support 64 bit IEEE float or it is byte-
5384 ordered in a way unknown to WriteExcel.
5385
5386 'file.xls' cannot be accessed. The file may be read-only ...
5387 You may sometimes encounter the following error when trying to open
5388 a file in Excel: "file.xls cannot be accessed. The file may be
5389 read-only, or you may be trying to access a read-only location. Or,
5390 the server the document is stored on may not be responding."
5391
5392 This error generally means that the Excel file has been corrupted.
5393 There are two likely causes of this: the file was FTPed in ASCII
5394 mode instead of binary mode or else the file was created with
5395 "UTF-8" data returned by an XML parser. See "Warning about
5396 XML::Parser and perl 5.6" for further details.
5397
5399 The following is some general information about the Excel binary format
5400 for anyone who may be interested.
5401
5402 Excel data is stored in the "Binary Interchange File Format" (BIFF)
5403 file format. Details of this format are given in "Excel 97-2007 Binary
5404 File Format Specification"
5405 <http://www.microsoft.com/interop/docs/OfficeBinaryFormats.mspx>.
5406
5407 Daniel Rentz of OpenOffice.org has also written a detailed description
5408 of the Excel workbook records, see
5409 <http://sc.openoffice.org/excelfileformat.pdf>.
5410
5411 Charles Wybble has collected together additional information about the
5412 Excel file format. See "The Chicago Project" at
5413 <http://chicago.sourceforge.net/devel/>.
5414
5415 The BIFF data is stored along with other data in an OLE Compound File.
5416 This is a structured storage which acts like a file system within a
5417 file. A Compound File is comprised of storages and streams which, to
5418 follow the file system analogy, are like directories and files.
5419
5420 The OLE format is explained in the "Windows Compound Binary File Format
5421 Specification"
5422 <http://www.microsoft.com/interop/docs/supportingtechnologies.mspx>
5423
5424 The Digital Imaging Group have also detailed the OLE format in the
5425 JPEG2000 specification: see Appendix A of
5426 <http://www.i3a.org/pdf/wg1n1017.pdf>.
5427
5428 Please note that the provision of this information does not constitute
5429 an invitation to start hacking at the BIFF or OLE file formats. There
5430 are more interesting ways to waste your time. ;-)
5431
5433 Depending on your requirements, background and general sensibilities
5434 you may prefer one of the following methods of getting data into Excel:
5435
5436 • Win32::OLE module and office automation
5437
5438 This requires a Windows platform and an installed copy of Excel.
5439 This is the most powerful and complete method for interfacing with
5440 Excel. See
5441 <http://www.activestate.com/ASPN/Reference/Products/ActivePerl-5.6/faq/Windows/ActivePerl-Winfaq12.html>
5442 and
5443 <http://www.activestate.com/ASPN/Reference/Products/ActivePerl-5.6/site/lib/Win32/OLE.html>.
5444 If your main platform is UNIX but you have the resources to set up
5445 a separate Win32/MSOffice server, you can convert office documents
5446 to text, postscript or PDF using Win32::OLE. For a demonstration of
5447 how to do this using Perl see Docserver:
5448 <http://search.cpan.org/search?mode=module&query=docserver>.
5449
5450 • CSV, comma separated variables or text
5451
5452 If the file extension is "csv", Excel will open and convert this
5453 format automatically. Generating a valid CSV file isn't as easy as
5454 it seems. Have a look at the DBD::RAM, DBD::CSV, Text::xSV and
5455 Text::CSV_XS modules.
5456
5457 • DBI with DBD::ADO or DBD::ODBC
5458
5459 Excel files contain an internal index table that allows them to act
5460 like a database file. Using one of the standard Perl database
5461 modules you can connect to an Excel file as a database.
5462
5463 • DBD::Excel
5464
5465 You can also access Spreadsheet::WriteExcel using the standard DBI
5466 interface via Takanori Kawai's DBD::Excel module
5467 <http://search.cpan.org/dist/DBD-Excel>
5468
5469 • Spreadsheet::WriteExcelXML
5470
5471 This module allows you to create an Excel XML file using the same
5472 interface as Spreadsheet::WriteExcel. See:
5473 <http://search.cpan.org/dist/Spreadsheet-WriteExcelXML>
5474
5475 • Excel::Template
5476
5477 This module allows you to create an Excel file from an XML template
5478 in a manner similar to HTML::Template. See
5479 <http://search.cpan.org/dist/Excel-Template/>.
5480
5481 • Spreadsheet::WriteExcel::FromXML
5482
5483 This module allows you to turn a simple XML file into an Excel file
5484 using Spreadsheet::WriteExcel as a back-end. The format of the XML
5485 file is defined by a supplied DTD:
5486 <http://search.cpan.org/dist/Spreadsheet-WriteExcel-FromXML>.
5487
5488 • Spreadsheet::WriteExcel::Simple
5489
5490 This provides an easier interface to Spreadsheet::WriteExcel:
5491 <http://search.cpan.org/dist/Spreadsheet-WriteExcel-Simple>.
5492
5493 • Spreadsheet::WriteExcel::FromDB
5494
5495 This is a useful module for creating Excel files directly from a DB
5496 table: <http://search.cpan.org/dist/Spreadsheet-WriteExcel-FromDB>.
5497
5498 • HTML tables
5499
5500 This is an easy way of adding formatting via a text based format.
5501
5502 • XML or HTML
5503
5504 The Excel XML and HTML file specification are available from
5505 <http://msdn.microsoft.com/library/officedev/ofxml2k/ofxml2k.htm>.
5506
5507 For other Perl-Excel modules try the following search:
5508 <http://search.cpan.org/search?mode=module&query=excel>.
5509
5511 To read data from Excel files try:
5512
5513 • Spreadsheet::ParseExcel
5514
5515 This uses the OLE::Storage-Lite module to extract data from an
5516 Excel file. <http://search.cpan.org/dist/Spreadsheet-ParseExcel>.
5517
5518 • Spreadsheet::ParseExcel_XLHTML
5519
5520 This module uses Spreadsheet::ParseExcel's interface but uses
5521 xlHtml (see below) to do the conversion:
5522 <http://search.cpan.org/dist/Spreadsheet-ParseExcel_XLHTML>
5523 Spreadsheet::ParseExcel_XLHTML
5524
5525 • xlHtml
5526
5527 This is an open source "Excel to HTML Converter" C/C++ project at
5528 <http://chicago.sourceforge.net/xlhtml/>.
5529
5530 • DBD::Excel (reading)
5531
5532 You can also access Spreadsheet::ParseExcel using the standard DBI
5533 interface via Takanori Kawai's DBD::Excel module
5534 <http://search.cpan.org/dist/DBD-Excel>.
5535
5536 • Win32::OLE module and office automation (reading)
5537
5538 See, the section "WRITING EXCEL FILES".
5539
5540 • HTML tables (reading)
5541
5542 If the files are saved from Excel in a HTML format the data can be
5543 accessed using HTML::TableExtract
5544 <http://search.cpan.org/dist/HTML-TableExtract>.
5545
5546 • DBI with DBD::ADO or DBD::ODBC.
5547
5548 See, the section "WRITING EXCEL FILES".
5549
5550 • XML::Excel
5551
5552 Converts Excel files to XML using Spreadsheet::ParseExcel
5553 <http://search.cpan.org/dist/XML-Excel>.
5554
5555 • OLE::Storage, aka LAOLA
5556
5557 This is a Perl interface to OLE file formats. In particular, the
5558 distro contains an Excel to HTML converter called Herbert,
5559 <http://user.cs.tu-berlin.de/~schwartz/pmh/>. This has been
5560 superseded by the Spreadsheet::ParseExcel module.
5561
5562 For other Perl-Excel modules try the following search:
5563 <http://search.cpan.org/search?mode=module&query=excel>.
5564
5565 If you wish to view Excel files on a UNIX/Linux platform check out the
5566 excellent Gnumeric spreadsheet application at
5567 <http://www.gnome.org/projects/gnumeric/> or OpenOffice.org at
5568 <http://www.openoffice.org/>.
5569
5570 If you wish to view Excel files on a Windows platform which doesn't
5571 have Excel installed you can use the free Microsoft Excel Viewer
5572 <http://office.microsoft.com/downloads/2000/xlviewer.aspx>.
5573
5575 An Excel file is a binary file within a binary file. It contains
5576 several interlinked checksums and changing even one byte can cause it
5577 to become corrupted.
5578
5579 As such you cannot simply append or update an Excel file. The only way
5580 to achieve this is to read the entire file into memory, make the
5581 required changes or additions and then write the file out again.
5582
5583 You can read and rewrite an Excel file using the
5584 Spreadsheet::ParseExcel::SaveParser module which is a wrapper around
5585 Spreadsheet::ParseExcel and Spreadsheet::WriteExcel. It is part of the
5586 Spreadsheet::ParseExcel package:
5587 <http://search.cpan.org/search?dist=Spreadsheet-ParseExcel>.
5588
5589 However, you can only rewrite the features that Spreadsheet::WriteExcel
5590 supports so macros, graphs and some other features in the original
5591 Excel file will be lost. Also, formulas aren't rewritten, only the
5592 result of a formula is written.
5593
5594 Here is an example:
5595
5596 #!/usr/bin/perl -w
5597
5598 use strict;
5599 use Spreadsheet::ParseExcel;
5600 use Spreadsheet::ParseExcel::SaveParser;
5601
5602 # Open the template with SaveParser
5603 my $parser = new Spreadsheet::ParseExcel::SaveParser;
5604 my $template = $parser->Parse('template.xls');
5605
5606 my $sheet = 0;
5607 my $row = 0;
5608 my $col = 0;
5609
5610 # Get the format from the cell
5611 my $format = $template->{Worksheet}[$sheet]
5612 ->{Cells}[$row][$col]
5613 ->{FormatNo};
5614
5615 # Write data to some cells
5616 $template->AddCell(0, $row, $col, 1, $format);
5617 $template->AddCell(0, $row+1, $col, "Hello", $format);
5618
5619 # Add a new worksheet
5620 $template->AddWorksheet('New Data');
5621
5622 # The SaveParser SaveAs() method returns a reference to a
5623 # Spreadsheet::WriteExcel object. If you wish you can then
5624 # use this to access any of the methods that aren't
5625 # available from the SaveParser object. If you don't need
5626 # to do this just use SaveAs().
5627 #
5628 my $workbook;
5629
5630 {
5631 # SaveAs generates a lot of harmless warnings about unset
5632 # Worksheet properties. You can ignore them if you wish.
5633 local $^W = 0;
5634
5635 # Rewrite the file or save as a new file
5636 $workbook = $template->SaveAs('new.xls');
5637 }
5638
5639 # Use Spreadsheet::WriteExcel methods
5640 my $worksheet = $workbook->sheets(0);
5641
5642 $worksheet->write($row+2, $col, "World2");
5643
5644 $workbook->close();
5645
5647 You must be careful when using Spreadsheet::WriteExcel in conjunction
5648 with perl 5.6 and XML::Parser (and other XML parsers) due to the fact
5649 that the data returned by the parser is generally in "UTF-8" format.
5650
5651 When "UTF-8" strings are added to Spreadsheet::WriteExcel's internal
5652 data it causes the generated Excel file to become corrupt.
5653
5654 Note, this doesn't affect perl 5.005 (which doesn't try to handle
5655 "UTF-8") or 5.8 (which handles it correctly).
5656
5657 To avoid this problem you should upgrade to perl 5.8, if possible, or
5658 else you should convert the output data from XML::Parser to ASCII or
5659 ISO-8859-1 using one of the following methods:
5660
5661 $new_str = pack 'C*', unpack 'U*', $utf8_str;
5662
5663
5664 use Unicode::MapUTF8 'from_utf8';
5665 $new_str = from_utf8({-str => $utf8_str, -charset => 'ISO-8859-1'});
5666
5668 If you have Office Service Pack 3 (SP3) installed you may see the
5669 following warning when you open a file created by
5670 Spreadsheet::WriteExcel:
5671
5672 "File Error: data may have been lost".
5673
5674 This is usually caused by multiple instances of data in a cell.
5675
5676 SP3 changed Excel's default behaviour when it encounters multiple data
5677 in a cell so that it issues a warning when the file is opened and it
5678 displays the first data that was written. Prior to SP3 it didn't issue
5679 a warning and displayed the last data written.
5680
5681 For a longer discussion and some workarounds see the following:
5682 <http://groups.google.com/group/spreadsheet-writeexcel/browse_thread/thread/3dcea40e6620af3a>.
5683
5685 Formulas are formulae.
5686
5687 XML and "UTF-8" data on perl 5.6 can cause Excel files created by
5688 Spreadsheet::WriteExcel to become corrupt. See "Warning about
5689 XML::Parser and perl 5.6" for further details.
5690
5691 The format object that is used with a "merge_range()" method call is
5692 marked internally as being associated with a merged range. It is a
5693 fatal error to use a merged format in a non-merged cell. The current
5694 workaround is to use separate formats for merged and non-merged cell.
5695 This restriction will be removed in a future release.
5696
5697 Nested formulas sometimes aren't parsed correctly and give a result of
5698 "#VALUE". If you come across a formula that parses like this, let me
5699 know.
5700
5701 Spreadsheet::ParseExcel: All formulas created by
5702 Spreadsheet::WriteExcel are read as having a value of zero. This is
5703 because Spreadsheet::WriteExcel only stores the formula and not the
5704 calculated result.
5705
5706 OpenOffice.org: No known issues in this release.
5707
5708 Gnumeric: No known issues in this release.
5709
5710 If you wish to submit a bug report run the "bug_report.pl" program in
5711 the "examples" directory of the distro.
5712
5714 Spreadsheet::WriteExcel is in maintenance only mode and has effectively
5715 been superseded by Excel::Writer::XLSX.
5716
5717 Excel::Writer::XLSX is an API compatible, drop-in replacement for
5718 Spreadsheet::WriteExcel. It also has many more features such as
5719 conditional formats, better charts, better formula handling, Excel
5720 tables and even sparklines.
5721
5722 To convert your Spreadsheet::WriteExcel program to Excel::Writer::XLSX
5723 you only need do the following:
5724
5725 • Substitute Excel::Writer::XLSX for Spreadsheet::WriteExcel in your
5726 program.
5727
5728 • Change the file extension of the output file from ".xls" to
5729 ".xlsx".
5730
5731 • Optionally replace "store_formula()" and "repeat_formula()" with
5732 "write_formula()" which is no longer an expensive operation in
5733 Excel::Writer::XLSX. However, you can leave them unchanged if
5734 required.
5735
5736 There are some differences between the formats and the modules that are
5737 worth noting:
5738
5739 • The default font in the XLSX format is Calibri 11 not Arial 10.
5740
5741 • Default column widths and row heights are different between XLS and
5742 XLSX.
5743
5744 • The Excel::Writer::XLSX module uses more memory by default but has
5745 a optimisation mode to reduce usage for large files.
5746
5747 • The XLSX format doesn't have reading support that is as complete as
5748 Spreadsheet::ParseExcel.
5749
5751 The Spreadsheet::WriteExcel source code in host on github:
5752 <http://github.com/jmcnamara/spreadsheet-writeexcel>.
5753
5755 There is a Google group for discussing and asking questions about
5756 Spreadsheet::WriteExcel. This is a good place to search to see if your
5757 question has been asked before:
5758 <http://groups.google.com/group/spreadsheet-writeexcel>.
5759
5760 Alternatively you can keep up to date with future releases by
5761 subscribing at: <http://freshmeat.net/projects/writeexcel/>.
5762
5764 If you'd care to donate to the Spreadsheet::WriteExcel project, you can
5765 do so via PayPal: <http://tinyurl.com/7ayes>.
5766
5768 Spreadsheet::ParseExcel:
5769 <http://search.cpan.org/dist/Spreadsheet-ParseExcel>.
5770
5771 Spreadsheet-WriteExcel-FromXML:
5772 <http://search.cpan.org/dist/Spreadsheet-WriteExcel-FromXML>.
5773
5774 Spreadsheet::WriteExcel::FromDB:
5775 <http://search.cpan.org/dist/Spreadsheet-WriteExcel-FromDB>.
5776
5777 Excel::Template: <http://search.cpan.org/~rkinyon/Excel-Template/>.
5778
5779 DateTime::Format::Excel:
5780 <http://search.cpan.org/dist/DateTime-Format-Excel>.
5781
5782 "Reading and writing Excel files with Perl" by Teodor Zlatanov, at IBM
5783 developerWorks:
5784 <http://www-106.ibm.com/developerworks/library/l-pexcel/>.
5785
5786 "Excel-Dateien mit Perl erstellen - Controller im Gluck" by Peter
5787 Dintelmann and Christian Kirsch in the German Unix/web journal iX:
5788 <http://www.heise.de/ix/artikel/2001/06/175/>.
5789
5790 Spreadsheet::WriteExcel documentation in Japanese by Takanori Kawai.
5791 <http://member.nifty.ne.jp/hippo2000/perltips/Spreadsheet/WriteExcel.htm>.
5792
5793 Oesterly user brushes with fame:
5794 <http://oesterly.com/releases/12102000.html>.
5795
5796 The csv2xls program that is part of Text::CSV_XS:
5797 <http://search.cpan.org/~hmbrand/Text-CSV_XS/MANIFEST>.
5798
5800 The following people contributed to the debugging and testing of
5801 Spreadsheet::WriteExcel:
5802
5803 Alexander Farber, Andre de Bruin, Arthur@ais, Artur Silveira da Cunha,
5804 Bob Rose, Borgar Olsen, Brian Foley, Brian White, Bob Mackay, Cedric
5805 Bouvier, Chad Johnson, CPAN testers, Damyan Ivanov, Daniel Berger,
5806 Daniel Gardner, Dmitry Kochurov, Eric Frazier, Ernesto Baschny, Felipe
5807 Perez Galiana, Gordon Simpson, Hanc Pavel, Harold Bamford, James
5808 Holmes, James Wilkinson, Johan Ekenberg, Johann Hanne, Jonathan Scott
5809 Duff, J.C. Wren, Kenneth Stacey, Keith Miller, Kyle Krom, Marc
5810 Rosenthal, Markus Schmitz, Michael Braig, Michael Buschauer, Mike
5811 Blazer, Michael Erickson, Michael W J West, Ning Xie, Paul J. Falbe,
5812 Paul Medynski, Peter Dintelmann, Pierre Laplante, Praveen Kotha, Reto
5813 Badertscher, Rich Sorden, Shane Ashby, Sharron McKenzie, Shenyu Zheng,
5814 Stephan Loescher, Steve Sapovits, Sven Passig, Svetoslav Marinov, Tamas
5815 Gulacsi, Troy Daniels, Vahe Sarkissian.
5816
5817 The following people contributed patches, examples or Excel
5818 information:
5819
5820 Andrew Benham, Bill Young, Cedric Bouvier, Charles Wybble, Daniel
5821 Rentz, David Robins, Franco Venturi, Guy Albertelli, Ian Penman, John
5822 Heitmann, Jon Guy, Kyle R. Burton, Pierre-Jean Vouette, Rubio, Marco
5823 Geri, Mark Fowler, Matisse Enzer, Sam Kington, Takanori Kawai, Tom
5824 O'Sullivan.
5825
5826 Many thanks to Ron McKelvey, Ronzo Consulting for Siemens, who
5827 sponsored the development of the formula caching routines.
5828
5829 Many thanks to Cassens Transport who sponsored the development of the
5830 embedded charts and autofilters.
5831
5832 Additional thanks to Takanori Kawai for translating the documentation
5833 into Japanese.
5834
5835 Gunnar Wolf maintains the Debian distro.
5836
5837 Thanks to Damian Conway for the excellent Parse::RecDescent.
5838
5839 Thanks to Tim Jenness for File::Temp.
5840
5841 Thanks to Michael Meeks and Jody Goldberg for their work on Gnumeric.
5842
5844 Because this software is licensed free of charge, there is no warranty
5845 for the software, to the extent permitted by applicable law. Except
5846 when otherwise stated in writing the copyright holders and/or other
5847 parties provide the software "as is" without warranty of any kind,
5848 either expressed or implied, including, but not limited to, the implied
5849 warranties of merchantability and fitness for a particular purpose. The
5850 entire risk as to the quality and performance of the software is with
5851 you. Should the software prove defective, you assume the cost of all
5852 necessary servicing, repair, or correction.
5853
5854 In no event unless required by applicable law or agreed to in writing
5855 will any copyright holder, or any other party who may modify and/or
5856 redistribute the software as permitted by the above licence, be liable
5857 to you for damages, including any general, special, incidental, or
5858 consequential damages arising out of the use or inability to use the
5859 software (including but not limited to loss of data or data being
5860 rendered inaccurate or losses sustained by you or third parties or a
5861 failure of the software to operate with any other software), even if
5862 such holder or other party has been advised of the possibility of such
5863 damages.
5864
5866 Either the Perl Artistic Licence
5867 <http://dev.perl.org/licenses/artistic.html> or the GPL
5868 <http://www.opensource.org/licenses/gpl-license.php>.
5869
5871 John McNamara jmcnamara@cpan.org
5872
5873 The ashtray says
5874 You were up all night.
5875 When you went to bed
5876 With your darkest mind.
5877 Your pillow wept
5878 And covered your eyes.
5879 And you finally slept
5880 While the sun caught fire.
5881
5882 You've changed.
5883 -- Jeff Tweedy
5884
5886 Copyright MM-MMXII, John McNamara.
5887
5888 All Rights Reserved. This module is free software. It may be used,
5889 redistributed and/or modified under the same terms as Perl itself.
5890
5891
5892
5893perl v5.32.1 2021-01-27 Spreadsheet::WriteExcel(3)