1Spreadsheet::WriteExcelU:s:eErxaCmopnltersi(b3u)ted PerlSpDroecaudmsehneteatt:i:oWnriteExcel::Examples(3)
2
3
4
6 Examples - Spreadsheet::WriteExcel example programs.
7
9 This is a documentation only module showing the examples that are
10 included in the Spreadsheet::WriteExcel distribution.
11
12 This file was auto-generated via the gen_examples_pod.pl program that
13 is also included in the examples directory.
14
16 The following is a list of the 85 example programs that are included in
17 the Spreadsheet::WriteExcel distribution.
18
19 • "Example: a_simple.pl" A get started example with some basic
20 features.
21
22 • "Example: demo.pl" A demo of some of the available features.
23
24 • "Example: regions.pl" A simple example of multiple worksheets.
25
26 • "Example: stats.pl" Basic formulas and functions.
27
28 • "Example: formats.pl" All the available formatting on several
29 worksheets.
30
31 • "Example: bug_report.pl" A template for submitting bug reports.
32
33 • "Example: autofilter.pl" Examples of worksheet autofilters.
34
35 • "Example: autofit.pl" Simulate Excel's autofit for column widths.
36
37 • "Example: bigfile.pl" Write past the 7MB limit with
38 OLE::Storage_Lite.
39
40 • "Example: cgi.pl" A simple CGI program.
41
42 • "Example: chart_area.pl" A demo of area style charts.
43
44 • "Example: chart_bar.pl" A demo of bar (vertical histogram) style
45 charts.
46
47 • "Example: chart_column.pl" A demo of column (histogram) style
48 charts.
49
50 • "Example: chart_line.pl" A demo of line style charts.
51
52 • "Example: chart_pie.pl" A demo of pie style charts.
53
54 • "Example: chart_scatter.pl" A demo of scatter style charts.
55
56 • "Example: chart_stock.pl" A demo of stock style charts.
57
58 • "Example: chess.pl" An example of reusing formatting via
59 properties.
60
61 • "Example: colors.pl" A demo of the colour palette and named
62 colours.
63
64 • "Example: comments1.pl" Add comments to worksheet cells.
65
66 • "Example: comments2.pl" Add comments with advanced options.
67
68 • "Example: copyformat.pl" Example of copying a cell format.
69
70 • "Example: data_validate.pl" An example of data validation and
71 dropdown lists.
72
73 • "Example: date_time.pl" Write dates and times with
74 write_date_time().
75
76 • "Example: defined_name.pl" Example of how to create defined names.
77
78 • "Example: diag_border.pl" A simple example of diagonal cell
79 borders.
80
81 • "Example: easter_egg.pl" Expose the Excel97 flight simulator.
82
83 • "Example: filehandle.pl" Examples of working with filehandles.
84
85 • "Example: formula_result.pl" Formulas with user specified results.
86
87 • "Example: headers.pl" Examples of worksheet headers and footers.
88
89 • "Example: hide_sheet.pl" Simple example of hiding a worksheet.
90
91 • "Example: hyperlink1.pl" Shows how to create web hyperlinks.
92
93 • "Example: hyperlink2.pl" Examples of internal and external
94 hyperlinks.
95
96 • "Example: images.pl" Adding images to worksheets.
97
98 • "Example: indent.pl" An example of cell indentation.
99
100 • "Example: merge1.pl" A simple example of cell merging.
101
102 • "Example: merge2.pl" A simple example of cell merging with
103 formatting.
104
105 • "Example: merge3.pl" Add hyperlinks to merged cells.
106
107 • "Example: merge4.pl" An advanced example of merging with
108 formatting.
109
110 • "Example: merge5.pl" An advanced example of merging with
111 formatting.
112
113 • "Example: merge6.pl" An example of merging with Unicode strings.
114
115 • "Example: mod_perl1.pl" A simple mod_perl 1 program.
116
117 • "Example: mod_perl2.pl" A simple mod_perl 2 program.
118
119 • "Example: outline.pl" An example of outlines and grouping.
120
121 • "Example: outline_collapsed.pl" An example of collapsed outlines.
122
123 • "Example: panes.pl" An examples of how to create panes.
124
125 • "Example: properties.pl" Add document properties to a workbook.
126
127 • "Example: protection.pl" Example of cell locking and formula
128 hiding.
129
130 • "Example: repeat.pl" Example of writing repeated formulas.
131
132 • "Example: right_to_left.pl" Change default sheet direction to right
133 to left.
134
135 • "Example: row_wrap.pl" How to wrap data from one worksheet onto
136 another.
137
138 • "Example: sales.pl" An example of a simple sales spreadsheet.
139
140 • "Example: sendmail.pl" Send an Excel email attachment using
141 Mail::Sender.
142
143 • "Example: stats_ext.pl" Same as stats.pl with external references.
144
145 • "Example: stocks.pl" Demonstrates conditional formatting.
146
147 • "Example: tab_colors.pl" Example of how to set worksheet tab
148 colours.
149
150 • "Example: textwrap.pl" Demonstrates text wrapping options.
151
152 • "Example: win32ole.pl" A sample Win32::OLE example for comparison.
153
154 • "Example: write_arrays.pl" Example of writing 1D or 2D arrays of
155 data.
156
157 • "Example: write_handler1.pl" Example of extending the write()
158 method. Step 1.
159
160 • "Example: write_handler2.pl" Example of extending the write()
161 method. Step 2.
162
163 • "Example: write_handler3.pl" Example of extending the write()
164 method. Step 3.
165
166 • "Example: write_handler4.pl" Example of extending the write()
167 method. Step 4.
168
169 • "Example: write_to_scalar.pl" Example of writing an Excel file to a
170 Perl scalar.
171
172 • "Example: unicode_utf16.pl" Simple example of using Unicode UTF16
173 strings.
174
175 • "Example: unicode_utf16_japan.pl" Write Japanese Unicode strings
176 using UTF-16.
177
178 • "Example: unicode_cyrillic.pl" Write Russian Cyrillic strings using
179 UTF-8.
180
181 • "Example: unicode_list.pl" List the chars in a Unicode font.
182
183 • "Example: unicode_2022_jp.pl" Japanese: ISO-2022-JP to utf8 in perl
184 5.8.
185
186 • "Example: unicode_8859_11.pl" Thai: ISO-8859_11 to utf8 in perl
187 5.8.
188
189 • "Example: unicode_8859_7.pl" Greek: ISO-8859_7 to utf8 in perl
190 5.8.
191
192 • "Example: unicode_big5.pl" Chinese: BIG5 to utf8 in perl
193 5.8.
194
195 • "Example: unicode_cp1251.pl" Russian: CP1251 to utf8 in perl
196 5.8.
197
198 • "Example: unicode_cp1256.pl" Arabic: CP1256 to utf8 in perl
199 5.8.
200
201 • "Example: unicode_koi8r.pl" Russian: KOI8-R to utf8 in perl
202 5.8.
203
204 • "Example: unicode_polish_utf8.pl" Polish : UTF8 to utf8 in
205 perl 5.8.
206
207 • "Example: unicode_shift_jis.pl" Japanese: Shift JIS to utf8 in
208 perl 5.8.
209
210 • "Example: csv2xls.pl" Program to convert a CSV file to an Excel
211 file.
212
213 • "Example: tab2xls.pl" Program to convert a tab separated file to
214 xls.
215
216 • "Example: datecalc1.pl" Convert Unix/Perl time to Excel time.
217
218 • "Example: datecalc2.pl" Calculate an Excel date using Date::Calc.
219
220 • "Example: lecxe.pl" Convert Excel to WriteExcel using Win32::OLE.
221
222 • "Example: convertA1.pl" Helper functions for dealing with A1
223 notation.
224
225 • "Example: function_locale.pl" Add non-English function names to
226 Formula.pm.
227
228 • "Example: writeA1.pl" Example of how to extend the module.
229
230 Example: a_simple.pl
231 A simple example of how to use the Spreadsheet::WriteExcel module to
232 write some text and numbers to an Excel binary file.
233
234 Source code for this example:
235
236 #!/usr/bin/perl -w
237
238 ###############################################################################
239 #
240 # A simple example of how to use the Spreadsheet::WriteExcel module to write
241 # some text and numbers to an Excel binary file.
242 #
243 # reverse('(c)'), March 2001, John McNamara, jmcnamara@cpan.org
244 #
245
246 use strict;
247 use Spreadsheet::WriteExcel;
248
249 # Create a new workbook called simple.xls and add a worksheet
250 my $workbook = Spreadsheet::WriteExcel->new('a_simple.xls');
251 my $worksheet = $workbook->add_worksheet();
252
253 # The general syntax is write($row, $column, $token). Note that row and
254 # column are zero indexed
255 #
256
257 # Write some text
258 $worksheet->write(0, 0, "Hi Excel!");
259
260
261 # Write some numbers
262 $worksheet->write(2, 0, 3); # Writes 3
263 $worksheet->write(3, 0, 3.00000); # Writes 3
264 $worksheet->write(4, 0, 3.00001); # Writes 3.00001
265 $worksheet->write(5, 0, 3.14159); # TeX revision no.?
266
267
268 # Write some formulas
269 $worksheet->write(7, 0, '=A3 + A6');
270 $worksheet->write(8, 0, '=IF(A5>3,"Yes", "No")');
271
272
273 # Write a hyperlink
274 $worksheet->write(10, 0, 'http://www.perl.com/');
275
276 __END__
277
278 Download this example:
279 <http://cpansearch.perl.org/src/JMCNAMARA/Spreadsheet-WriteExcel-2.40/examples/a_simple.pl>
280
281 Example: demo.pl
282 A simple demo of some of the features of Spreadsheet::WriteExcel.
283
284 This program is used to create the project screenshot for Freshmeat:
285 <http://freshmeat.net/projects/writeexcel/>
286
287 Source code for this example:
288
289 #!/usr/bin/perl -w
290
291 #######################################################################
292 #
293 # A simple demo of some of the features of Spreadsheet::WriteExcel.
294 #
295 # This program is used to create the project screenshot for Freshmeat:
296 # L<http://freshmeat.net/projects/writeexcel/>
297 #
298 # reverse('(c)'), October 2001, John McNamara, jmcnamara@cpan.org
299 #
300
301 use strict;
302 use Spreadsheet::WriteExcel;
303
304 my $workbook = Spreadsheet::WriteExcel->new("demo.xls");
305 my $worksheet = $workbook->add_worksheet('Demo');
306 my $worksheet2 = $workbook->add_worksheet('Another sheet');
307 my $worksheet3 = $workbook->add_worksheet('And another');
308
309 my $bold = $workbook->add_format(bold => 1);
310
311
312 #######################################################################
313 #
314 # Write a general heading
315 #
316 $worksheet->set_column('A:A', 36, $bold);
317 $worksheet->set_column('B:B', 20 );
318 $worksheet->set_row (0, 40 );
319
320 my $heading = $workbook->add_format(
321 bold => 1,
322 color => 'blue',
323 size => 16,
324 merge => 1,
325 align => 'vcenter',
326 );
327
328 my @headings = ('Features of Spreadsheet::WriteExcel', '');
329 $worksheet->write_row('A1', \@headings, $heading);
330
331
332 #######################################################################
333 #
334 # Some text examples
335 #
336 my $text_format = $workbook->add_format(
337 bold => 1,
338 italic => 1,
339 color => 'red',
340 size => 18,
341 font =>'Lucida Calligraphy'
342 );
343
344 # A phrase in Cyrillic
345 my $unicode = pack "H*", "042d0442043e002004440440043004370430002004".
346 "3d043000200440044304410441043a043e043c0021";
347
348
349 $worksheet->write('A2', "Text");
350 $worksheet->write('B2', "Hello Excel");
351 $worksheet->write('A3', "Formatted text");
352 $worksheet->write('B3', "Hello Excel", $text_format);
353 $worksheet->write('A4', "Unicode text");
354 $worksheet->write_utf16be_string('B4', $unicode);
355
356 #######################################################################
357 #
358 # Some numeric examples
359 #
360 my $num1_format = $workbook->add_format(num_format => '$#,##0.00');
361 my $num2_format = $workbook->add_format(num_format => ' d mmmm yyy');
362
363
364 $worksheet->write('A5', "Numbers");
365 $worksheet->write('B5', 1234.56);
366 $worksheet->write('A6', "Formatted numbers");
367 $worksheet->write('B6', 1234.56, $num1_format);
368 $worksheet->write('A7', "Formatted numbers");
369 $worksheet->write('B7', 37257, $num2_format);
370
371
372 #######################################################################
373 #
374 # Formulae
375 #
376 $worksheet->set_selection('B8');
377 $worksheet->write('A8', 'Formulas and functions, "=SIN(PI()/4)"');
378 $worksheet->write('B8', '=SIN(PI()/4)');
379
380
381 #######################################################################
382 #
383 # Hyperlinks
384 #
385 $worksheet->write('A9', "Hyperlinks");
386 $worksheet->write('B9', 'http://www.perl.com/' );
387
388
389 #######################################################################
390 #
391 # Images
392 #
393 $worksheet->write('A10', "Images");
394 $worksheet->insert_image('B10', 'republic.png', 16, 8);
395
396
397 #######################################################################
398 #
399 # Misc
400 #
401 $worksheet->write('A18', "Page/printer setup");
402 $worksheet->write('A19', "Multiple worksheets");
403
404 __END__
405
406 Download this example:
407 <http://cpansearch.perl.org/src/JMCNAMARA/Spreadsheet-WriteExcel-2.40/examples/demo.pl>
408
409 Example: regions.pl
410 An example of how to use the Spreadsheet:WriteExcel module to write a
411 basic Excel workbook with multiple worksheets.
412
413 Source code for this example:
414
415 #!/usr/bin/perl -w
416
417 ###############################################################################
418 #
419 # An example of how to use the Spreadsheet:WriteExcel module to write a basic
420 # Excel workbook with multiple worksheets.
421 #
422 # reverse('(c)'), March 2001, John McNamara, jmcnamara@cpan.org
423 #
424
425 use strict;
426 use Spreadsheet::WriteExcel;
427
428 # Create a new Excel workbook
429 my $workbook = Spreadsheet::WriteExcel->new("regions.xls");
430
431 # Add some worksheets
432 my $north = $workbook->add_worksheet("North");
433 my $south = $workbook->add_worksheet("South");
434 my $east = $workbook->add_worksheet("East");
435 my $west = $workbook->add_worksheet("West");
436
437 # Add a Format
438 my $format = $workbook->add_format();
439 $format->set_bold();
440 $format->set_color('blue');
441
442 # Add a caption to each worksheet
443 foreach my $worksheet ($workbook->sheets()) {
444 $worksheet->write(0, 0, "Sales", $format);
445 }
446
447 # Write some data
448 $north->write(0, 1, 200000);
449 $south->write(0, 1, 100000);
450 $east->write (0, 1, 150000);
451 $west->write (0, 1, 100000);
452
453 # Set the active worksheet
454 $south->activate();
455
456 # Set the width of the first column
457 $south->set_column(0, 0, 20);
458
459 # Set the active cell
460 $south->set_selection(0, 1);
461
462 Download this example:
463 <http://cpansearch.perl.org/src/JMCNAMARA/Spreadsheet-WriteExcel-2.40/examples/regions.pl>
464
465 Example: stats.pl
466 A simple example of how to use functions with the
467 Spreadsheet::WriteExcel module.
468
469 Source code for this example:
470
471 #!/usr/bin/perl -w
472
473 ###############################################################################
474 #
475 # A simple example of how to use functions with the Spreadsheet::WriteExcel
476 # module.
477 #
478 # reverse('(c)'), March 2001, John McNamara, jmcnamara@cpan.org
479 #
480
481 use strict;
482 use Spreadsheet::WriteExcel;
483
484 # Create a new workbook and add a worksheet
485 my $workbook = Spreadsheet::WriteExcel->new("stats.xls");
486 my $worksheet = $workbook->add_worksheet('Test data');
487
488 # Set the column width for columns 1
489 $worksheet->set_column(0, 0, 20);
490
491
492 # Create a format for the headings
493 my $format = $workbook->add_format();
494 $format->set_bold();
495
496
497 # Write the sample data
498 $worksheet->write(0, 0, 'Sample', $format);
499 $worksheet->write(0, 1, 1);
500 $worksheet->write(0, 2, 2);
501 $worksheet->write(0, 3, 3);
502 $worksheet->write(0, 4, 4);
503 $worksheet->write(0, 5, 5);
504 $worksheet->write(0, 6, 6);
505 $worksheet->write(0, 7, 7);
506 $worksheet->write(0, 8, 8);
507
508 $worksheet->write(1, 0, 'Length', $format);
509 $worksheet->write(1, 1, 25.4);
510 $worksheet->write(1, 2, 25.4);
511 $worksheet->write(1, 3, 24.8);
512 $worksheet->write(1, 4, 25.0);
513 $worksheet->write(1, 5, 25.3);
514 $worksheet->write(1, 6, 24.9);
515 $worksheet->write(1, 7, 25.2);
516 $worksheet->write(1, 8, 24.8);
517
518 # Write some statistical functions
519 $worksheet->write(4, 0, 'Count', $format);
520 $worksheet->write(4, 1, '=COUNT(B1:I1)');
521
522 $worksheet->write(5, 0, 'Sum', $format);
523 $worksheet->write(5, 1, '=SUM(B2:I2)');
524
525 $worksheet->write(6, 0, 'Average', $format);
526 $worksheet->write(6, 1, '=AVERAGE(B2:I2)');
527
528 $worksheet->write(7, 0, 'Min', $format);
529 $worksheet->write(7, 1, '=MIN(B2:I2)');
530
531 $worksheet->write(8, 0, 'Max', $format);
532 $worksheet->write(8, 1, '=MAX(B2:I2)');
533
534 $worksheet->write(9, 0, 'Standard Deviation', $format);
535 $worksheet->write(9, 1, '=STDEV(B2:I2)');
536
537 $worksheet->write(10, 0, 'Kurtosis', $format);
538 $worksheet->write(10, 1, '=KURT(B2:I2)');
539
540 __END__
541
542 Download this example:
543 <http://cpansearch.perl.org/src/JMCNAMARA/Spreadsheet-WriteExcel-2.40/examples/stats.pl>
544
545 Example: formats.pl
546 Examples of formatting using the Spreadsheet::WriteExcel module.
547
548 This program demonstrates almost all possible formatting options. It is
549 worth running this program and viewing the output Excel file if you are
550 interested in the various formatting possibilities.
551
552 Source code for this example:
553
554 #!/usr/bin/perl -w
555
556 ###############################################################################
557 #
558 # Examples of formatting using the Spreadsheet::WriteExcel module.
559 #
560 # This program demonstrates almost all possible formatting options. It is worth
561 # running this program and viewing the output Excel file if you are interested
562 # in the various formatting possibilities.
563 #
564 # reverse('(c)'), September 2002, John McNamara, jmcnamara@cpan.org
565 #
566
567 use strict;
568 use Spreadsheet::WriteExcel;
569
570 my $workbook = Spreadsheet::WriteExcel->new('formats.xls');
571
572 # Some common formats
573 my $center = $workbook->add_format(align => 'center');
574 my $heading = $workbook->add_format(align => 'center', bold => 1);
575
576 # The named colors
577 my %colors = (
578 0x08, 'black',
579 0x0C, 'blue',
580 0x10, 'brown',
581 0x0F, 'cyan',
582 0x17, 'gray',
583 0x11, 'green',
584 0x0B, 'lime',
585 0x0E, 'magenta',
586 0x12, 'navy',
587 0x35, 'orange',
588 0x21, 'pink',
589 0x14, 'purple',
590 0x0A, 'red',
591 0x16, 'silver',
592 0x09, 'white',
593 0x0D, 'yellow',
594 );
595
596 # Call these subroutines to demonstrate different formatting options
597 intro();
598 fonts();
599 named_colors();
600 standard_colors();
601 numeric_formats();
602 borders();
603 patterns();
604 alignment();
605 misc();
606
607 # Note: this is required
608 $workbook->close();
609
610
611 ######################################################################
612 #
613 # Intro.
614 #
615 sub intro {
616
617 my $worksheet = $workbook->add_worksheet('Introduction');
618
619 $worksheet->set_column(0, 0, 60);
620
621 my $format = $workbook->add_format();
622 $format->set_bold();
623 $format->set_size(14);
624 $format->set_color('blue');
625 $format->set_align('center');
626
627 my $format2 = $workbook->add_format();
628 $format2->set_bold();
629 $format2->set_color('blue');
630
631 $worksheet->write(2, 0, 'This workbook demonstrates some of', $format);
632 $worksheet->write(3, 0, 'the formatting options provided by', $format);
633 $worksheet->write(4, 0, 'the Spreadsheet::WriteExcel module.', $format);
634
635 $worksheet->write('A7', 'Sections:', $format2);
636 $worksheet->write('A8', "internal:Fonts!A1", 'Fonts' );
637 $worksheet->write('A9', "internal:'Named colors'!A1", 'Named colors' );
638 $worksheet->write('A10', "internal:'Standard colors'!A1", 'Standard colors');
639 $worksheet->write('A11', "internal:'Numeric formats'!A1", 'Numeric formats');
640 $worksheet->write('A12', "internal:Borders!A1", 'Borders' );
641 $worksheet->write('A13', "internal:Patterns!A1", 'Patterns' );
642 $worksheet->write('A14', "internal:Alignment!A1", 'Alignment' );
643 $worksheet->write('A15', "internal:Miscellaneous!A1", 'Miscellaneous' );
644
645 }
646
647
648 ######################################################################
649 #
650 # Demonstrate the named colors.
651 #
652 sub named_colors {
653
654 my $worksheet = $workbook->add_worksheet('Named colors');
655
656 $worksheet->set_column(0, 3, 15);
657
658 $worksheet->write(0, 0, "Index", $heading);
659 $worksheet->write(0, 1, "Index", $heading);
660 $worksheet->write(0, 2, "Name", $heading);
661 $worksheet->write(0, 3, "Color", $heading);
662
663 my $i = 1;
664
665 while (my($index, $color) = each %colors) {
666 my $format = $workbook->add_format(
667 bg_color => $color,
668 pattern => 1,
669 border => 1
670 );
671
672 $worksheet->write($i+1, 0, $index, $center);
673 $worksheet->write($i+1, 1, sprintf("0x%02X", $index), $center);
674 $worksheet->write($i+1, 2, $color, $center);
675 $worksheet->write($i+1, 3, '', $format);
676 $i++;
677 }
678 }
679
680
681 ######################################################################
682 #
683 # Demonstrate the standard Excel colors in the range 8..63.
684 #
685 sub standard_colors {
686
687 my $worksheet = $workbook->add_worksheet('Standard colors');
688
689 $worksheet->set_column(0, 3, 15);
690
691 $worksheet->write(0, 0, "Index", $heading);
692 $worksheet->write(0, 1, "Index", $heading);
693 $worksheet->write(0, 2, "Color", $heading);
694 $worksheet->write(0, 3, "Name", $heading);
695
696 for my $i (8..63) {
697 my $format = $workbook->add_format(
698 bg_color => $i,
699 pattern => 1,
700 border => 1
701 );
702
703 $worksheet->write(($i -7), 0, $i, $center);
704 $worksheet->write(($i -7), 1, sprintf("0x%02X", $i), $center);
705 $worksheet->write(($i -7), 2, '', $format);
706
707 # Add the color names
708 if (exists $colors{$i}) {
709 $worksheet->write(($i -7), 3, $colors{$i}, $center);
710
711 }
712 }
713 }
714
715
716 ######################################################################
717 #
718 # Demonstrate the standard numeric formats.
719 #
720 sub numeric_formats {
721
722 my $worksheet = $workbook->add_worksheet('Numeric formats');
723
724 $worksheet->set_column(0, 4, 15);
725 $worksheet->set_column(5, 5, 45);
726
727 $worksheet->write(0, 0, "Index", $heading);
728 $worksheet->write(0, 1, "Index", $heading);
729 $worksheet->write(0, 2, "Unformatted", $heading);
730 $worksheet->write(0, 3, "Formatted", $heading);
731 $worksheet->write(0, 4, "Negative", $heading);
732 $worksheet->write(0, 5, "Format", $heading);
733
734 my @formats;
735 push @formats, [ 0x00, 1234.567, 0, 'General' ];
736 push @formats, [ 0x01, 1234.567, 0, '0' ];
737 push @formats, [ 0x02, 1234.567, 0, '0.00' ];
738 push @formats, [ 0x03, 1234.567, 0, '#,##0' ];
739 push @formats, [ 0x04, 1234.567, 0, '#,##0.00' ];
740 push @formats, [ 0x05, 1234.567, -1234.567, '($#,##0_);($#,##0)' ];
741 push @formats, [ 0x06, 1234.567, -1234.567, '($#,##0_);[Red]($#,##0)' ];
742 push @formats, [ 0x07, 1234.567, -1234.567, '($#,##0.00_);($#,##0.00)' ];
743 push @formats, [ 0x08, 1234.567, -1234.567, '($#,##0.00_);[Red]($#,##0.00)' ];
744 push @formats, [ 0x09, 0.567, 0, '0%' ];
745 push @formats, [ 0x0a, 0.567, 0, '0.00%' ];
746 push @formats, [ 0x0b, 1234.567, 0, '0.00E+00' ];
747 push @formats, [ 0x0c, 0.75, 0, '# ?/?' ];
748 push @formats, [ 0x0d, 0.3125, 0, '# ??/??' ];
749 push @formats, [ 0x0e, 36892.521, 0, 'm/d/yy' ];
750 push @formats, [ 0x0f, 36892.521, 0, 'd-mmm-yy' ];
751 push @formats, [ 0x10, 36892.521, 0, 'd-mmm' ];
752 push @formats, [ 0x11, 36892.521, 0, 'mmm-yy' ];
753 push @formats, [ 0x12, 36892.521, 0, 'h:mm AM/PM' ];
754 push @formats, [ 0x13, 36892.521, 0, 'h:mm:ss AM/PM' ];
755 push @formats, [ 0x14, 36892.521, 0, 'h:mm' ];
756 push @formats, [ 0x15, 36892.521, 0, 'h:mm:ss' ];
757 push @formats, [ 0x16, 36892.521, 0, 'm/d/yy h:mm' ];
758 push @formats, [ 0x25, 1234.567, -1234.567, '(#,##0_);(#,##0)' ];
759 push @formats, [ 0x26, 1234.567, -1234.567, '(#,##0_);[Red](#,##0)' ];
760 push @formats, [ 0x27, 1234.567, -1234.567, '(#,##0.00_);(#,##0.00)' ];
761 push @formats, [ 0x28, 1234.567, -1234.567, '(#,##0.00_);[Red](#,##0.00)' ];
762 push @formats, [ 0x29, 1234.567, -1234.567, '_(* #,##0_);_(* (#,##0);_(* "-"_);_(@_)' ];
763 push @formats, [ 0x2a, 1234.567, -1234.567, '_($* #,##0_);_($* (#,##0);_($* "-"_);_(@_)' ];
764 push @formats, [ 0x2b, 1234.567, -1234.567, '_(* #,##0.00_);_(* (#,##0.00);_(* "-"??_);_(@_)' ];
765 push @formats, [ 0x2c, 1234.567, -1234.567, '_($* #,##0.00_);_($* (#,##0.00);_($* "-"??_);_(@_)' ];
766 push @formats, [ 0x2d, 36892.521, 0, 'mm:ss' ];
767 push @formats, [ 0x2e, 3.0153, 0, '[h]:mm:ss' ];
768 push @formats, [ 0x2f, 36892.521, 0, 'mm:ss.0' ];
769 push @formats, [ 0x30, 1234.567, 0, '##0.0E+0' ];
770 push @formats, [ 0x31, 1234.567, 0, '@' ];
771
772 my $i;
773 foreach my $format (@formats){
774 my $style = $workbook->add_format();
775 $style->set_num_format($format->[0]);
776
777 $i++;
778 $worksheet->write($i, 0, $format->[0], $center);
779 $worksheet->write($i, 1, sprintf("0x%02X", $format->[0]), $center);
780 $worksheet->write($i, 2, $format->[1], $center);
781 $worksheet->write($i, 3, $format->[1], $style);
782
783 if ($format->[2]) {
784 $worksheet->write($i, 4, $format->[2], $style);
785 }
786
787 $worksheet->write_string($i, 5, $format->[3]);
788 }
789 }
790
791
792 ######################################################################
793 #
794 # Demonstrate the font options.
795 #
796 sub fonts {
797
798 my $worksheet = $workbook->add_worksheet('Fonts');
799
800 $worksheet->set_column(0, 0, 30);
801 $worksheet->set_column(1, 1, 10);
802
803 $worksheet->write(0, 0, "Font name", $heading);
804 $worksheet->write(0, 1, "Font size", $heading);
805
806 my @fonts;
807 push @fonts, [ 10, 'Arial' ];
808 push @fonts, [ 12, 'Arial' ];
809 push @fonts, [ 14, 'Arial' ];
810 push @fonts, [ 12, 'Arial Black' ];
811 push @fonts, [ 12, 'Arial Narrow' ];
812 push @fonts, [ 12, 'Century Schoolbook' ];
813 push @fonts, [ 12, 'Courier' ];
814 push @fonts, [ 12, 'Courier New' ];
815 push @fonts, [ 12, 'Garamond' ];
816 push @fonts, [ 12, 'Impact' ];
817 push @fonts, [ 12, 'Lucida Handwriting'] ;
818 push @fonts, [ 12, 'Times New Roman' ];
819 push @fonts, [ 12, 'Symbol' ];
820 push @fonts, [ 12, 'Wingdings' ];
821 push @fonts, [ 12, 'A font that doesn\'t exist' ];
822
823 my $i;
824 foreach my $font (@fonts){
825 my $format = $workbook->add_format();
826
827 $format->set_size($font->[0]);
828 $format->set_font($font->[1]);
829
830 $i++;
831 $worksheet->write($i, 0, $font->[1], $format);
832 $worksheet->write($i, 1, $font->[0], $format);
833 }
834
835 }
836
837
838 ######################################################################
839 #
840 # Demonstrate the standard Excel border styles.
841 #
842 sub borders {
843
844 my $worksheet = $workbook->add_worksheet('Borders');
845
846 $worksheet->set_column(0, 4, 10);
847 $worksheet->set_column(5, 5, 40);
848
849 $worksheet->write(0, 0, "Index", $heading);
850 $worksheet->write(0, 1, "Index", $heading);
851 $worksheet->write(0, 3, "Style", $heading);
852 $worksheet->write(0, 5, "The style is highlighted in red for ", $heading);
853 $worksheet->write(1, 5, "emphasis, the default color is black.", $heading);
854
855 for my $i (0..13){
856 my $format = $workbook->add_format();
857 $format->set_border($i);
858 $format->set_border_color('red');
859 $format->set_align('center');
860
861 $worksheet->write((2*($i+1)), 0, $i, $center);
862 $worksheet->write((2*($i+1)), 1, sprintf("0x%02X", $i), $center);
863
864 $worksheet->write((2*($i+1)), 3, "Border", $format);
865 }
866
867 $worksheet->write(30, 0, "Diag type", $heading);
868 $worksheet->write(30, 1, "Index", $heading);
869 $worksheet->write(30, 3, "Style", $heading);
870 $worksheet->write(30, 5, "Diagonal Boder styles", $heading);
871
872 for my $i (1..3){
873 my $format = $workbook->add_format();
874 $format->set_diag_type($i);
875 $format->set_diag_border(1);
876 $format->set_diag_color('red');
877 $format->set_align('center');
878
879 $worksheet->write((2*($i+15)), 0, $i, $center);
880 $worksheet->write((2*($i+15)), 1, sprintf("0x%02X", $i), $center);
881
882 $worksheet->write((2*($i+15)), 3, "Border", $format);
883 }
884 }
885
886
887
888 ######################################################################
889 #
890 # Demonstrate the standard Excel cell patterns.
891 #
892 sub patterns {
893
894 my $worksheet = $workbook->add_worksheet('Patterns');
895
896 $worksheet->set_column(0, 4, 10);
897 $worksheet->set_column(5, 5, 50);
898
899 $worksheet->write(0, 0, "Index", $heading);
900 $worksheet->write(0, 1, "Index", $heading);
901 $worksheet->write(0, 3, "Pattern", $heading);
902
903 $worksheet->write(0, 5, "The background colour has been set to silver.", $heading);
904 $worksheet->write(1, 5, "The foreground colour has been set to green.", $heading);
905
906 for my $i (0..18){
907 my $format = $workbook->add_format();
908
909 $format->set_pattern($i);
910 $format->set_bg_color('silver');
911 $format->set_fg_color('green');
912 $format->set_align('center');
913
914 $worksheet->write((2*($i+1)), 0, $i, $center);
915 $worksheet->write((2*($i+1)), 1, sprintf("0x%02X", $i), $center);
916
917 $worksheet->write((2*($i+1)), 3, "Pattern", $format);
918
919 if ($i == 1) {
920 $worksheet->write((2*($i+1)), 5, "This is solid colour, the most useful pattern.", $heading);
921 }
922 }
923 }
924
925
926 ######################################################################
927 #
928 # Demonstrate the standard Excel cell alignments.
929 #
930 sub alignment {
931
932 my $worksheet = $workbook->add_worksheet('Alignment');
933
934 $worksheet->set_column(0, 7, 12);
935 $worksheet->set_row(0, 40);
936 $worksheet->set_selection(7, 0);
937
938 my $format01 = $workbook->add_format();
939 my $format02 = $workbook->add_format();
940 my $format03 = $workbook->add_format();
941 my $format04 = $workbook->add_format();
942 my $format05 = $workbook->add_format();
943 my $format06 = $workbook->add_format();
944 my $format07 = $workbook->add_format();
945 my $format08 = $workbook->add_format();
946 my $format09 = $workbook->add_format();
947 my $format10 = $workbook->add_format();
948 my $format11 = $workbook->add_format();
949 my $format12 = $workbook->add_format();
950 my $format13 = $workbook->add_format();
951 my $format14 = $workbook->add_format();
952 my $format15 = $workbook->add_format();
953 my $format16 = $workbook->add_format();
954 my $format17 = $workbook->add_format();
955
956 $format02->set_align('top');
957 $format03->set_align('bottom');
958 $format04->set_align('vcenter');
959 $format05->set_align('vjustify');
960 $format06->set_text_wrap();
961
962 $format07->set_align('left');
963 $format08->set_align('right');
964 $format09->set_align('center');
965 $format10->set_align('fill');
966 $format11->set_align('justify');
967 $format12->set_merge();
968
969 $format13->set_rotation(45);
970 $format14->set_rotation(-45);
971 $format15->set_rotation(270);
972
973 $format16->set_shrink();
974 $format17->set_indent(1);
975
976 $worksheet->write(0, 0, 'Vertical', $heading);
977 $worksheet->write(0, 1, 'top', $format02);
978 $worksheet->write(0, 2, 'bottom', $format03);
979 $worksheet->write(0, 3, 'vcenter', $format04);
980 $worksheet->write(0, 4, 'vjustify', $format05);
981 $worksheet->write(0, 5, "text\nwrap", $format06);
982
983 $worksheet->write(2, 0, 'Horizontal', $heading);
984 $worksheet->write(2, 1, 'left', $format07);
985 $worksheet->write(2, 2, 'right', $format08);
986 $worksheet->write(2, 3, 'center', $format09);
987 $worksheet->write(2, 4, 'fill', $format10);
988 $worksheet->write(2, 5, 'justify', $format11);
989
990 $worksheet->write(3, 1, 'merge', $format12);
991 $worksheet->write(3, 2, '', $format12);
992
993 $worksheet->write(3, 3, 'Shrink ' x 3, $format16);
994 $worksheet->write(3, 4, 'Indent', $format17);
995
996
997 $worksheet->write(5, 0, 'Rotation', $heading);
998 $worksheet->write(5, 1, 'Rotate 45', $format13);
999 $worksheet->write(6, 1, 'Rotate -45', $format14);
1000 $worksheet->write(7, 1, 'Rotate 270', $format15);
1001 }
1002
1003
1004 ######################################################################
1005 #
1006 # Demonstrate other miscellaneous features.
1007 #
1008 sub misc {
1009
1010 my $worksheet = $workbook->add_worksheet('Miscellaneous');
1011
1012 $worksheet->set_column(2, 2, 25);
1013
1014 my $format01 = $workbook->add_format();
1015 my $format02 = $workbook->add_format();
1016 my $format03 = $workbook->add_format();
1017 my $format04 = $workbook->add_format();
1018 my $format05 = $workbook->add_format();
1019 my $format06 = $workbook->add_format();
1020 my $format07 = $workbook->add_format();
1021
1022 $format01->set_underline(0x01);
1023 $format02->set_underline(0x02);
1024 $format03->set_underline(0x21);
1025 $format04->set_underline(0x22);
1026 $format05->set_font_strikeout();
1027 $format06->set_font_outline();
1028 $format07->set_font_shadow();
1029
1030 $worksheet->write(1, 2, 'Underline 0x01', $format01);
1031 $worksheet->write(3, 2, 'Underline 0x02', $format02);
1032 $worksheet->write(5, 2, 'Underline 0x21', $format03);
1033 $worksheet->write(7, 2, 'Underline 0x22', $format04);
1034 $worksheet->write(9, 2, 'Strikeout', $format05);
1035 $worksheet->write(11, 2, 'Outline (Macintosh only)', $format06);
1036 $worksheet->write(13, 2, 'Shadow (Macintosh only)', $format07);
1037 }
1038
1039 __END__
1040
1041 Download this example:
1042 <http://cpansearch.perl.org/src/JMCNAMARA/Spreadsheet-WriteExcel-2.40/examples/formats.pl>
1043
1044 Example: bug_report.pl
1045 A template for submitting a bug report.
1046
1047 Run this program and read the output from the command line.
1048
1049 #!/usr/bin/perl -w
1050
1051
1052 ###############################################################################
1053 #
1054 # A template for submitting a bug report.
1055 #
1056 # Run this program and read the output from the command line.
1057 #
1058 # reverse('(c)'), March 2004, John McNamara, jmcnamara@cpan.org
1059 #
1060
1061
1062 use strict;
1063
1064 print << 'HINTS_1';
1065
1066 REPORTING A BUG OR ASKING A QUESTION
1067
1068 Feel free to report bugs or ask questions. However, to save time
1069 consider the following steps first:
1070
1071 Read the documentation:
1072
1073 The Spreadsheet::WriteExcel documentation has been refined in
1074 response to user questions. Therefore, if you have a question it is
1075 possible that someone else has asked it before you and that it is
1076 already addressed in the documentation. Since there is a lot of
1077 documentation to get through you should at least read the table of
1078 contents and search for keywords that you are interested in.
1079
1080 Look at the example programs:
1081
1082 There are over 70 example programs shipped with the standard
1083 Spreadsheet::WriteExcel distribution. Many of these were created in
1084 response to user questions. Try to identify an example program that
1085 corresponds to your query and adapt it to your needs.
1086
1087 HINTS_1
1088 print "Press enter ..."; <STDIN>;
1089
1090 print << 'HINTS_2';
1091
1092 If you submit a bug report here are some pointers.
1093
1094 1. Put "WriteExcel:" at the beginning of the subject line. This helps
1095 to filter genuine messages from spam.
1096
1097 2. Describe the problems as clearly and as concisely as possible.
1098
1099 3. Send a sample program. It is often easier to describe a problem in
1100 code than in written prose.
1101
1102 4. The sample program should be as small as possible to demonstrate the
1103 problem. Don't copy and past large sections of your program. The
1104 program should also be self contained and working.
1105
1106 A sample bug report is generated below. If you use this format then it
1107 will help to analyse your question and respond to it more quickly.
1108
1109 Please don't send patches without contacting the author first.
1110
1111
1112 HINTS_2
1113 print "Press enter ..."; <STDIN>;
1114
1115
1116 print << 'EMAIL';
1117
1118 =======================================================================
1119
1120 To: John McNamara <jmcnamara@cpan.org>
1121 Subject: WriteExcel: Problem with something.
1122
1123 Hi John,
1124
1125 I am using Spreadsheet::WriteExcel and I have encountered a problem. I
1126 want it to do SOMETHING but the module appears to do SOMETHING_ELSE.
1127
1128 Here is some code that demonstrates the problem.
1129
1130 #!/usr/bin/perl -w
1131
1132 use strict;
1133 use Spreadsheet::WriteExcel;
1134
1135 my $workbook = Spreadsheet::WriteExcel->new("reload.xls");
1136 my $worksheet = $workbook->add_worksheet();
1137
1138 $worksheet->write(0, 0, "Hi Excel!");
1139
1140 __END__
1141
1142
1143 I tested using Excel XX (or Gnumeric or OpenOffice.org).
1144
1145 My automatically generated system details are as follows:
1146 EMAIL
1147
1148
1149 print "\n Perl version : $]";
1150 print "\n OS name : $^O";
1151 print "\n Module versions: (not all are required)\n";
1152
1153
1154 my @modules = qw(
1155 Spreadsheet::WriteExcel
1156 Spreadsheet::ParseExcel
1157 OLE::Storage_Lite
1158 Parse::RecDescent
1159 File::Temp
1160 Digest::MD4
1161 Digest::Perl::MD4
1162 Digest::MD5
1163 );
1164
1165
1166 for my $module (@modules) {
1167 my $version;
1168 eval "require $module";
1169
1170 if (not $@) {
1171 $version = $module->VERSION;
1172 $version = '(unknown)' if not defined $version;
1173 }
1174 else {
1175 $version = '(not installed)';
1176 }
1177
1178 printf "%21s%-24s\t%s\n", "", $module, $version;
1179 }
1180
1181
1182 print << "BYE";
1183 Yours etc.,
1184
1185 A. Person
1186 --
1187
1188 BYE
1189
1190 __END__
1191
1192 Download this example:
1193 <http://cpansearch.perl.org/src/JMCNAMARA/Spreadsheet-WriteExcel-2.40/examples/bug_report.pl>
1194
1195 Example: autofilter.pl
1196 An example of how to create autofilters with Spreadsheet::WriteExcel.
1197
1198 An autofilter is a way of adding drop down lists to the headers of a 2D
1199 range of worksheet data. This is turn allow users to filter the data
1200 based on simple criteria so that some data is shown and some is hidden.
1201
1202 Source code for this example:
1203
1204 #!/usr/bin/perl -w
1205
1206 ###############################################################################
1207 #
1208 # An example of how to create autofilters with Spreadsheet::WriteExcel.
1209 #
1210 # An autofilter is a way of adding drop down lists to the headers of a 2D range
1211 # of worksheet data. This is turn allow users to filter the data based on
1212 # simple criteria so that some data is shown and some is hidden.
1213 #
1214 # reverse('(c)'), September 2007, John McNamara, jmcnamara@cpan.org
1215 #
1216
1217 use strict;
1218 use Spreadsheet::WriteExcel;
1219
1220 my $workbook = Spreadsheet::WriteExcel->new('autofilter.xls');
1221
1222 die "Couldn't create new Excel file: $!.\n" unless defined $workbook;
1223
1224 my $worksheet1 = $workbook->add_worksheet();
1225 my $worksheet2 = $workbook->add_worksheet();
1226 my $worksheet3 = $workbook->add_worksheet();
1227 my $worksheet4 = $workbook->add_worksheet();
1228 my $worksheet5 = $workbook->add_worksheet();
1229 my $worksheet6 = $workbook->add_worksheet();
1230
1231 my $bold = $workbook->add_format(bold => 1);
1232
1233
1234 # Extract the data embedded at the end of this file.
1235 my @headings = split ' ', <DATA>;
1236 my @data;
1237 push @data, [split] while <DATA>;
1238
1239
1240 # Set up several sheets with the same data.
1241 for my $worksheet ($workbook->sheets()) {
1242 $worksheet->set_column('A:D', 12);
1243 $worksheet->set_row(0, 20, $bold);
1244 $worksheet->write('A1', \@headings);
1245 }
1246
1247
1248 ###############################################################################
1249 #
1250 # Example 1. Autofilter without conditions.
1251 #
1252
1253 $worksheet1->autofilter('A1:D51');
1254 $worksheet1->write('A2', [[@data]]);
1255
1256
1257 ###############################################################################
1258 #
1259 #
1260 # Example 2. Autofilter with a filter condition in the first column.
1261 #
1262
1263 # The range in this example is the same as above but in row-column notation.
1264 $worksheet2->autofilter(0, 0, 50, 3);
1265
1266 # The placeholder "Region" in the filter is ignored and can be any string
1267 # that adds clarity to the expression.
1268 #
1269 $worksheet2->filter_column(0, 'Region eq East');
1270
1271 #
1272 # Hide the rows that don't match the filter criteria.
1273 #
1274 my $row = 1;
1275
1276 for my $row_data (@data) {
1277 my $region = $row_data->[0];
1278
1279 if ($region eq 'East') {
1280 # Row is visible.
1281 }
1282 else {
1283 # Hide row.
1284 $worksheet2->set_row($row, undef, undef, 1);
1285 }
1286
1287 $worksheet2->write($row++, 0, $row_data);
1288 }
1289
1290
1291 ###############################################################################
1292 #
1293 #
1294 # Example 3. Autofilter with a dual filter condition in one of the columns.
1295 #
1296
1297 $worksheet3->autofilter('A1:D51');
1298
1299 $worksheet3->filter_column('A', 'x eq East or x eq South');
1300
1301 #
1302 # Hide the rows that don't match the filter criteria.
1303 #
1304 $row = 1;
1305
1306 for my $row_data (@data) {
1307 my $region = $row_data->[0];
1308
1309 if ($region eq 'East' or $region eq 'South') {
1310 # Row is visible.
1311 }
1312 else {
1313 # Hide row.
1314 $worksheet3->set_row($row, undef, undef, 1);
1315 }
1316
1317 $worksheet3->write($row++, 0, $row_data);
1318 }
1319
1320
1321 ###############################################################################
1322 #
1323 #
1324 # Example 4. Autofilter with filter conditions in two columns.
1325 #
1326
1327 $worksheet4->autofilter('A1:D51');
1328
1329 $worksheet4->filter_column('A', 'x eq East');
1330 $worksheet4->filter_column('C', 'x > 3000 and x < 8000' );
1331
1332 #
1333 # Hide the rows that don't match the filter criteria.
1334 #
1335 $row = 1;
1336
1337 for my $row_data (@data) {
1338 my $region = $row_data->[0];
1339 my $volume = $row_data->[2];
1340
1341 if ($region eq 'East' and
1342 $volume > 3000 and $volume < 8000
1343 )
1344 {
1345 # Row is visible.
1346 }
1347 else {
1348 # Hide row.
1349 $worksheet4->set_row($row, undef, undef, 1);
1350 }
1351
1352 $worksheet4->write($row++, 0, $row_data);
1353 }
1354
1355
1356 ###############################################################################
1357 #
1358 #
1359 # Example 5. Autofilter with filter for blanks.
1360 #
1361
1362 # Create a blank cell in our test data.
1363 $data[5]->[0] = '';
1364
1365
1366 $worksheet5->autofilter('A1:D51');
1367 $worksheet5->filter_column('A', 'x == Blanks');
1368
1369 #
1370 # Hide the rows that don't match the filter criteria.
1371 #
1372 $row = 1;
1373
1374 for my $row_data (@data) {
1375 my $region = $row_data->[0];
1376
1377 if ($region eq '')
1378 {
1379 # Row is visible.
1380 }
1381 else {
1382 # Hide row.
1383 $worksheet5->set_row($row, undef, undef, 1);
1384 }
1385
1386 $worksheet5->write($row++, 0, $row_data);
1387 }
1388
1389
1390 ###############################################################################
1391 #
1392 #
1393 # Example 6. Autofilter with filter for non-blanks.
1394 #
1395
1396
1397 $worksheet6->autofilter('A1:D51');
1398 $worksheet6->filter_column('A', 'x == NonBlanks');
1399
1400 #
1401 # Hide the rows that don't match the filter criteria.
1402 #
1403 $row = 1;
1404
1405 for my $row_data (@data) {
1406 my $region = $row_data->[0];
1407
1408 if ($region ne '')
1409 {
1410 # Row is visible.
1411 }
1412 else {
1413 # Hide row.
1414 $worksheet6->set_row($row, undef, undef, 1);
1415 }
1416
1417 $worksheet6->write($row++, 0, $row_data);
1418 }
1419
1420
1421
1422 __DATA__
1423 Region Item Volume Month
1424 East Apple 9000 July
1425 East Apple 5000 July
1426 South Orange 9000 September
1427 North Apple 2000 November
1428 West Apple 9000 November
1429 South Pear 7000 October
1430 North Pear 9000 August
1431 West Orange 1000 December
1432 West Grape 1000 November
1433 South Pear 10000 April
1434 West Grape 6000 January
1435 South Orange 3000 May
1436 North Apple 3000 December
1437 South Apple 7000 February
1438 West Grape 1000 December
1439 East Grape 8000 February
1440 South Grape 10000 June
1441 West Pear 7000 December
1442 South Apple 2000 October
1443 East Grape 7000 December
1444 North Grape 6000 April
1445 East Pear 8000 February
1446 North Apple 7000 August
1447 North Orange 7000 July
1448 North Apple 6000 June
1449 South Grape 8000 September
1450 West Apple 3000 October
1451 South Orange 10000 November
1452 West Grape 4000 July
1453 North Orange 5000 August
1454 East Orange 1000 November
1455 East Orange 4000 October
1456 North Grape 5000 August
1457 East Apple 1000 December
1458 South Apple 10000 March
1459 East Grape 7000 October
1460 West Grape 1000 September
1461 East Grape 10000 October
1462 South Orange 8000 March
1463 North Apple 4000 July
1464 South Orange 5000 July
1465 West Apple 4000 June
1466 East Apple 5000 April
1467 North Pear 3000 August
1468 East Grape 9000 November
1469 North Orange 8000 October
1470 East Apple 10000 June
1471 South Pear 1000 December
1472 North Grape 10000 July
1473 East Grape 6000 February
1474
1475 Download this example:
1476 <http://cpansearch.perl.org/src/JMCNAMARA/Spreadsheet-WriteExcel-2.40/examples/autofilter.pl>
1477
1478 Example: autofit.pl
1479 Simulate Excel's autofit for column widths.
1480
1481 Excel provides a function called Autofit (Format->Columns->Autofit)
1482 that adjusts column widths to match the length of the longest string in
1483 a column. Excel calculates these widths at run time when it has access
1484 to information about string lengths and font information. This function
1485 is *not* a feature of the file format and thus cannot be implemented by
1486 Spreadsheet::WriteExcel.
1487
1488 However, we can make an attempt to simulate it by keeping track of the
1489 longest string written to each column and then adjusting the column
1490 widths prior to closing the file.
1491
1492 We keep track of the longest strings by adding a handler to the write()
1493 function. See add_handler() in the S::WE docs for more information.
1494
1495 The main problem with trying to simulate Autofit lies in defining a
1496 relationship between a string length and its width in a arbitrary font
1497 and size. We use two approaches below. The first is a simple direct
1498 relationship obtained by trial and error. The second is a slightly more
1499 sophisticated method using an external module. For more complicated
1500 applications you will probably have to work out your own methods.
1501
1502 Source code for this example:
1503
1504 #!/usr/bin/perl -w
1505
1506 ##############################################################################
1507 #
1508 # Simulate Excel's autofit for column widths.
1509 #
1510 # Excel provides a function called Autofit (Format->Columns->Autofit) that
1511 # adjusts column widths to match the length of the longest string in a column.
1512 # Excel calculates these widths at run time when it has access to information
1513 # about string lengths and font information. This function is *not* a feature
1514 # of the file format and thus cannot be implemented by Spreadsheet::WriteExcel.
1515 #
1516 # However, we can make an attempt to simulate it by keeping track of the
1517 # longest string written to each column and then adjusting the column widths
1518 # prior to closing the file.
1519 #
1520 # We keep track of the longest strings by adding a handler to the write()
1521 # function. See add_handler() in the S::WE docs for more information.
1522 #
1523 # The main problem with trying to simulate Autofit lies in defining a
1524 # relationship between a string length and its width in a arbitrary font and
1525 # size. We use two approaches below. The first is a simple direct relationship
1526 # obtained by trial and error. The second is a slightly more sophisticated
1527 # method using an external module. For more complicated applications you will
1528 # probably have to work out your own methods.
1529 #
1530 # reverse('(c)'), May 2006, John McNamara, jmcnamara@cpan.org
1531 #
1532
1533 use strict;
1534 use Spreadsheet::WriteExcel;
1535
1536 my $workbook = Spreadsheet::WriteExcel->new('autofit.xls');
1537 my $worksheet = $workbook->add_worksheet();
1538
1539
1540 ###############################################################################
1541 #
1542 # Add a handler to store the width of the longest string written to a column.
1543 # We use the stored width to simulate an autofit of the column widths.
1544 #
1545 # You should do this for every worksheet you want to autofit.
1546 #
1547 $worksheet->add_write_handler(qr[\w], \&store_string_widths);
1548
1549
1550
1551 $worksheet->write('A1', 'Hello');
1552 $worksheet->write('B1', 'Hello World');
1553 $worksheet->write('D1', 'Hello');
1554 $worksheet->write('F1', 'This is a long string as an example.');
1555
1556 # Run the autofit after you have finished writing strings to the workbook.
1557 autofit_columns($worksheet);
1558
1559
1560
1561 ###############################################################################
1562 #
1563 # Functions used for Autofit.
1564 #
1565 ###############################################################################
1566
1567 ###############################################################################
1568 #
1569 # Adjust the column widths to fit the longest string in the column.
1570 #
1571 sub autofit_columns {
1572
1573 my $worksheet = shift;
1574 my $col = 0;
1575
1576 for my $width (@{$worksheet->{__col_widths}}) {
1577
1578 $worksheet->set_column($col, $col, $width) if $width;
1579 $col++;
1580 }
1581 }
1582
1583
1584 ###############################################################################
1585 #
1586 # The following function is a callback that was added via add_write_handler()
1587 # above. It modifies the write() function so that it stores the maximum
1588 # unwrapped width of a string in a column.
1589 #
1590 sub store_string_widths {
1591
1592 my $worksheet = shift;
1593 my $col = $_[1];
1594 my $token = $_[2];
1595
1596 # Ignore some tokens that we aren't interested in.
1597 return if not defined $token; # Ignore undefs.
1598 return if $token eq ''; # Ignore blank cells.
1599 return if ref $token eq 'ARRAY'; # Ignore array refs.
1600 return if $token =~ /^=/; # Ignore formula
1601
1602 # Ignore numbers
1603 return if $token =~ /^([+-]?)(?=\d|\.\d)\d*(\.\d*)?([Ee]([+-]?\d+))?$/;
1604
1605 # Ignore various internal and external hyperlinks. In a real scenario
1606 # you may wish to track the length of the optional strings used with
1607 # urls.
1608 return if $token =~ m{^[fh]tt?ps?://};
1609 return if $token =~ m{^mailto:};
1610 return if $token =~ m{^(?:in|ex)ternal:};
1611
1612
1613 # We store the string width as data in the Worksheet object. We use
1614 # a double underscore key name to avoid conflicts with future names.
1615 #
1616 my $old_width = $worksheet->{__col_widths}->[$col];
1617 my $string_width = string_width($token);
1618
1619 if (not defined $old_width or $string_width > $old_width) {
1620 # You may wish to set a minimum column width as follows.
1621 #return undef if $string_width < 10;
1622
1623 $worksheet->{__col_widths}->[$col] = $string_width;
1624 }
1625
1626
1627 # Return control to write();
1628 return undef;
1629 }
1630
1631
1632 ###############################################################################
1633 #
1634 # Very simple conversion between string length and string width for Arial 10.
1635 # See below for a more sophisticated method.
1636 #
1637 sub string_width {
1638
1639 return 0.9 * length $_[0];
1640 }
1641
1642 __END__
1643
1644
1645
1646 ###############################################################################
1647 #
1648 # This function uses an external module to get a more accurate width for a
1649 # string. Note that in a real program you could "use" the module instead of
1650 # "require"-ing it and you could make the Font object global to avoid repeated
1651 # initialisation.
1652 #
1653 # Note also that the $pixel_width to $cell_width is specific to Arial. For
1654 # other fonts you should calculate appropriate relationships. A future version
1655 # of S::WE will provide a way of specifying column widths in pixels instead of
1656 # cell units in order to simplify this conversion.
1657 #
1658 sub string_width {
1659
1660 require Font::TTFMetrics;
1661
1662 my $arial = Font::TTFMetrics->new('c:\windows\fonts\arial.ttf');
1663
1664 my $font_size = 10;
1665 my $dpi = 96;
1666 my $units_per_em = $arial->get_units_per_em();
1667 my $font_width = $arial->string_width($_[0]);
1668
1669 # Convert to pixels as per TTFMetrics docs.
1670 my $pixel_width = 6 + $font_width *$font_size *$dpi /(72 *$units_per_em);
1671
1672 # Add extra pixels for border around text.
1673 $pixel_width += 6;
1674
1675 # Convert to cell width (for Arial) and for cell widths > 1.
1676 my $cell_width = ($pixel_width -5) /7;
1677
1678 return $cell_width;
1679
1680 }
1681
1682 __END__
1683
1684 Download this example:
1685 <http://cpansearch.perl.org/src/JMCNAMARA/Spreadsheet-WriteExcel-2.40/examples/autofit.pl>
1686
1687 Example: bigfile.pl
1688 Example of creating a Spreadsheet::WriteExcel that is larger than the
1689 default 7MB limit.
1690
1691 This is exactly that same as any other Spreadsheet::WriteExcel program
1692 except that is requires that the OLE::Storage module is installed.
1693
1694 Source code for this example:
1695
1696 #!/usr/bin/perl -w
1697
1698 ###############################################################################
1699 #
1700 # Example of creating a Spreadsheet::WriteExcel that is larger than the
1701 # default 7MB limit.
1702 #
1703 # This is exactly that same as any other Spreadsheet::WriteExcel program except
1704 # that is requires that the OLE::Storage module is installed.
1705 #
1706 # reverse('(c)'), Jan 2007, John McNamara, jmcnamara@cpan.org
1707
1708
1709 use strict;
1710 use Spreadsheet::WriteExcel;
1711
1712
1713 my $workbook = Spreadsheet::WriteExcel->new('bigfile.xls');
1714 my $worksheet = $workbook->add_worksheet();
1715
1716 $worksheet->set_column(0, 50, 18);
1717
1718 for my $col (0 .. 50) {
1719 for my $row (0 .. 6000) {
1720 $worksheet->write($row, $col, "Row: $row Col: $col");
1721 }
1722 }
1723
1724 __END__
1725
1726 Download this example:
1727 <http://cpansearch.perl.org/src/JMCNAMARA/Spreadsheet-WriteExcel-2.40/examples/bigfile.pl>
1728
1729 Example: cgi.pl
1730 Example of how to use the Spreadsheet::WriteExcel module to send an
1731 Excel file to a browser in a CGI program.
1732
1733 On Windows the hash-bang line should be something like:
1734
1735 #!C:\Perl\bin\perl.exe
1736
1737 The "Content-Disposition" line will cause a prompt to be generated to
1738 save the file. If you want to stream the file to the browser instead,
1739 comment out that line as shown below.
1740
1741 #!/usr/bin/perl -w
1742
1743 ###############################################################################
1744 #
1745 # Example of how to use the Spreadsheet::WriteExcel module to send an Excel
1746 # file to a browser in a CGI program.
1747 #
1748 # On Windows the hash-bang line should be something like:
1749 #
1750 # #!C:\Perl\bin\perl.exe
1751 #
1752 # The "Content-Disposition" line will cause a prompt to be generated to save
1753 # the file. If you want to stream the file to the browser instead, comment out
1754 # that line as shown below.
1755 #
1756 # reverse('(c)'), March 2001, John McNamara, jmcnamara@cpan.org
1757 #
1758
1759 use strict;
1760 use Spreadsheet::WriteExcel;
1761
1762 # Set the filename and send the content type
1763 my $filename ="cgitest.xls";
1764
1765 print "Content-type: application/vnd.ms-excel\n";
1766 # The Content-Disposition will generate a prompt to save the file. If you want
1767 # to stream the file to the browser, comment out the following line.
1768 print "Content-Disposition: attachment; filename=$filename\n";
1769 print "\n";
1770
1771 # Create a new workbook and add a worksheet. The special Perl filehandle - will
1772 # redirect the output to STDOUT
1773 #
1774 my $workbook = Spreadsheet::WriteExcel->new(\*STDOUT);
1775 my $worksheet = $workbook->add_worksheet();
1776
1777
1778 # Set the column width for column 1
1779 $worksheet->set_column(0, 0, 20);
1780
1781
1782 # Create a format
1783 my $format = $workbook->add_format();
1784 $format->set_bold();
1785 $format->set_size(15);
1786 $format->set_color('blue');
1787
1788
1789 # Write to the workbook
1790 $worksheet->write(0, 0, "Hi Excel!", $format);
1791
1792 __END__
1793
1794 Download this example:
1795 <http://cpansearch.perl.org/src/JMCNAMARA/Spreadsheet-WriteExcel-2.40/examples/cgi.pl>
1796
1797 Example: chart_area.pl
1798 A simple demo of Area charts in Spreadsheet::WriteExcel.
1799
1800 Source code for this example:
1801
1802 #!/usr/bin/perl -w
1803
1804 ###############################################################################
1805 #
1806 # A simple demo of Area charts in Spreadsheet::WriteExcel.
1807 #
1808 # reverse('(c)'), December 2009, John McNamara, jmcnamara@cpan.org
1809 #
1810
1811 use strict;
1812 use Spreadsheet::WriteExcel;
1813
1814 my $workbook = Spreadsheet::WriteExcel->new( 'chart_area.xls' );
1815 my $worksheet = $workbook->add_worksheet();
1816 my $bold = $workbook->add_format( bold => 1 );
1817
1818 # Add the worksheet data that the charts will refer to.
1819 my $headings = [ 'Category', 'Values 1', 'Values 2' ];
1820 my $data = [
1821 [ 2, 3, 4, 5, 6, 7 ],
1822 [ 1, 4, 5, 2, 1, 5 ],
1823 [ 3, 6, 7, 5, 4, 3 ],
1824 ];
1825
1826 $worksheet->write( 'A1', $headings, $bold );
1827 $worksheet->write( 'A2', $data );
1828
1829
1830 ###############################################################################
1831 #
1832 # Example 1. A minimal chart.
1833 #
1834 my $chart1 = $workbook->add_chart( type => 'area' );
1835
1836 # Add values only. Use the default categories.
1837 $chart1->add_series( values => '=Sheet1!$B$2:$B$7' );
1838
1839
1840 ###############################################################################
1841 #
1842 # Example 2. A minimal chart with user specified categories (X axis)
1843 # and a series name.
1844 #
1845 my $chart2 = $workbook->add_chart( type => 'area' );
1846
1847 # Configure the series.
1848 $chart2->add_series(
1849 categories => '=Sheet1!$A$2:$A$7',
1850 values => '=Sheet1!$B$2:$B$7',
1851 name => 'Test data series 1',
1852 );
1853
1854
1855 ###############################################################################
1856 #
1857 # Example 3. Same as previous chart but with added title and axes labels.
1858 #
1859 my $chart3 = $workbook->add_chart( type => 'area' );
1860
1861 # Configure the series.
1862 $chart3->add_series(
1863 categories => '=Sheet1!$A$2:$A$7',
1864 values => '=Sheet1!$B$2:$B$7',
1865 name => 'Test data series 1',
1866 );
1867
1868 # Add some labels.
1869 $chart3->set_title( name => 'Results of sample analysis' );
1870 $chart3->set_x_axis( name => 'Sample number' );
1871 $chart3->set_y_axis( name => 'Sample length (cm)' );
1872
1873
1874 ###############################################################################
1875 #
1876 # Example 4. Same as previous chart but with an added series and with a
1877 # user specified chart sheet name.
1878 #
1879 my $chart4 = $workbook->add_chart( name => 'Results Chart', type => 'area' );
1880
1881 # Configure the series.
1882 $chart4->add_series(
1883 categories => '=Sheet1!$A$2:$A$7',
1884 values => '=Sheet1!$B$2:$B$7',
1885 name => 'Test data series 1',
1886 );
1887
1888 # Add another series.
1889 $chart4->add_series(
1890 categories => '=Sheet1!$A$2:$A$7',
1891 values => '=Sheet1!$C$2:$C$7',
1892 name => 'Test data series 2',
1893 );
1894
1895 # Add some labels.
1896 $chart4->set_title( name => 'Results of sample analysis' );
1897 $chart4->set_x_axis( name => 'Sample number' );
1898 $chart4->set_y_axis( name => 'Sample length (cm)' );
1899
1900
1901 ###############################################################################
1902 #
1903 # Example 5. Same as Example 3 but as an embedded chart.
1904 #
1905 my $chart5 = $workbook->add_chart( type => 'area', embedded => 1 );
1906
1907 # Configure the series.
1908 $chart5->add_series(
1909 categories => '=Sheet1!$A$2:$A$7',
1910 values => '=Sheet1!$B$2:$B$7',
1911 name => 'Test data series 1',
1912 );
1913
1914 # Add some labels.
1915 $chart5->set_title( name => 'Results of sample analysis' );
1916 $chart5->set_x_axis( name => 'Sample number' );
1917 $chart5->set_y_axis( name => 'Sample length (cm)' );
1918
1919 # Insert the chart into the main worksheet.
1920 $worksheet->insert_chart( 'E2', $chart5 );
1921
1922 __END__
1923
1924 Download this example:
1925 <http://cpansearch.perl.org/src/JMCNAMARA/Spreadsheet-WriteExcel-2.40/examples/chart_area.pl>
1926
1927 Example: chart_bar.pl
1928 A simple demo of Bar charts in Spreadsheet::WriteExcel.
1929
1930 Source code for this example:
1931
1932 #!/usr/bin/perl -w
1933
1934 ###############################################################################
1935 #
1936 # A simple demo of Bar charts in Spreadsheet::WriteExcel.
1937 #
1938 # reverse('(c)'), December 2009, John McNamara, jmcnamara@cpan.org
1939 #
1940
1941 use strict;
1942 use Spreadsheet::WriteExcel;
1943
1944 my $workbook = Spreadsheet::WriteExcel->new( 'chart_bar.xls' );
1945 my $worksheet = $workbook->add_worksheet();
1946 my $bold = $workbook->add_format( bold => 1 );
1947
1948 # Add the worksheet data that the charts will refer to.
1949 my $headings = [ 'Category', 'Values 1', 'Values 2' ];
1950 my $data = [
1951 [ 2, 3, 4, 5, 6, 7 ],
1952 [ 1, 4, 5, 2, 1, 5 ],
1953 [ 3, 6, 7, 5, 4, 3 ],
1954 ];
1955
1956 $worksheet->write( 'A1', $headings, $bold );
1957 $worksheet->write( 'A2', $data );
1958
1959
1960 ###############################################################################
1961 #
1962 # Example 1. A minimal chart.
1963 #
1964 my $chart1 = $workbook->add_chart( type => 'bar' );
1965
1966 # Add values only. Use the default categories.
1967 $chart1->add_series( values => '=Sheet1!$B$2:$B$7' );
1968
1969
1970 ###############################################################################
1971 #
1972 # Example 2. A minimal chart with user specified categories (X axis)
1973 # and a series name.
1974 #
1975 my $chart2 = $workbook->add_chart( type => 'bar' );
1976
1977 # Configure the series.
1978 $chart2->add_series(
1979 categories => '=Sheet1!$A$2:$A$7',
1980 values => '=Sheet1!$B$2:$B$7',
1981 name => 'Test data series 1',
1982 );
1983
1984
1985 ###############################################################################
1986 #
1987 # Example 3. Same as previous chart but with added title and axes labels.
1988 #
1989 my $chart3 = $workbook->add_chart( type => 'bar' );
1990
1991 # Configure the series.
1992 $chart3->add_series(
1993 categories => '=Sheet1!$A$2:$A$7',
1994 values => '=Sheet1!$B$2:$B$7',
1995 name => 'Test data series 1',
1996 );
1997
1998 # Add some labels.
1999 $chart3->set_title( name => 'Results of sample analysis' );
2000 $chart3->set_x_axis( name => 'Sample number' );
2001 $chart3->set_y_axis( name => 'Sample length (cm)' );
2002
2003
2004 ###############################################################################
2005 #
2006 # Example 4. Same as previous chart but with an added series and with a
2007 # user specified chart sheet name.
2008 #
2009 my $chart4 = $workbook->add_chart( name => 'Results Chart', type => 'bar' );
2010
2011 # Configure the series.
2012 $chart4->add_series(
2013 categories => '=Sheet1!$A$2:$A$7',
2014 values => '=Sheet1!$B$2:$B$7',
2015 name => 'Test data series 1',
2016 );
2017
2018 # Add another series.
2019 $chart4->add_series(
2020 categories => '=Sheet1!$A$2:$A$7',
2021 values => '=Sheet1!$C$2:$C$7',
2022 name => 'Test data series 2',
2023 );
2024
2025 # Add some labels.
2026 $chart4->set_title( name => 'Results of sample analysis' );
2027 $chart4->set_x_axis( name => 'Sample number' );
2028 $chart4->set_y_axis( name => 'Sample length (cm)' );
2029
2030
2031 ###############################################################################
2032 #
2033 # Example 5. Same as Example 3 but as an embedded chart.
2034 #
2035 my $chart5 = $workbook->add_chart( type => 'bar', embedded => 1 );
2036
2037 # Configure the series.
2038 $chart5->add_series(
2039 categories => '=Sheet1!$A$2:$A$7',
2040 values => '=Sheet1!$B$2:$B$7',
2041 name => 'Test data series 1',
2042 );
2043
2044 # Add some labels.
2045 $chart5->set_title( name => 'Results of sample analysis' );
2046 $chart5->set_x_axis( name => 'Sample number' );
2047 $chart5->set_y_axis( name => 'Sample length (cm)' );
2048
2049 # Insert the chart into the main worksheet.
2050 $worksheet->insert_chart( 'E2', $chart5 );
2051
2052 __END__
2053
2054 Download this example:
2055 <http://cpansearch.perl.org/src/JMCNAMARA/Spreadsheet-WriteExcel-2.40/examples/chart_bar.pl>
2056
2057 Example: chart_column.pl
2058 A simple demo of Column charts in Spreadsheet::WriteExcel.
2059
2060 Source code for this example:
2061
2062 #!/usr/bin/perl -w
2063
2064 ###############################################################################
2065 #
2066 # A simple demo of Column charts in Spreadsheet::WriteExcel.
2067 #
2068 # reverse('(c)'), December 2009, John McNamara, jmcnamara@cpan.org
2069 #
2070
2071 use strict;
2072 use Spreadsheet::WriteExcel;
2073
2074 my $workbook = Spreadsheet::WriteExcel->new( 'chart_column.xls' );
2075 my $worksheet = $workbook->add_worksheet();
2076 my $bold = $workbook->add_format( bold => 1 );
2077
2078 # Add the worksheet data that the charts will refer to.
2079 my $headings = [ 'Category', 'Values 1', 'Values 2' ];
2080 my $data = [
2081 [ 2, 3, 4, 5, 6, 7 ],
2082 [ 1, 4, 5, 2, 1, 5 ],
2083 [ 3, 6, 7, 5, 4, 3 ],
2084 ];
2085
2086 $worksheet->write( 'A1', $headings, $bold );
2087 $worksheet->write( 'A2', $data );
2088
2089
2090 ###############################################################################
2091 #
2092 # Example 1. A minimal chart.
2093 #
2094 my $chart1 = $workbook->add_chart( type => 'column' );
2095
2096 # Add values only. Use the default categories.
2097 $chart1->add_series( values => '=Sheet1!$B$2:$B$7' );
2098
2099
2100 ###############################################################################
2101 #
2102 # Example 2. A minimal chart with user specified categories (X axis)
2103 # and a series name.
2104 #
2105 my $chart2 = $workbook->add_chart( type => 'column' );
2106
2107 # Configure the series.
2108 $chart2->add_series(
2109 categories => '=Sheet1!$A$2:$A$7',
2110 values => '=Sheet1!$B$2:$B$7',
2111 name => 'Test data series 1',
2112 );
2113
2114
2115 ###############################################################################
2116 #
2117 # Example 3. Same as previous chart but with added title and axes labels.
2118 #
2119 my $chart3 = $workbook->add_chart( type => 'column' );
2120
2121 # Configure the series.
2122 $chart3->add_series(
2123 categories => '=Sheet1!$A$2:$A$7',
2124 values => '=Sheet1!$B$2:$B$7',
2125 name => 'Test data series 1',
2126 );
2127
2128 # Add some labels.
2129 $chart3->set_title( name => 'Results of sample analysis' );
2130 $chart3->set_x_axis( name => 'Sample number' );
2131 $chart3->set_y_axis( name => 'Sample length (cm)' );
2132
2133
2134 ###############################################################################
2135 #
2136 # Example 4. Same as previous chart but with an added series and with a
2137 # user specified chart sheet name.
2138 #
2139 my $chart4 = $workbook->add_chart( name => 'Results Chart', type => 'column' );
2140
2141 # Configure the series.
2142 $chart4->add_series(
2143 categories => '=Sheet1!$A$2:$A$7',
2144 values => '=Sheet1!$B$2:$B$7',
2145 name => 'Test data series 1',
2146 );
2147
2148 # Add another series.
2149 $chart4->add_series(
2150 categories => '=Sheet1!$A$2:$A$7',
2151 values => '=Sheet1!$C$2:$C$7',
2152 name => 'Test data series 2',
2153 );
2154
2155 # Add some labels.
2156 $chart4->set_title( name => 'Results of sample analysis' );
2157 $chart4->set_x_axis( name => 'Sample number' );
2158 $chart4->set_y_axis( name => 'Sample length (cm)' );
2159
2160
2161 ###############################################################################
2162 #
2163 # Example 5. Same as Example 3 but as an embedded chart.
2164 #
2165 my $chart5 = $workbook->add_chart( type => 'column', embedded => 1 );
2166
2167 # Configure the series.
2168 $chart5->add_series(
2169 categories => '=Sheet1!$A$2:$A$7',
2170 values => '=Sheet1!$B$2:$B$7',
2171 name => 'Test data series 1',
2172 );
2173
2174 # Add some labels.
2175 $chart5->set_title( name => 'Results of sample analysis' );
2176 $chart5->set_x_axis( name => 'Sample number' );
2177 $chart5->set_y_axis( name => 'Sample length (cm)' );
2178
2179 # Insert the chart into the main worksheet.
2180 $worksheet->insert_chart( 'E2', $chart5 );
2181
2182 __END__
2183
2184 Download this example:
2185 <http://cpansearch.perl.org/src/JMCNAMARA/Spreadsheet-WriteExcel-2.40/examples/chart_column.pl>
2186
2187 Example: chart_line.pl
2188 A simple demo of Line charts in Spreadsheet::WriteExcel.
2189
2190 Source code for this example:
2191
2192 #!/usr/bin/perl -w
2193
2194 ###############################################################################
2195 #
2196 # A simple demo of Line charts in Spreadsheet::WriteExcel.
2197 #
2198 # reverse('(c)'), December 2009, John McNamara, jmcnamara@cpan.org
2199 #
2200
2201 use strict;
2202 use Spreadsheet::WriteExcel;
2203
2204 my $workbook = Spreadsheet::WriteExcel->new( 'chart_line.xls' );
2205 my $worksheet = $workbook->add_worksheet();
2206 my $bold = $workbook->add_format( bold => 1 );
2207
2208 # Add the worksheet data that the charts will refer to.
2209 my $headings = [ 'Category', 'Values 1', 'Values 2' ];
2210 my $data = [
2211 [ 2, 3, 4, 5, 6, 7 ],
2212 [ 1, 4, 5, 2, 1, 5 ],
2213 [ 3, 6, 7, 5, 4, 3 ],
2214 ];
2215
2216 $worksheet->write( 'A1', $headings, $bold );
2217 $worksheet->write( 'A2', $data );
2218
2219
2220 ###############################################################################
2221 #
2222 # Example 1. A minimal chart.
2223 #
2224 my $chart1 = $workbook->add_chart( type => 'line' );
2225
2226 # Add values only. Use the default categories.
2227 $chart1->add_series( values => '=Sheet1!$B$2:$B$7' );
2228
2229
2230 ###############################################################################
2231 #
2232 # Example 2. A minimal chart with user specified categories (X axis)
2233 # and a series name.
2234 #
2235 my $chart2 = $workbook->add_chart( type => 'line' );
2236
2237 # Configure the series.
2238 $chart2->add_series(
2239 categories => '=Sheet1!$A$2:$A$7',
2240 values => '=Sheet1!$B$2:$B$7',
2241 name => 'Test data series 1',
2242 );
2243
2244
2245 ###############################################################################
2246 #
2247 # Example 3. Same as previous chart but with added title and axes labels.
2248 #
2249 my $chart3 = $workbook->add_chart( type => 'line' );
2250
2251 # Configure the series.
2252 $chart3->add_series(
2253 categories => '=Sheet1!$A$2:$A$7',
2254 values => '=Sheet1!$B$2:$B$7',
2255 name => 'Test data series 1',
2256 );
2257
2258 # Add some labels.
2259 $chart3->set_title( name => 'Results of sample analysis' );
2260 $chart3->set_x_axis( name => 'Sample number' );
2261 $chart3->set_y_axis( name => 'Sample length (cm)' );
2262
2263
2264 ###############################################################################
2265 #
2266 # Example 4. Same as previous chart but with an added series and with a
2267 # user specified chart sheet name.
2268 #
2269 my $chart4 = $workbook->add_chart( name => 'Results Chart', type => 'line' );
2270
2271 # Configure the series.
2272 $chart4->add_series(
2273 categories => '=Sheet1!$A$2:$A$7',
2274 values => '=Sheet1!$B$2:$B$7',
2275 name => 'Test data series 1',
2276 );
2277
2278 # Add another series.
2279 $chart4->add_series(
2280 categories => '=Sheet1!$A$2:$A$7',
2281 values => '=Sheet1!$C$2:$C$7',
2282 name => 'Test data series 2',
2283 );
2284
2285 # Add some labels.
2286 $chart4->set_title( name => 'Results of sample analysis' );
2287 $chart4->set_x_axis( name => 'Sample number' );
2288 $chart4->set_y_axis( name => 'Sample length (cm)' );
2289
2290
2291 ###############################################################################
2292 #
2293 # Example 5. Same as Example 3 but as an embedded chart.
2294 #
2295 my $chart5 = $workbook->add_chart( type => 'line', embedded => 1 );
2296
2297 # Configure the series.
2298 $chart5->add_series(
2299 categories => '=Sheet1!$A$2:$A$7',
2300 values => '=Sheet1!$B$2:$B$7',
2301 name => 'Test data series 1',
2302 );
2303
2304 # Add some labels.
2305 $chart5->set_title( name => 'Results of sample analysis' );
2306 $chart5->set_x_axis( name => 'Sample number' );
2307 $chart5->set_y_axis( name => 'Sample length (cm)' );
2308
2309 # Insert the chart into the main worksheet.
2310 $worksheet->insert_chart( 'E2', $chart5 );
2311
2312 __END__
2313
2314 Download this example:
2315 <http://cpansearch.perl.org/src/JMCNAMARA/Spreadsheet-WriteExcel-2.40/examples/chart_line.pl>
2316
2317 Example: chart_pie.pl
2318 A simple demo of Pie charts in Spreadsheet::WriteExcel.
2319
2320 Source code for this example:
2321
2322 #!/usr/bin/perl -w
2323
2324 ###############################################################################
2325 #
2326 # A simple demo of Pie charts in Spreadsheet::WriteExcel.
2327 #
2328 # reverse('(c)'), December 2009, John McNamara, jmcnamara@cpan.org
2329 #
2330
2331 use strict;
2332 use Spreadsheet::WriteExcel;
2333
2334 my $workbook = Spreadsheet::WriteExcel->new( 'chart_pie.xls' );
2335 my $worksheet = $workbook->add_worksheet();
2336 my $bold = $workbook->add_format( bold => 1 );
2337
2338 # Add the worksheet data that the charts will refer to.
2339 my $headings = [ 'Category', 'Values' ];
2340 my $data = [
2341 [ 'Apple', 'Cherry', 'Pecan' ],
2342 [ 60, 30, 10 ],
2343 ];
2344
2345 $worksheet->write( 'A1', $headings, $bold );
2346 $worksheet->write( 'A2', $data );
2347
2348
2349 ###############################################################################
2350 #
2351 # Example 1. A minimal chart.
2352 #
2353 my $chart1 = $workbook->add_chart( type => 'pie' );
2354
2355 # Add values only. Use the default categories.
2356 $chart1->add_series( values => '=Sheet1!$B$2:$B$4' );
2357
2358
2359 ###############################################################################
2360 #
2361 # Example 2. A minimal chart with user specified categories and a series name.
2362 #
2363 my $chart2 = $workbook->add_chart( type => 'pie' );
2364
2365 # Configure the series.
2366 $chart2->add_series(
2367 categories => '=Sheet1!$A$2:$A$4',
2368 values => '=Sheet1!$B$2:$B$4',
2369 name => 'Pie sales data',
2370 );
2371
2372
2373 ###############################################################################
2374 #
2375 # Example 3. Same as previous chart but with an added title.
2376 #
2377 my $chart3 = $workbook->add_chart( type => 'pie' );
2378
2379 # Configure the series.
2380 $chart3->add_series(
2381 categories => '=Sheet1!$A$2:$A$4',
2382 values => '=Sheet1!$B$2:$B$4',
2383 name => 'Pie sales data',
2384 );
2385
2386 # Add a title.
2387 $chart3->set_title( name => 'Popular Pie Types' );
2388
2389
2390 ###############################################################################
2391 #
2392 # Example 4. Same as previous chart with a user specified chart sheet name.
2393 #
2394 my $chart4 = $workbook->add_chart( name => 'Results Chart', type => 'pie' );
2395
2396 # Configure the series.
2397 $chart4->add_series(
2398 categories => '=Sheet1!$A$2:$A$4',
2399 values => '=Sheet1!$B$2:$B$4',
2400 name => 'Pie sales data',
2401 );
2402
2403 # The other chart_*.pl examples add a second series in example 4 but additional
2404 # series aren't plotted in a pie chart.
2405
2406 # Add a title.
2407 $chart4->set_title( name => 'Popular Pie Types' );
2408
2409
2410 ###############################################################################
2411 #
2412 # Example 5. Same as Example 3 but as an embedded chart.
2413 #
2414 my $chart5 = $workbook->add_chart( type => 'pie', embedded => 1 );
2415
2416 # Configure the series.
2417 $chart5->add_series(
2418 categories => '=Sheet1!$A$2:$A$4',
2419 values => '=Sheet1!$B$2:$B$4',
2420 name => 'Pie sales data',
2421 );
2422
2423 # Add a title.
2424 $chart5->set_title( name => 'Popular Pie Types' );
2425
2426 # Insert the chart into the main worksheet.
2427 $worksheet->insert_chart( 'D2', $chart5 );
2428
2429 __END__
2430
2431 Download this example:
2432 <http://cpansearch.perl.org/src/JMCNAMARA/Spreadsheet-WriteExcel-2.40/examples/chart_pie.pl>
2433
2434 Example: chart_scatter.pl
2435 A simple demo of Scatter charts in Spreadsheet::WriteExcel.
2436
2437 Source code for this example:
2438
2439 #!/usr/bin/perl -w
2440
2441 ###############################################################################
2442 #
2443 # A simple demo of Scatter charts in Spreadsheet::WriteExcel.
2444 #
2445 # reverse('(c)'), December 2009, John McNamara, jmcnamara@cpan.org
2446 #
2447
2448 use strict;
2449 use Spreadsheet::WriteExcel;
2450
2451 my $workbook = Spreadsheet::WriteExcel->new( 'chart_scatter.xls' );
2452 my $worksheet = $workbook->add_worksheet();
2453 my $bold = $workbook->add_format( bold => 1 );
2454
2455 # Add the worksheet data that the charts will refer to.
2456 my $headings = [ 'Category', 'Values 1', 'Values 2' ];
2457 my $data = [
2458 [ 2, 3, 4, 5, 6, 7 ],
2459 [ 1, 4, 5, 2, 1, 5 ],
2460 [ 3, 6, 7, 5, 4, 3 ],
2461 ];
2462
2463 $worksheet->write( 'A1', $headings, $bold );
2464 $worksheet->write( 'A2', $data );
2465
2466
2467 ###############################################################################
2468 #
2469 # Example 1. A minimal chart.
2470 #
2471 my $chart1 = $workbook->add_chart( type => 'scatter' );
2472
2473 # Add values only. Use the default categories.
2474 $chart1->add_series( values => '=Sheet1!$B$2:$B$7' );
2475
2476
2477 ###############################################################################
2478 #
2479 # Example 2. A minimal chart with user specified categories (X axis)
2480 # and a series name.
2481 #
2482 my $chart2 = $workbook->add_chart( type => 'scatter' );
2483
2484 # Configure the series.
2485 $chart2->add_series(
2486 categories => '=Sheet1!$A$2:$A$7',
2487 values => '=Sheet1!$B$2:$B$7',
2488 name => 'Test data series 1',
2489 );
2490
2491
2492 ###############################################################################
2493 #
2494 # Example 3. Same as previous chart but with added title and axes labels.
2495 #
2496 my $chart3 = $workbook->add_chart( type => 'scatter' );
2497
2498 # Configure the series.
2499 $chart3->add_series(
2500 categories => '=Sheet1!$A$2:$A$7',
2501 values => '=Sheet1!$B$2:$B$7',
2502 name => 'Test data series 1',
2503 );
2504
2505 # Add some labels.
2506 $chart3->set_title( name => 'Results of sample analysis' );
2507 $chart3->set_x_axis( name => 'Sample number' );
2508 $chart3->set_y_axis( name => 'Sample length (cm)' );
2509
2510
2511 ###############################################################################
2512 #
2513 # Example 4. Same as previous chart but with an added series and with a
2514 # user specified chart sheet name.
2515 #
2516 my $chart4 = $workbook->add_chart( name => 'Results Chart', type => 'scatter' );
2517
2518 # Configure the series.
2519 $chart4->add_series(
2520 categories => '=Sheet1!$A$2:$A$7',
2521 values => '=Sheet1!$B$2:$B$7',
2522 name => 'Test data series 1',
2523 );
2524
2525 # Add another series.
2526 $chart4->add_series(
2527 categories => '=Sheet1!$A$2:$A$7',
2528 values => '=Sheet1!$C$2:$C$7',
2529 name => 'Test data series 2',
2530 );
2531
2532 # Add some labels.
2533 $chart4->set_title( name => 'Results of sample analysis' );
2534 $chart4->set_x_axis( name => 'Sample number' );
2535 $chart4->set_y_axis( name => 'Sample length (cm)' );
2536
2537
2538 ###############################################################################
2539 #
2540 # Example 5. Same as Example 3 but as an embedded chart.
2541 #
2542 my $chart5 = $workbook->add_chart( type => 'scatter', embedded => 1 );
2543
2544 # Configure the series.
2545 $chart5->add_series(
2546 categories => '=Sheet1!$A$2:$A$7',
2547 values => '=Sheet1!$B$2:$B$7',
2548 name => 'Test data series 1',
2549 );
2550
2551 # Add some labels.
2552 $chart5->set_title( name => 'Results of sample analysis' );
2553 $chart5->set_x_axis( name => 'Sample number' );
2554 $chart5->set_y_axis( name => 'Sample length (cm)' );
2555
2556 # Insert the chart into the main worksheet.
2557 $worksheet->insert_chart( 'E2', $chart5 );
2558
2559 __END__
2560
2561 Download this example:
2562 <http://cpansearch.perl.org/src/JMCNAMARA/Spreadsheet-WriteExcel-2.40/examples/chart_scatter.pl>
2563
2564 Example: chart_stock.pl
2565 A simple demo of Stock charts in Spreadsheet::WriteExcel.
2566
2567 Source code for this example:
2568
2569 #!/usr/bin/perl -w
2570
2571 ###############################################################################
2572 #
2573 # A simple demo of Stock charts in Spreadsheet::WriteExcel.
2574 #
2575 # reverse('(c)'), January 2010, John McNamara, jmcnamara@cpan.org
2576 #
2577
2578
2579 use strict;
2580 use Spreadsheet::WriteExcel;
2581
2582 my $workbook = Spreadsheet::WriteExcel->new( 'chart_stock.xls' );
2583 my $worksheet = $workbook->add_worksheet();
2584
2585
2586 ###############################################################################
2587 #
2588 # Set up the data worksheet that the charts will refer to. We read the example
2589 # data from the __DATA__ section at the end of the file. This simulates
2590 # reading the data from a database or other source.
2591 #
2592 # The default Excel Stock chart is an Open-High-Low-Close chart. Therefore
2593 # we will need data for each of those series.
2594 #
2595 # The layout of the __DATA__ section is similar to the layout of the worksheet.
2596 #
2597
2598 # Add some formats.
2599 my $bold = $workbook->add_format( bold => 1 );
2600 my $date_format = $workbook->add_format( num_format => 'dd/mm/yyyy' );
2601
2602 # Increase the width of the column used for date to make it clearer.
2603 $worksheet->set_column( 'A:A', 12 );
2604
2605 # Read the data from the __DATA__ section at the end. In a real example this
2606 # would probably be a database query.
2607 my @stock_data;
2608
2609 while ( <DATA> ) {
2610 next unless /\S/; # Skip blank lines.
2611 next if /^#/; # Skip comments.
2612
2613 push @stock_data, [split];
2614 }
2615
2616 # Write the data to the worksheet.
2617 my $row = 0;
2618 my $col = 0;
2619
2620 my $headers = shift @stock_data;
2621 $worksheet->write( $row++, $col, $headers, $bold );
2622
2623 for my $stock_data ( @stock_data ) {
2624
2625 my @data = @$stock_data;
2626 my $date = shift @data;
2627
2628 $worksheet->write( $row, $col, $date, $date_format );
2629 $worksheet->write( $row, $col + 1, \@data );
2630
2631 $row++;
2632 }
2633
2634
2635 ###############################################################################
2636 #
2637 # Example 1. A default Open-High-Low-Close chart with series names, axes labels
2638 # and a title.
2639 #
2640
2641 my $chart1 = $workbook->add_chart( type => 'stock' );
2642
2643 # Add a series for each of the Open-High-Low-Close columns. The categories are
2644 # the dates in the first column.
2645
2646 $chart1->add_series(
2647 categories => '=Sheet1!$A$2:$A$10',
2648 values => '=Sheet1!$B$2:$B$10',
2649 name => 'Open',
2650 );
2651
2652 $chart1->add_series(
2653 categories => '=Sheet1!$A$2:$A$10',
2654 values => '=Sheet1!$C$2:$C$10',
2655 name => 'High',
2656 );
2657
2658 $chart1->add_series(
2659 categories => '=Sheet1!$A$2:$A$10',
2660 values => '=Sheet1!$D$2:$D$10',
2661 name => 'Low',
2662 );
2663
2664 $chart1->add_series(
2665 categories => '=Sheet1!$A$2:$A$10',
2666 values => '=Sheet1!$E$2:$E$10',
2667 name => 'Close',
2668 );
2669
2670 # Add a chart title and axes labels.
2671 $chart1->set_title( name => 'Open-High-Low-Close', );
2672 $chart1->set_x_axis( name => 'Date', );
2673 $chart1->set_y_axis( name => 'Share price', );
2674
2675 ###############################################################################
2676 #
2677 # Example 2. Same as the previous as an embedded chart.
2678 #
2679
2680 my $chart2 = $workbook->add_chart( type => 'stock', embedded => 1 );
2681
2682 # Add a series for each of the Open-High-Low-Close columns. The categories are
2683 # the dates in the first column.
2684
2685 $chart2->add_series(
2686 categories => '=Sheet1!$A$2:$A$10',
2687 values => '=Sheet1!$B$2:$B$10',
2688 name => 'Open',
2689 );
2690
2691 $chart2->add_series(
2692 categories => '=Sheet1!$A$2:$A$10',
2693 values => '=Sheet1!$C$2:$C$10',
2694 name => 'High',
2695 );
2696
2697 $chart2->add_series(
2698 categories => '=Sheet1!$A$2:$A$10',
2699 values => '=Sheet1!$D$2:$D$10',
2700 name => 'Low',
2701 );
2702
2703 $chart2->add_series(
2704 categories => '=Sheet1!$A$2:$A$10',
2705 values => '=Sheet1!$E$2:$E$10',
2706 name => 'Close',
2707 );
2708
2709 # Add a chart title and axes labels.
2710 $chart2->set_title( name => 'Open-High-Low-Close', );
2711 $chart2->set_x_axis( name => 'Date', );
2712 $chart2->set_y_axis( name => 'Share price', );
2713
2714 # Insert the chart into the main worksheet.
2715 $worksheet->insert_chart( 'G2', $chart2 );
2716
2717
2718 __DATA__
2719 # Some sample stock data used for charting.
2720 Date Open High Low Close
2721 2009-08-19 100.00 104.06 95.96 100.34
2722 2009-08-20 101.01 109.08 100.50 108.31
2723 2009-08-23 110.75 113.48 109.05 109.40
2724 2009-08-24 111.24 111.60 103.57 104.87
2725 2009-08-25 104.96 108.00 103.88 106.00
2726 2009-08-26 104.95 107.95 104.66 107.91
2727 2009-08-27 108.10 108.62 105.69 106.15
2728 2009-08-30 105.28 105.49 102.01 102.01
2729 2009-08-31 102.30 103.71 102.16 102.37
2730
2731 Download this example:
2732 <http://cpansearch.perl.org/src/JMCNAMARA/Spreadsheet-WriteExcel-2.40/examples/chart_stock.pl>
2733
2734 Example: chess.pl
2735 Example of formatting using the Spreadsheet::WriteExcel module via
2736 property hashes.
2737
2738 Setting format properties via hashes of values is useful when you have
2739 to deal with a large number of similar formats. Consider for example a
2740 chess board pattern with black squares, white unformatted squares and a
2741 border.
2742
2743 This relatively simple example requires 14 separate Format objects
2744 although there are only 5 different properties: black background, top
2745 border, bottom border, left border and right border.
2746
2747 Using property hashes it is possible to define these 5 sets of
2748 properties and then add them together to create the 14 Format
2749 configurations.
2750
2751 Source code for this example:
2752
2753 #!/usr/bin/perl -w
2754
2755 ########################################################################
2756 #
2757 # Example of formatting using the Spreadsheet::WriteExcel module via
2758 # property hashes.
2759 #
2760 # Setting format properties via hashes of values is useful when you have
2761 # to deal with a large number of similar formats. Consider for example a
2762 # chess board pattern with black squares, white unformatted squares and
2763 # a border.
2764 #
2765 # This relatively simple example requires 14 separate Format
2766 # objects although there are only 5 different properties: black
2767 # background, top border, bottom border, left border and right border.
2768 #
2769 # Using property hashes it is possible to define these 5 sets of
2770 # properties and then add them together to create the 14 Format
2771 # configurations.
2772 #
2773 # reverse('(c)'), July 2001, John McNamara, jmcnamara@cpan.org
2774 #
2775
2776 use strict;
2777 use Spreadsheet::WriteExcel;
2778
2779 my $workbook = Spreadsheet::WriteExcel->new("chess.xls");
2780 my $worksheet = $workbook->add_worksheet();
2781
2782
2783 # Some row and column formatting
2784 $worksheet->set_column('B:I', 10);
2785
2786 for my $i (1..8) {
2787 $worksheet->set_row($i, 50);
2788 }
2789
2790
2791 # Define the property hashes
2792 #
2793 my %black = (
2794 'fg_color' => 'black',
2795 'pattern' => 1,
2796 );
2797
2798 my %top = ( 'top' => 6 );
2799 my %bottom = ( 'bottom' => 6 );
2800 my %left = ( 'left' => 6 );
2801 my %right = ( 'right' => 6 );
2802
2803
2804 # Define the formats
2805 #
2806 my $format01 = $workbook->add_format(%top, %left );
2807 my $format02 = $workbook->add_format(%top, %black );
2808 my $format03 = $workbook->add_format(%top, );
2809 my $format04 = $workbook->add_format(%top, %right, %black );
2810
2811 my $format05 = $workbook->add_format(%left );
2812 my $format06 = $workbook->add_format(%black );
2813 my $format07 = $workbook->add_format( );
2814 my $format08 = $workbook->add_format(%right, %black );
2815 my $format09 = $workbook->add_format(%right );
2816 my $format10 = $workbook->add_format(%left, %black );
2817
2818 my $format11 = $workbook->add_format(%bottom, %left, %black );
2819 my $format12 = $workbook->add_format(%bottom );
2820 my $format13 = $workbook->add_format(%bottom, %black );
2821 my $format14 = $workbook->add_format(%bottom, %right );
2822
2823
2824 # Draw the pattern
2825 $worksheet->write('B2', '', $format01);
2826 $worksheet->write('C2', '', $format02);
2827 $worksheet->write('D2', '', $format03);
2828 $worksheet->write('E2', '', $format02);
2829 $worksheet->write('F2', '', $format03);
2830 $worksheet->write('G2', '', $format02);
2831 $worksheet->write('H2', '', $format03);
2832 $worksheet->write('I2', '', $format04);
2833
2834 $worksheet->write('B3', '', $format10);
2835 $worksheet->write('C3', '', $format07);
2836 $worksheet->write('D3', '', $format06);
2837 $worksheet->write('E3', '', $format07);
2838 $worksheet->write('F3', '', $format06);
2839 $worksheet->write('G3', '', $format07);
2840 $worksheet->write('H3', '', $format06);
2841 $worksheet->write('I3', '', $format09);
2842
2843 $worksheet->write('B4', '', $format05);
2844 $worksheet->write('C4', '', $format06);
2845 $worksheet->write('D4', '', $format07);
2846 $worksheet->write('E4', '', $format06);
2847 $worksheet->write('F4', '', $format07);
2848 $worksheet->write('G4', '', $format06);
2849 $worksheet->write('H4', '', $format07);
2850 $worksheet->write('I4', '', $format08);
2851
2852 $worksheet->write('B5', '', $format10);
2853 $worksheet->write('C5', '', $format07);
2854 $worksheet->write('D5', '', $format06);
2855 $worksheet->write('E5', '', $format07);
2856 $worksheet->write('F5', '', $format06);
2857 $worksheet->write('G5', '', $format07);
2858 $worksheet->write('H5', '', $format06);
2859 $worksheet->write('I5', '', $format09);
2860
2861 $worksheet->write('B6', '', $format05);
2862 $worksheet->write('C6', '', $format06);
2863 $worksheet->write('D6', '', $format07);
2864 $worksheet->write('E6', '', $format06);
2865 $worksheet->write('F6', '', $format07);
2866 $worksheet->write('G6', '', $format06);
2867 $worksheet->write('H6', '', $format07);
2868 $worksheet->write('I6', '', $format08);
2869
2870 $worksheet->write('B7', '', $format10);
2871 $worksheet->write('C7', '', $format07);
2872 $worksheet->write('D7', '', $format06);
2873 $worksheet->write('E7', '', $format07);
2874 $worksheet->write('F7', '', $format06);
2875 $worksheet->write('G7', '', $format07);
2876 $worksheet->write('H7', '', $format06);
2877 $worksheet->write('I7', '', $format09);
2878
2879 $worksheet->write('B8', '', $format05);
2880 $worksheet->write('C8', '', $format06);
2881 $worksheet->write('D8', '', $format07);
2882 $worksheet->write('E8', '', $format06);
2883 $worksheet->write('F8', '', $format07);
2884 $worksheet->write('G8', '', $format06);
2885 $worksheet->write('H8', '', $format07);
2886 $worksheet->write('I8', '', $format08);
2887
2888 $worksheet->write('B9', '', $format11);
2889 $worksheet->write('C9', '', $format12);
2890 $worksheet->write('D9', '', $format13);
2891 $worksheet->write('E9', '', $format12);
2892 $worksheet->write('F9', '', $format13);
2893 $worksheet->write('G9', '', $format12);
2894 $worksheet->write('H9', '', $format13);
2895 $worksheet->write('I9', '', $format14);
2896
2897 Download this example:
2898 <http://cpansearch.perl.org/src/JMCNAMARA/Spreadsheet-WriteExcel-2.40/examples/chess.pl>
2899
2900 Example: colors.pl
2901 Demonstrates Spreadsheet::WriteExcel's named colors and the Excel color
2902 palette.
2903
2904 The set_custom_color() Worksheet method can be used to override one of
2905 the built-in palette values with a more suitable colour. See the main
2906 docs.
2907
2908 Source code for this example:
2909
2910 #!/usr/bin/perl -w
2911
2912 ################################################################################
2913 #
2914 # Demonstrates Spreadsheet::WriteExcel's named colors and the Excel color
2915 # palette.
2916 #
2917 # The set_custom_color() Worksheet method can be used to override one of the
2918 # built-in palette values with a more suitable colour. See the main docs.
2919 #
2920 # reverse('(c)'), March 2002, John McNamara, jmcnamara@cpan.org
2921 #
2922
2923 use strict;
2924 use Spreadsheet::WriteExcel;
2925
2926 my $workbook = Spreadsheet::WriteExcel->new("colors.xls");
2927
2928 # Some common formats
2929 my $center = $workbook->add_format(align => 'center');
2930 my $heading = $workbook->add_format(align => 'center', bold => 1);
2931
2932
2933 ######################################################################
2934 #
2935 # Demonstrate the named colors.
2936 #
2937
2938 my %colors = (
2939 0x08, 'black',
2940 0x0C, 'blue',
2941 0x10, 'brown',
2942 0x0F, 'cyan',
2943 0x17, 'gray',
2944 0x11, 'green',
2945 0x0B, 'lime',
2946 0x0E, 'magenta',
2947 0x12, 'navy',
2948 0x35, 'orange',
2949 0x21, 'pink',
2950 0x14, 'purple',
2951 0x0A, 'red',
2952 0x16, 'silver',
2953 0x09, 'white',
2954 0x0D, 'yellow',
2955 );
2956
2957 my $worksheet1 = $workbook->add_worksheet('Named colors');
2958
2959 $worksheet1->set_column(0, 3, 15);
2960
2961 $worksheet1->write(0, 0, "Index", $heading);
2962 $worksheet1->write(0, 1, "Index", $heading);
2963 $worksheet1->write(0, 2, "Name", $heading);
2964 $worksheet1->write(0, 3, "Color", $heading);
2965
2966 my $i = 1;
2967
2968 while (my($index, $color) = each %colors) {
2969 my $format = $workbook->add_format(
2970 fg_color => $color,
2971 pattern => 1,
2972 border => 1
2973 );
2974
2975 $worksheet1->write($i+1, 0, $index, $center);
2976 $worksheet1->write($i+1, 1, sprintf("0x%02X", $index), $center);
2977 $worksheet1->write($i+1, 2, $color, $center);
2978 $worksheet1->write($i+1, 3, '', $format);
2979 $i++;
2980 }
2981
2982
2983 ######################################################################
2984 #
2985 # Demonstrate the standard Excel colors in the range 8..63.
2986 #
2987
2988 my $worksheet2 = $workbook->add_worksheet('Standard colors');
2989
2990 $worksheet2->set_column(0, 3, 15);
2991
2992 $worksheet2->write(0, 0, "Index", $heading);
2993 $worksheet2->write(0, 1, "Index", $heading);
2994 $worksheet2->write(0, 2, "Color", $heading);
2995 $worksheet2->write(0, 3, "Name", $heading);
2996
2997 for my $i (8..63) {
2998 my $format = $workbook->add_format(
2999 fg_color => $i,
3000 pattern => 1,
3001 border => 1
3002 );
3003
3004 $worksheet2->write(($i -7), 0, $i, $center);
3005 $worksheet2->write(($i -7), 1, sprintf("0x%02X", $i), $center);
3006 $worksheet2->write(($i -7), 2, '', $format);
3007
3008 # Add the color names
3009 if (exists $colors{$i}) {
3010 $worksheet2->write(($i -7), 3, $colors{$i}, $center);
3011
3012 }
3013 }
3014
3015 __END__
3016
3017 Download this example:
3018 <http://cpansearch.perl.org/src/JMCNAMARA/Spreadsheet-WriteExcel-2.40/examples/colors.pl>
3019
3020 Example: comments1.pl
3021 This example demonstrates writing cell comments.
3022
3023 A cell comment is indicated in Excel by a small red triangle in the
3024 upper right-hand corner of the cell.
3025
3026 For more advanced comment options see comments2.pl.
3027
3028 Source code for this example:
3029
3030 #!/usr/bin/perl -w
3031
3032 ###############################################################################
3033 #
3034 # This example demonstrates writing cell comments.
3035 #
3036 # A cell comment is indicated in Excel by a small red triangle in the upper
3037 # right-hand corner of the cell.
3038 #
3039 # For more advanced comment options see comments2.pl.
3040 #
3041 # reverse('(c)'), November 2005, John McNamara, jmcnamara@cpan.org
3042 #
3043
3044 use strict;
3045 use Spreadsheet::WriteExcel;
3046
3047 my $workbook = Spreadsheet::WriteExcel->new("comments1.xls");
3048 my $worksheet = $workbook->add_worksheet();
3049
3050
3051
3052 $worksheet->write ('A1', 'Hello' );
3053 $worksheet->write_comment('A1', 'This is a comment');
3054
3055 __END__
3056
3057 Download this example:
3058 <http://cpansearch.perl.org/src/JMCNAMARA/Spreadsheet-WriteExcel-2.40/examples/comments1.pl>
3059
3060 Example: comments2.pl
3061 This example demonstrates writing cell comments.
3062
3063 A cell comment is indicated in Excel by a small red triangle in the
3064 upper right-hand corner of the cell.
3065
3066 Each of the worksheets demonstrates different features of cell
3067 comments.
3068
3069 Source code for this example:
3070
3071 #!/usr/bin/perl -w
3072
3073 ###############################################################################
3074 #
3075 # This example demonstrates writing cell comments.
3076 #
3077 # A cell comment is indicated in Excel by a small red triangle in the upper
3078 # right-hand corner of the cell.
3079 #
3080 # Each of the worksheets demonstrates different features of cell comments.
3081 #
3082 # reverse('(c)'), November 2005, John McNamara, jmcnamara@cpan.org
3083 #
3084
3085 use strict;
3086 use Spreadsheet::WriteExcel;
3087
3088 my $workbook = Spreadsheet::WriteExcel->new("comments2.xls");
3089 my $text_wrap = $workbook->add_format(text_wrap => 1, valign => 'top');
3090 my $worksheet1 = $workbook->add_worksheet();
3091 my $worksheet2 = $workbook->add_worksheet();
3092 my $worksheet3 = $workbook->add_worksheet();
3093 my $worksheet4 = $workbook->add_worksheet();
3094 my $worksheet5 = $workbook->add_worksheet();
3095 my $worksheet6 = $workbook->add_worksheet();
3096 my $worksheet7 = $workbook->add_worksheet();
3097 my $worksheet8 = $workbook->add_worksheet();
3098
3099
3100 # Variables that we will use in each example.
3101 my $cell_text = '';
3102 my $comment = '';
3103
3104
3105
3106
3107 ###############################################################################
3108 #
3109 # Example 1. Demonstrates a simple cell comment without formatting and Unicode
3110 # comments encoded as UTF-16 and as UTF-8.
3111 #
3112
3113 # Set up some formatting.
3114 $worksheet1->set_column('C:C', 25);
3115 $worksheet1->set_row(2, 50);
3116 $worksheet1->set_row(5, 50);
3117
3118
3119 # Simple ascii string.
3120 $cell_text = 'Hold the mouse over this cell to see the comment.';
3121
3122 $comment = 'This is a comment.';
3123
3124 $worksheet1->write ('C3', $cell_text, $text_wrap);
3125 $worksheet1->write_comment('C3', $comment);
3126
3127
3128 # UTF-16 string.
3129 $cell_text = 'This is a UTF-16 comment.';
3130
3131 $comment = pack "n", 0x263a;
3132
3133 $worksheet1->write ('C6', $cell_text, $text_wrap);
3134 $worksheet1->write_comment('C6', $comment, encoding => 1);
3135
3136
3137 # UTF-8 string in perl 5.8.
3138 if ($] >= 5.008) {
3139
3140 $worksheet1->set_row(8, 50);
3141 $cell_text = 'This is a UTF-8 string.';
3142 $comment = chr 0x263a;
3143
3144 $worksheet1->write ('C9', $cell_text, $text_wrap);
3145 $worksheet1->write_comment('C9', $comment);
3146 }
3147
3148
3149
3150 ###############################################################################
3151 #
3152 # Example 2. Demonstrates visible and hidden comments.
3153 #
3154
3155 # Set up some formatting.
3156 $worksheet2->set_column('C:C', 25);
3157 $worksheet2->set_row(2, 50);
3158 $worksheet2->set_row(5, 50);
3159
3160
3161 $cell_text = 'This cell comment is visible.';
3162
3163 $comment = 'Hello.';
3164
3165 $worksheet2->write ('C3', $cell_text, $text_wrap);
3166 $worksheet2->write_comment('C3', $comment, visible => 1);
3167
3168
3169 $cell_text = "This cell comment isn't visible (the default).";
3170
3171 $comment = 'Hello.';
3172
3173 $worksheet2->write ('C6', $cell_text, $text_wrap);
3174 $worksheet2->write_comment('C6', $comment);
3175
3176
3177
3178
3179 ###############################################################################
3180 #
3181 # Example 3. Demonstrates visible and hidden comments set at the worksheet
3182 # level.
3183 #
3184
3185 # Set up some formatting.
3186 $worksheet3->set_column('C:C', 25);
3187 $worksheet3->set_row(2, 50);
3188 $worksheet3->set_row(5, 50);
3189 $worksheet3->set_row(8, 50);
3190
3191 # Make all comments on the worksheet visible.
3192 $worksheet3->show_comments();
3193
3194 $cell_text = 'This cell comment is visible, explicitly.';
3195
3196 $comment = 'Hello.';
3197
3198 $worksheet3->write ('C3', $cell_text, $text_wrap);
3199 $worksheet3->write_comment('C3', $comment, visible => 1);
3200
3201
3202 $cell_text = 'This cell comment is also visible because '.
3203 'we used show_comments().';
3204
3205 $comment = 'Hello.';
3206
3207 $worksheet3->write ('C6', $cell_text, $text_wrap);
3208 $worksheet3->write_comment('C6', $comment);
3209
3210
3211 $cell_text = 'However, we can still override it locally.';
3212
3213 $comment = 'Hello.';
3214
3215 $worksheet3->write ('C9', $cell_text, $text_wrap);
3216 $worksheet3->write_comment('C9', $comment, visible => 0);
3217
3218
3219
3220
3221 ###############################################################################
3222 #
3223 # Example 4. Demonstrates changes to the comment box dimensions.
3224 #
3225
3226 # Set up some formatting.
3227 $worksheet4->set_column('C:C', 25);
3228 $worksheet4->set_row(2, 50);
3229 $worksheet4->set_row(5, 50);
3230 $worksheet4->set_row(8, 50);
3231 $worksheet4->set_row(15, 50);
3232
3233 $worksheet4->show_comments();
3234
3235 $cell_text = 'This cell comment is default size.';
3236
3237 $comment = 'Hello.';
3238
3239 $worksheet4->write ('C3', $cell_text, $text_wrap);
3240 $worksheet4->write_comment('C3', $comment);
3241
3242
3243 $cell_text = 'This cell comment is twice as wide.';
3244
3245 $comment = 'Hello.';
3246
3247 $worksheet4->write ('C6', $cell_text, $text_wrap);
3248 $worksheet4->write_comment('C6', $comment, x_scale => 2);
3249
3250
3251 $cell_text = 'This cell comment is twice as high.';
3252
3253 $comment = 'Hello.';
3254
3255 $worksheet4->write ('C9', $cell_text, $text_wrap);
3256 $worksheet4->write_comment('C9', $comment, y_scale => 2);
3257
3258
3259 $cell_text = 'This cell comment is scaled in both directions.';
3260
3261 $comment = 'Hello.';
3262
3263 $worksheet4->write ('C16', $cell_text, $text_wrap);
3264 $worksheet4->write_comment('C16', $comment, x_scale => 1.2, y_scale => 0.8);
3265
3266
3267 $cell_text = 'This cell comment has width and height specified in pixels.';
3268
3269 $comment = 'Hello.';
3270
3271 $worksheet4->write ('C19', $cell_text, $text_wrap);
3272 $worksheet4->write_comment('C19', $comment, width => 200, height => 20);
3273
3274
3275
3276 ###############################################################################
3277 #
3278 # Example 5. Demonstrates changes to the cell comment position.
3279 #
3280
3281 $worksheet5->set_column('C:C', 25);
3282 $worksheet5->set_row(2, 50);
3283 $worksheet5->set_row(5, 50);
3284 $worksheet5->set_row(8, 50);
3285 $worksheet5->set_row(11, 50);
3286
3287 $worksheet5->show_comments();
3288
3289 $cell_text = 'This cell comment is in the default position.';
3290
3291 $comment = 'Hello.';
3292
3293 $worksheet5->write ('C3', $cell_text, $text_wrap);
3294 $worksheet5->write_comment('C3', $comment);
3295
3296
3297 $cell_text = 'This cell comment has been moved to another cell.';
3298
3299 $comment = 'Hello.';
3300
3301 $worksheet5->write ('C6', $cell_text, $text_wrap);
3302 $worksheet5->write_comment('C6', $comment, start_cell => 'E4');
3303
3304
3305 $cell_text = 'This cell comment has been moved to another cell.';
3306
3307 $comment = 'Hello.';
3308
3309 $worksheet5->write ('C9', $cell_text, $text_wrap);
3310 $worksheet5->write_comment('C9', $comment, start_row => 8, start_col => 4);
3311
3312
3313 $cell_text = 'This cell comment has been shifted within its default cell.';
3314
3315 $comment = 'Hello.';
3316
3317 $worksheet5->write ('C12', $cell_text, $text_wrap);
3318 $worksheet5->write_comment('C12', $comment, x_offset => 30, y_offset => 12);
3319
3320
3321
3322 ###############################################################################
3323 #
3324 # Example 6. Demonstrates changes to the comment background colour.
3325 #
3326
3327 $worksheet6->set_column('C:C', 25);
3328 $worksheet6->set_row(2, 50);
3329 $worksheet6->set_row(5, 50);
3330 $worksheet6->set_row(8, 50);
3331
3332 $worksheet6->show_comments();
3333
3334 $cell_text = 'This cell comment has a different colour.';
3335
3336 $comment = 'Hello.';
3337
3338 $worksheet6->write ('C3', $cell_text, $text_wrap);
3339 $worksheet6->write_comment('C3', $comment, color => 'green');
3340
3341
3342 $cell_text = 'This cell comment has the default colour.';
3343
3344 $comment = 'Hello.';
3345
3346 $worksheet6->write ('C6', $cell_text, $text_wrap);
3347 $worksheet6->write_comment('C6', $comment);
3348
3349
3350 $cell_text = 'This cell comment has a different colour.';
3351
3352 $comment = 'Hello.';
3353
3354 $worksheet6->write ('C9', $cell_text, $text_wrap);
3355 $worksheet6->write_comment('C9', $comment, color => 0x35);
3356
3357
3358
3359
3360 ###############################################################################
3361 #
3362 # Example 7. Demonstrates how to set the cell comment author.
3363 #
3364
3365 $worksheet7->set_column('C:C', 30);
3366 $worksheet7->set_row(2, 50);
3367 $worksheet7->set_row(5, 50);
3368 $worksheet7->set_row(8, 50);
3369 $worksheet7->set_row(11, 50);
3370
3371 my $author = '';
3372 my $cell = 'C3';
3373
3374 $cell_text = "Move the mouse over this cell and you will see 'Cell commented ".
3375 "by $author' (blank) in the status bar at the bottom";
3376
3377 $comment = 'Hello.';
3378
3379 $worksheet7->write ($cell, $cell_text, $text_wrap);
3380 $worksheet7->write_comment($cell, $comment);
3381
3382
3383 $author = 'Perl';
3384 $cell = 'C6';
3385 $cell_text = "Move the mouse over this cell and you will see 'Cell commented ".
3386 "by $author' in the status bar at the bottom";
3387
3388 $comment = 'Hello.';
3389
3390 $worksheet7->write ($cell, $cell_text, $text_wrap);
3391 $worksheet7->write_comment($cell, $comment, author => $author);
3392
3393
3394 $author = pack "n", 0x20AC; # UTF-16 Euro
3395 $cell = 'C9';
3396 $cell_text = "Move the mouse over this cell and you will see 'Cell commented ".
3397 "by Euro' in the status bar at the bottom";
3398
3399 $comment = 'Hello.';
3400
3401 $worksheet7->write ($cell, $cell_text, $text_wrap);
3402 $worksheet7->write_comment($cell, $comment, author => $author,
3403 author_encoding => 1 );
3404
3405 # UTF-8 string in perl 5.8.
3406 if ($] >= 5.008) {
3407 $author = chr 0x20AC;
3408 $cell = 'C12';
3409 $cell_text = "Move the mouse over this cell and you will see 'Cell commented ".
3410 "by $author' in the status bar at the bottom";
3411 $comment = 'Hello.';
3412
3413 $worksheet7->write ($cell, $cell_text, $text_wrap);
3414 $worksheet7->write_comment($cell, $comment, author => $author);
3415
3416 }
3417
3418
3419 ###############################################################################
3420 #
3421 # Example 8. Demonstrates the need to explicitly set the row height.
3422 #
3423
3424 # Set up some formatting.
3425 $worksheet8->set_column('C:C', 25);
3426 $worksheet8->set_row(2, 80);
3427
3428 $worksheet8->show_comments();
3429
3430
3431 $cell_text = 'The height of this row has been adjusted explicitly using ' .
3432 'set_row(). The size of the comment box is adjusted ' .
3433 'accordingly by WriteExcel.';
3434
3435 $comment = 'Hello.';
3436
3437 $worksheet8->write ('C3', $cell_text, $text_wrap);
3438 $worksheet8->write_comment('C3', $comment);
3439
3440
3441 $cell_text = 'The height of this row has been adjusted by Excel due to the ' .
3442 'text wrap property being set. Unfortunately this means that ' .
3443 'the height of the row is unknown to WriteExcel at run time ' .
3444 "and thus the comment box is stretched as well.\n\n" .
3445 'Use set_row() to specify the row height explicitly to avoid ' .
3446 'this problem.';
3447
3448 $comment = 'Hello.';
3449
3450 $worksheet8->write ('C6', $cell_text, $text_wrap);
3451 $worksheet8->write_comment('C6', $comment);
3452
3453 __END__
3454
3455 Download this example:
3456 <http://cpansearch.perl.org/src/JMCNAMARA/Spreadsheet-WriteExcel-2.40/examples/comments2.pl>
3457
3458 Example: copyformat.pl
3459 Example of how to use the format copying method with
3460 Spreadsheet::WriteExcel.
3461
3462 This feature isn't required very often.
3463
3464 Source code for this example:
3465
3466 #!/usr/bin/perl -w
3467
3468 ###############################################################################
3469 #
3470 # Example of how to use the format copying method with Spreadsheet::WriteExcel.
3471 #
3472 # This feature isn't required very often.
3473 #
3474 # reverse('(c)'), March 2001, John McNamara, jmcnamara@cpan.org
3475 #
3476
3477 use strict;
3478 use Spreadsheet::WriteExcel;
3479
3480 # Create workbook1
3481 my $workbook1 = Spreadsheet::WriteExcel->new("workbook1.xls");
3482 my $worksheet1 = $workbook1->add_worksheet();
3483 my $format1a = $workbook1->add_format();
3484 my $format1b = $workbook1->add_format();
3485
3486 # Create workbook2
3487 my $workbook2 = Spreadsheet::WriteExcel->new("workbook2.xls");
3488 my $worksheet2 = $workbook2->add_worksheet();
3489 my $format2a = $workbook2->add_format();
3490 my $format2b = $workbook2->add_format();
3491
3492
3493 # Create a global format object that isn't tied to a workbook
3494 my $global_format = Spreadsheet::WriteExcel::Format->new();
3495
3496 # Set the formatting
3497 $global_format->set_color('blue');
3498 $global_format->set_bold();
3499 $global_format->set_italic();
3500
3501 # Create another example format
3502 $format1b->set_color('red');
3503
3504 # Copy the global format properties to the worksheet formats
3505 $format1a->copy($global_format);
3506 $format2a->copy($global_format);
3507
3508 # Copy a format from worksheet1 to worksheet2
3509 $format2b->copy($format1b);
3510
3511 # Write some output
3512 $worksheet1->write(0, 0, "Ciao", $format1a);
3513 $worksheet1->write(1, 0, "Ciao", $format1b);
3514
3515 $worksheet2->write(0, 0, "Hello", $format2a);
3516 $worksheet2->write(1, 0, "Hello", $format2b);
3517
3518 Download this example:
3519 <http://cpansearch.perl.org/src/JMCNAMARA/Spreadsheet-WriteExcel-2.40/examples/copyformat.pl>
3520
3521 Example: data_validate.pl
3522 Example of how to add data validation and dropdown lists to a
3523 Spreadsheet::WriteExcel file.
3524
3525 Data validation is a feature of Excel which allows you to restrict the
3526 data that a users enters in a cell and to display help and warning
3527 messages. It also allows you to restrict input to values in a drop down
3528 list.
3529
3530 Source code for this example:
3531
3532 #!/usr/bin/perl -w
3533
3534 ###############################################################################
3535 #
3536 # Example of how to add data validation and dropdown lists to a
3537 # Spreadsheet::WriteExcel file.
3538 #
3539 # Data validation is a feature of Excel which allows you to restrict the data
3540 # that a users enters in a cell and to display help and warning messages. It
3541 # also allows you to restrict input to values in a drop down list.
3542 #
3543 # reverse('(c)'), August 2008, John McNamara, jmcnamara@cpan.org
3544 #
3545
3546 use strict;
3547 use Spreadsheet::WriteExcel;
3548
3549 my $workbook = Spreadsheet::WriteExcel->new('data_validate.xls');
3550 my $worksheet = $workbook->add_worksheet();
3551
3552 # Add a format for the header cells.
3553 my $header_format = $workbook->add_format(
3554 border => 1,
3555 bg_color => 43,
3556 bold => 1,
3557 text_wrap => 1,
3558 valign => 'vcenter',
3559 indent => 1,
3560 );
3561
3562 # Set up layout of the worksheet.
3563 $worksheet->set_column('A:A', 64);
3564 $worksheet->set_column('B:B', 15);
3565 $worksheet->set_column('D:D', 15);
3566 $worksheet->set_row(0, 36);
3567 $worksheet->set_selection('B3');
3568
3569
3570 # Write the header cells and some data that will be used in the examples.
3571 my $row = 0;
3572 my $txt;
3573 my $heading1 = 'Some examples of data validation in Spreadsheet::WriteExcel';
3574 my $heading2 = 'Enter values in this column';
3575 my $heading3 = 'Sample Data';
3576
3577 $worksheet->write('A1', $heading1, $header_format);
3578 $worksheet->write('B1', $heading2, $header_format);
3579 $worksheet->write('D1', $heading3, $header_format);
3580
3581 $worksheet->write('D3', ['Integers', 1, 10]);
3582 $worksheet->write('D4', ['List data', 'open', 'high', 'close']);
3583 $worksheet->write('D5', ['Formula', '=AND(F5=50,G5=60)', 50, 60]);
3584
3585
3586 #
3587 # Example 1. Limiting input to an integer in a fixed range.
3588 #
3589 $txt = 'Enter an integer between 1 and 10';
3590 $row += 2;
3591
3592 $worksheet->write($row, 0, $txt);
3593 $worksheet->data_validation($row, 1,
3594 {
3595 validate => 'integer',
3596 criteria => 'between',
3597 minimum => 1,
3598 maximum => 10,
3599 });
3600
3601
3602 #
3603 # Example 2. Limiting input to an integer outside a fixed range.
3604 #
3605 $txt = 'Enter an integer that is not between 1 and 10 (using cell references)';
3606 $row += 2;
3607
3608 $worksheet->write($row, 0, $txt);
3609 $worksheet->data_validation($row, 1,
3610 {
3611 validate => 'integer',
3612 criteria => 'not between',
3613 minimum => '=E3',
3614 maximum => '=F3',
3615 });
3616
3617
3618 #
3619 # Example 3. Limiting input to an integer greater than a fixed value.
3620 #
3621 $txt = 'Enter an integer greater than 0';
3622 $row += 2;
3623
3624 $worksheet->write($row, 0, $txt);
3625 $worksheet->data_validation($row, 1,
3626 {
3627 validate => 'integer',
3628 criteria => '>',
3629 value => 0,
3630 });
3631
3632
3633 #
3634 # Example 4. Limiting input to an integer less than a fixed value.
3635 #
3636 $txt = 'Enter an integer less than 10';
3637 $row += 2;
3638
3639 $worksheet->write($row, 0, $txt);
3640 $worksheet->data_validation($row, 1,
3641 {
3642 validate => 'integer',
3643 criteria => '<',
3644 value => 10,
3645 });
3646
3647
3648 #
3649 # Example 5. Limiting input to a decimal in a fixed range.
3650 #
3651 $txt = 'Enter a decimal between 0.1 and 0.5';
3652 $row += 2;
3653
3654 $worksheet->write($row, 0, $txt);
3655 $worksheet->data_validation($row, 1,
3656 {
3657 validate => 'decimal',
3658 criteria => 'between',
3659 minimum => 0.1,
3660 maximum => 0.5,
3661 });
3662
3663
3664 #
3665 # Example 6. Limiting input to a value in a dropdown list.
3666 #
3667 $txt = 'Select a value from a drop down list';
3668 $row += 2;
3669
3670 $worksheet->write($row, 0, $txt);
3671 $worksheet->data_validation($row, 1,
3672 {
3673 validate => 'list',
3674 source => ['open', 'high', 'close'],
3675 });
3676
3677
3678 #
3679 # Example 6. Limiting input to a value in a dropdown list.
3680 #
3681 $txt = 'Select a value from a drop down list (using a cell range)';
3682 $row += 2;
3683
3684 $worksheet->write($row, 0, $txt);
3685 $worksheet->data_validation($row, 1,
3686 {
3687 validate => 'list',
3688 source => '=E4:G4',
3689 });
3690
3691
3692 #
3693 # Example 7. Limiting input to a date in a fixed range.
3694 #
3695 $txt = 'Enter a date between 1/1/2008 and 12/12/2008';
3696 $row += 2;
3697
3698 $worksheet->write($row, 0, $txt);
3699 $worksheet->data_validation($row, 1,
3700 {
3701 validate => 'date',
3702 criteria => 'between',
3703 minimum => '2008-01-01T',
3704 maximum => '2008-12-12T',
3705 });
3706
3707
3708 #
3709 # Example 8. Limiting input to a time in a fixed range.
3710 #
3711 $txt = 'Enter a time between 6:00 and 12:00';
3712 $row += 2;
3713
3714 $worksheet->write($row, 0, $txt);
3715 $worksheet->data_validation($row, 1,
3716 {
3717 validate => 'time',
3718 criteria => 'between',
3719 minimum => 'T06:00',
3720 maximum => 'T12:00',
3721 });
3722
3723
3724 #
3725 # Example 9. Limiting input to a string greater than a fixed length.
3726 #
3727 $txt = 'Enter a string longer than 3 characters';
3728 $row += 2;
3729
3730 $worksheet->write($row, 0, $txt);
3731 $worksheet->data_validation($row, 1,
3732 {
3733 validate => 'length',
3734 criteria => '>',
3735 value => 3,
3736 });
3737
3738
3739 #
3740 # Example 10. Limiting input based on a formula.
3741 #
3742 $txt = 'Enter a value if the following is true "=AND(F5=50,G5=60)"';
3743 $row += 2;
3744
3745 $worksheet->write($row, 0, $txt);
3746 $worksheet->data_validation($row, 1,
3747 {
3748 validate => 'custom',
3749 value => '=AND(F5=50,G5=60)',
3750 });
3751
3752
3753 #
3754 # Example 11. Displaying and modify data validation messages.
3755 #
3756 $txt = 'Displays a message when you select the cell';
3757 $row += 2;
3758
3759 $worksheet->write($row, 0, $txt);
3760 $worksheet->data_validation($row, 1,
3761 {
3762 validate => 'integer',
3763 criteria => 'between',
3764 minimum => 1,
3765 maximum => 100,
3766 input_title => 'Enter an integer:',
3767 input_message => 'between 1 and 100',
3768 });
3769
3770
3771 #
3772 # Example 12. Displaying and modify data validation messages.
3773 #
3774 $txt = 'Display a custom error message when integer isn\'t between 1 and 100';
3775 $row += 2;
3776
3777 $worksheet->write($row, 0, $txt);
3778 $worksheet->data_validation($row, 1,
3779 {
3780 validate => 'integer',
3781 criteria => 'between',
3782 minimum => 1,
3783 maximum => 100,
3784 input_title => 'Enter an integer:',
3785 input_message => 'between 1 and 100',
3786 error_title => 'Input value is not valid!',
3787 error_message => 'It should be an integer between 1 and 100',
3788 });
3789
3790
3791 #
3792 # Example 13. Displaying and modify data validation messages.
3793 #
3794 $txt = 'Display a custom information message when integer isn\'t between 1 and 100';
3795 $row += 2;
3796
3797 $worksheet->write($row, 0, $txt);
3798 $worksheet->data_validation($row, 1,
3799 {
3800 validate => 'integer',
3801 criteria => 'between',
3802 minimum => 1,
3803 maximum => 100,
3804 input_title => 'Enter an integer:',
3805 input_message => 'between 1 and 100',
3806 error_title => 'Input value is not valid!',
3807 error_message => 'It should be an integer between 1 and 100',
3808 error_type => 'information',
3809 });
3810
3811
3812 __END__
3813
3814 Download this example:
3815 <http://cpansearch.perl.org/src/JMCNAMARA/Spreadsheet-WriteExcel-2.40/examples/data_validate.pl>
3816
3817 Example: date_time.pl
3818 Spreadsheet::WriteExcel example of writing dates and times using the
3819 write_date_time() Worksheet method.
3820
3821 Source code for this example:
3822
3823 #!/usr/bin/perl -w
3824
3825 ###############################################################################
3826 #
3827 # Spreadsheet::WriteExcel example of writing dates and times using the
3828 # write_date_time() Worksheet method.
3829 #
3830 # reverse('(c)'), August 2004, John McNamara, jmcnamara@cpan.org
3831 #
3832
3833 use strict;
3834 use Spreadsheet::WriteExcel;
3835
3836
3837 # Create a new workbook and add a worksheet
3838 my $workbook = Spreadsheet::WriteExcel->new("date_time.xls");
3839 my $worksheet = $workbook->add_worksheet();
3840 my $bold = $workbook->add_format(bold => 1);
3841 my $row = 0;
3842
3843
3844 # Expand the first column so that the date is visible.
3845 $worksheet->set_column("A:B", 30);
3846
3847
3848 # Write the column headers
3849 $worksheet->write('A1', 'Formatted date', $bold);
3850 $worksheet->write('B1', 'Format', $bold);
3851
3852
3853 # Examples date and time formats. In the output file compare how changing
3854 # the format codes change the appearance of the date.
3855 #
3856 my @date_formats = (
3857 'dd/mm/yy',
3858 'mm/dd/yy',
3859 '',
3860 'd mm yy',
3861 'dd mm yy',
3862 '',
3863 'dd m yy',
3864 'dd mm yy',
3865 'dd mmm yy',
3866 'dd mmmm yy',
3867 '',
3868 'dd mm y',
3869 'dd mm yyy',
3870 'dd mm yyyy',
3871 '',
3872 'd mmmm yyyy',
3873 '',
3874 'dd/mm/yy',
3875 'dd/mm/yy hh:mm',
3876 'dd/mm/yy hh:mm:ss',
3877 'dd/mm/yy hh:mm:ss.000',
3878 '',
3879 'hh:mm',
3880 'hh:mm:ss',
3881 'hh:mm:ss.000',
3882 );
3883
3884
3885 # Write the same date and time using each of the above formats. The empty
3886 # string formats create a blank line to make the example clearer.
3887 #
3888 for my $date_format (@date_formats) {
3889 $row++;
3890 next if $date_format eq '';
3891
3892 # Create a format for the date or time.
3893 my $format = $workbook->add_format(
3894 num_format => $date_format,
3895 align => 'left'
3896 );
3897
3898 # Write the same date using different formats.
3899 $worksheet->write_date_time($row, 0, '2004-08-01T12:30:45.123', $format);
3900 $worksheet->write ($row, 1, $date_format);
3901 }
3902
3903
3904 # The following is an example of an invalid date. It is written as a string
3905 # instead of a number. This is also Excel's default behaviour.
3906 #
3907 $row += 2;
3908 $worksheet->write_date_time($row, 0, '2004-13-01T12:30:45.123');
3909 $worksheet->write ($row, 1, 'Invalid date. Written as string.', $bold);
3910
3911 __END__
3912
3913 Download this example:
3914 <http://cpansearch.perl.org/src/JMCNAMARA/Spreadsheet-WriteExcel-2.40/examples/date_time.pl>
3915
3916 Example: defined_name.pl
3917 Example of how to create defined names in a Spreadsheet::WriteExcel
3918 file.
3919
3920 This method is used to defined a name that can be used to represent a
3921 value, a single cell or a range of cells in a workbook.
3922
3923 Source code for this example:
3924
3925 #!/usr/bin/perl -w
3926
3927 ###############################################################################
3928 #
3929 # Example of how to create defined names in a Spreadsheet::WriteExcel file.
3930 #
3931 # This method is used to defined a name that can be used to represent a value,
3932 # a single cell or a range of cells in a workbook.
3933 #
3934 # reverse('(c)'), September 2008, John McNamara, jmcnamara@cpan.org
3935 #
3936
3937 use strict;
3938 use Spreadsheet::WriteExcel;
3939
3940 my $workbook = Spreadsheet::WriteExcel->new('defined_name.xls');
3941 my $worksheet1 = $workbook->add_worksheet();
3942 my $worksheet2 = $workbook->add_worksheet();
3943
3944
3945 $workbook->define_name('Exchange_rate', '=0.96');
3946 $workbook->define_name('Sales', '=Sheet1!$G$1:$H$10');
3947 $workbook->define_name('Sheet2!Sales', '=Sheet2!$G$1:$G$10');
3948
3949
3950 for my $worksheet ($workbook->sheets()) {
3951 $worksheet->set_column('A:A', 45);
3952 $worksheet->write('A2', 'This worksheet contains some defined names,');
3953 $worksheet->write('A3', 'See the Insert -> Name -> Define dialog.');
3954
3955 }
3956
3957
3958 $worksheet1->write('A4', '=Exchange_rate');
3959
3960 __END__
3961
3962 Download this example:
3963 <http://cpansearch.perl.org/src/JMCNAMARA/Spreadsheet-WriteExcel-2.40/examples/defined_name.pl>
3964
3965 Example: diag_border.pl
3966 A simple formatting example that demonstrates how to add a diagonal
3967 cell border with Spreadsheet::WriteExcel
3968
3969 Source code for this example:
3970
3971 #!/usr/bin/perl -w
3972
3973 ##############################################################################
3974 #
3975 # A simple formatting example that demonstrates how to add a diagonal cell
3976 # border with Spreadsheet::WriteExcel
3977 #
3978 # reverse('(c)'), May 2004, John McNamara, jmcnamara@cpan.org
3979 #
3980
3981 use strict;
3982 use Spreadsheet::WriteExcel;
3983
3984
3985 my $workbook = Spreadsheet::WriteExcel->new('diag_border.xls');
3986 my $worksheet = $workbook->add_worksheet();
3987
3988
3989 my $format1 = $workbook->add_format(diag_type => '1');
3990
3991 my $format2 = $workbook->add_format(diag_type => '2');
3992
3993 my $format3 = $workbook->add_format(diag_type => '3');
3994
3995 my $format4 = $workbook->add_format(
3996 diag_type => '3',
3997 diag_border => '7',
3998 diag_color => 'red',
3999 );
4000
4001
4002 $worksheet->write('B3', 'Text', $format1);
4003 $worksheet->write('B6', 'Text', $format2);
4004 $worksheet->write('B9', 'Text', $format3);
4005 $worksheet->write('B12', 'Text', $format4);
4006
4007
4008
4009 __END__
4010
4011 Download this example:
4012 <http://cpansearch.perl.org/src/JMCNAMARA/Spreadsheet-WriteExcel-2.40/examples/diag_border.pl>
4013
4014 Example: easter_egg.pl
4015 This uses the Win32::OLE module to expose the Flight Simulator easter
4016 egg in Excel 97 SR2.
4017
4018 #!/usr/bin/perl -w
4019
4020 ###############################################################################
4021 #
4022 # This uses the Win32::OLE module to expose the Flight Simulator easter egg
4023 # in Excel 97 SR2.
4024 #
4025 # reverse('(c)'), March 2001, John McNamara, jmcnamara@cpan.org
4026 #
4027
4028 use strict;
4029 use Win32::OLE;
4030
4031 my $application = Win32::OLE->new("Excel.Application");
4032 my $workbook = $application->Workbooks->Add;
4033 my $worksheet = $workbook->Worksheets(1);
4034
4035 $application->{Visible} = 1;
4036
4037 $worksheet->Range("L97:X97")->Select;
4038 $worksheet->Range("M97")->Activate;
4039
4040 my $message = "Hold down Shift and Ctrl and click the ".
4041 "Chart Wizard icon on the toolbar.\n\n".
4042 "Use the mouse motion and buttons to control ".
4043 "movement. Try to find the monolith. ".
4044 "Close this dialog first.";
4045
4046 $application->InputBox($message);
4047
4048 Download this example:
4049 <http://cpansearch.perl.org/src/JMCNAMARA/Spreadsheet-WriteExcel-2.40/examples/easter_egg.pl>
4050
4051 Example: filehandle.pl
4052 Example of using Spreadsheet::WriteExcel to write Excel files to
4053 different filehandles.
4054
4055 Source code for this example:
4056
4057 #!/usr/bin/perl -w
4058
4059 ###############################################################################
4060 #
4061 # Example of using Spreadsheet::WriteExcel to write Excel files to
4062 # different filehandles.
4063 #
4064 # reverse('(c)'), April 2003, John McNamara, jmcnamara@cpan.org
4065 #
4066
4067 use strict;
4068 use Spreadsheet::WriteExcel;
4069 use IO::Scalar;
4070
4071
4072
4073
4074 ###############################################################################
4075 #
4076 # Example 1. This demonstrates the standard way of creating an Excel file by
4077 # specifying a file name.
4078 #
4079
4080 my $workbook1 = Spreadsheet::WriteExcel->new('fh_01.xls');
4081 my $worksheet1 = $workbook1->add_worksheet();
4082
4083 $worksheet1->write(0, 0, "Hi Excel!");
4084
4085
4086
4087
4088 ###############################################################################
4089 #
4090 # Example 2. Write an Excel file to an existing filehandle.
4091 #
4092
4093 open TEST, "> fh_02.xls" or die "Couldn't open file: $!";
4094 binmode TEST; # Always do this regardless of whether the platform requires it.
4095
4096 my $workbook2 = Spreadsheet::WriteExcel->new(\*TEST);
4097 my $worksheet2 = $workbook2->add_worksheet();
4098
4099 $worksheet2->write(0, 0, "Hi Excel!");
4100
4101
4102
4103
4104 ###############################################################################
4105 #
4106 # Example 3. Write an Excel file to an existing OO style filehandle.
4107 #
4108
4109 my $fh = FileHandle->new("> fh_03.xls")
4110 or die "Couldn't open file: $!";
4111
4112 binmode($fh);
4113
4114 my $workbook3 = Spreadsheet::WriteExcel->new($fh);
4115 my $worksheet3 = $workbook3->add_worksheet();
4116
4117 $worksheet3->write(0, 0, "Hi Excel!");
4118
4119
4120
4121
4122 ###############################################################################
4123 #
4124 # Example 4. Write an Excel file to a string via IO::Scalar. Please refer to
4125 # the IO::Scalar documentation for further details.
4126 #
4127
4128 my $xls_str;
4129
4130 tie *XLS, 'IO::Scalar', \$xls_str;
4131
4132 my $workbook4 = Spreadsheet::WriteExcel->new(\*XLS);
4133 my $worksheet4 = $workbook4->add_worksheet();
4134
4135 $worksheet4->write(0, 0, "Hi Excel 4");
4136 $workbook4->close(); # This is required before we use the scalar
4137
4138
4139 # The Excel file is now in $xls_str. As a demonstration, print it to a file.
4140 open TMP, "> fh_04.xls" or die "Couldn't open file: $!";
4141 binmode TMP;
4142 print TMP $xls_str;
4143 close TMP;
4144
4145
4146
4147
4148 ###############################################################################
4149 #
4150 # Example 5. Write an Excel file to a string via IO::Scalar's newer interface.
4151 # Please refer to the IO::Scalar documentation for further details.
4152 #
4153 my $xls_str2;
4154
4155 my $fh5 = IO::Scalar->new(\$xls_str2);
4156
4157
4158 my $workbook5 = Spreadsheet::WriteExcel->new($fh5);
4159 my $worksheet5 = $workbook5->add_worksheet();
4160
4161 $worksheet5->write(0, 0, "Hi Excel 5");
4162 $workbook5->close(); # This is required before we use the scalar
4163
4164 # The Excel file is now in $xls_str. As a demonstration, print it to a file.
4165 open TMP, "> fh_05.xls" or die "Couldn't open file: $!";
4166 binmode TMP;
4167 print TMP $xls_str2;
4168 close TMP;
4169
4170 Download this example:
4171 <http://cpansearch.perl.org/src/JMCNAMARA/Spreadsheet-WriteExcel-2.40/examples/filehandle.pl>
4172
4173 Example: formula_result.pl
4174 Example of how to write Spreadsheet::WriteExcel formulas with a user
4175 specified result.
4176
4177 This is generally only required when writing a spreadsheet for an
4178 application other than Excel where the formula isn't evaluated.
4179
4180 Source code for this example:
4181
4182 #!/usr/bin/perl -w
4183
4184 #######################################################################
4185 #
4186 # Example of how to write Spreadsheet::WriteExcel formulas with a user
4187 # specified result.
4188 #
4189 # This is generally only required when writing a spreadsheet for an
4190 # application other than Excel where the formula isn't evaluated.
4191 #
4192 # reverse('(c)'), August 2005, John McNamara, jmcnamara@cpan.org
4193 #
4194
4195 use strict;
4196 use Spreadsheet::WriteExcel;
4197
4198 my $workbook = Spreadsheet::WriteExcel->new('formula_result.xls');
4199 my $worksheet = $workbook->add_worksheet();
4200 my $format = $workbook->add_format(color => 'blue');
4201
4202
4203 $worksheet->write('A1', '=1+2');
4204 $worksheet->write('A2', '=1+2', $format, 4);
4205 $worksheet->write('A3', '="ABC"', undef, 'DEF');
4206 $worksheet->write('A4', '=IF(A1 > 1, TRUE, FALSE)', undef, 'TRUE');
4207 $worksheet->write('A5', '=1/0', undef, '#DIV/0!');
4208
4209
4210 __END__
4211
4212 Download this example:
4213 <http://cpansearch.perl.org/src/JMCNAMARA/Spreadsheet-WriteExcel-2.40/examples/formula_result.pl>
4214
4215 Example: headers.pl
4216 This program shows several examples of how to set up headers and
4217 footers with Spreadsheet::WriteExcel.
4218
4219 The control characters used in the header/footer strings are:
4220
4221 Control Category Description
4222 ======= ======== ===========
4223 &L Justification Left
4224 &C Center
4225 &R Right
4226
4227 &P Information Page number
4228 &N Total number of pages
4229 &D Date
4230 &T Time
4231 &F File name
4232 &A Worksheet name
4233
4234 &fontsize Font Font size
4235 &"font,style" Font name and style
4236 &U Single underline
4237 &E Double underline
4238 &S Strikethrough
4239 &X Superscript
4240 &Y Subscript
4241
4242 && Miscellaneous Literal ampersand &
4243
4244 See the main Spreadsheet::WriteExcel documentation for more
4245 information.
4246
4247 Source code for this example:
4248
4249 #!/usr/bin/perl -w
4250
4251 ######################################################################
4252 #
4253 # This program shows several examples of how to set up headers and
4254 # footers with Spreadsheet::WriteExcel.
4255 #
4256 # The control characters used in the header/footer strings are:
4257 #
4258 # Control Category Description
4259 # ======= ======== ===========
4260 # &L Justification Left
4261 # &C Center
4262 # &R Right
4263 #
4264 # &P Information Page number
4265 # &N Total number of pages
4266 # &D Date
4267 # &T Time
4268 # &F File name
4269 # &A Worksheet name
4270 #
4271 # &fontsize Font Font size
4272 # &"font,style" Font name and style
4273 # &U Single underline
4274 # &E Double underline
4275 # &S Strikethrough
4276 # &X Superscript
4277 # &Y Subscript
4278 #
4279 # && Miscellaneous Literal ampersand &
4280 #
4281 # See the main Spreadsheet::WriteExcel documentation for more information.
4282 #
4283 # reverse('(c)'), March 2002, John McNamara, jmcnamara@cpan.org
4284 #
4285
4286
4287 use strict;
4288 use Spreadsheet::WriteExcel;
4289
4290 my $workbook = Spreadsheet::WriteExcel->new("headers.xls");
4291 my $preview = "Select Print Preview to see the header and footer";
4292
4293
4294 ######################################################################
4295 #
4296 # A simple example to start
4297 #
4298 my $worksheet1 = $workbook->add_worksheet('Simple');
4299
4300 my $header1 = '&CHere is some centred text.';
4301
4302 my $footer1 = '&LHere is some left aligned text.';
4303
4304
4305 $worksheet1->set_header($header1);
4306 $worksheet1->set_footer($footer1);
4307
4308 $worksheet1->set_column('A:A', 50);
4309 $worksheet1->write('A1', $preview);
4310
4311
4312
4313
4314 ######################################################################
4315 #
4316 # This is an example of some of the header/footer variables.
4317 #
4318 my $worksheet2 = $workbook->add_worksheet('Variables');
4319
4320 my $header2 = '&LPage &P of &N'.
4321 '&CFilename: &F' .
4322 '&RSheetname: &A';
4323
4324 my $footer2 = '&LCurrent date: &D'.
4325 '&RCurrent time: &T';
4326
4327
4328
4329 $worksheet2->set_header($header2);
4330 $worksheet2->set_footer($footer2);
4331
4332
4333 $worksheet2->set_column('A:A', 50);
4334 $worksheet2->write('A1', $preview);
4335 $worksheet2->write('A21', "Next sheet");
4336 $worksheet2->set_h_pagebreaks(20);
4337
4338
4339
4340 ######################################################################
4341 #
4342 # This example shows how to use more than one font
4343 #
4344 my $worksheet3 = $workbook->add_worksheet('Mixed fonts');
4345
4346 my $header3 = '&C' .
4347 '&"Courier New,Bold"Hello ' .
4348 '&"Arial,Italic"World';
4349
4350 my $footer3 = '&C' .
4351 '&"Symbol"e' .
4352 '&"Arial" = mc&X2';
4353
4354 $worksheet3->set_header($header3);
4355 $worksheet3->set_footer($footer3);
4356
4357 $worksheet3->set_column('A:A', 50);
4358 $worksheet3->write('A1', $preview);
4359
4360
4361
4362
4363 ######################################################################
4364 #
4365 # Example of line wrapping
4366 #
4367 my $worksheet4 = $workbook->add_worksheet('Word wrap');
4368
4369 my $header4 = "&CHeading 1\nHeading 2\nHeading 3";
4370
4371 $worksheet4->set_header($header4);
4372
4373 $worksheet4->set_column('A:A', 50);
4374 $worksheet4->write('A1', $preview);
4375
4376
4377
4378
4379 ######################################################################
4380 #
4381 # Example of inserting a literal ampersand &
4382 #
4383 my $worksheet5 = $workbook->add_worksheet('Ampersand');
4384
4385 my $header5 = "&CCuriouser && Curiouser - Attorneys at Law";
4386
4387 $worksheet5->set_header($header5);
4388
4389 $worksheet5->set_column('A:A', 50);
4390 $worksheet5->write('A1', $preview);
4391
4392 Download this example:
4393 <http://cpansearch.perl.org/src/JMCNAMARA/Spreadsheet-WriteExcel-2.40/examples/headers.pl>
4394
4395 Example: hide_sheet.pl
4396 Example of how to hide a worksheet with Spreadsheet::WriteExcel.
4397
4398 Source code for this example:
4399
4400 #!/usr/bin/perl -w
4401
4402 #######################################################################
4403 #
4404 # Example of how to hide a worksheet with Spreadsheet::WriteExcel.
4405 #
4406 # reverse('(c)'), April 2005, John McNamara, jmcnamara@cpan.org
4407 #
4408
4409 use strict;
4410 use Spreadsheet::WriteExcel;
4411
4412 my $workbook = Spreadsheet::WriteExcel->new('hidden.xls');
4413 my $worksheet1 = $workbook->add_worksheet();
4414 my $worksheet2 = $workbook->add_worksheet();
4415 my $worksheet3 = $workbook->add_worksheet();
4416
4417 # Sheet2 won't be visible until it is unhidden in Excel.
4418 $worksheet2->hide();
4419
4420 $worksheet1->write(0, 0, 'Sheet2 is hidden');
4421 $worksheet2->write(0, 0, 'How did you find me?');
4422 $worksheet3->write(0, 0, 'Sheet2 is hidden');
4423
4424
4425 __END__
4426
4427 Download this example:
4428 <http://cpansearch.perl.org/src/JMCNAMARA/Spreadsheet-WriteExcel-2.40/examples/hide_sheet.pl>
4429
4430 Example: hyperlink1.pl
4431 Example of how to use the WriteExcel module to write hyperlinks.
4432
4433 See also hyperlink2.pl for worksheet URL examples.
4434
4435 Source code for this example:
4436
4437 #!/usr/bin/perl -w
4438
4439 ###############################################################################
4440 #
4441 # Example of how to use the WriteExcel module to write hyperlinks.
4442 #
4443 # See also hyperlink2.pl for worksheet URL examples.
4444 #
4445 # reverse('(c)'), March 2001, John McNamara, jmcnamara@cpan.org
4446 #
4447
4448 use strict;
4449 use Spreadsheet::WriteExcel;
4450
4451 # Create a new workbook and add a worksheet
4452 my $workbook = Spreadsheet::WriteExcel->new("hyperlink.xls");
4453 my $worksheet = $workbook->add_worksheet('Hyperlinks');
4454
4455 # Format the first column
4456 $worksheet->set_column('A:A', 30);
4457 $worksheet->set_selection('B1');
4458
4459
4460 # Add a sample format
4461 my $format = $workbook->add_format();
4462 $format->set_size(12);
4463 $format->set_bold();
4464 $format->set_color('red');
4465 $format->set_underline();
4466
4467
4468 # Write some hyperlinks
4469 $worksheet->write('A1', 'http://www.perl.com/' );
4470 $worksheet->write('A3', 'http://www.perl.com/', 'Perl home' );
4471 $worksheet->write('A5', 'http://www.perl.com/', undef, $format);
4472 $worksheet->write('A7', 'mailto:jmcnamara@cpan.org', 'Mail me');
4473
4474 # Write a URL that isn't a hyperlink
4475 $worksheet->write_string('A9', 'http://www.perl.com/');
4476
4477 Download this example:
4478 <http://cpansearch.perl.org/src/JMCNAMARA/Spreadsheet-WriteExcel-2.40/examples/hyperlink1.pl>
4479
4480 Example: hyperlink2.pl
4481 Example of how to use the WriteExcel module to write internal and
4482 internal hyperlinks.
4483
4484 If you wish to run this program and follow the hyperlinks you should
4485 create the following directory structure:
4486
4487 C:\ -- Temp --+-- Europe
4488 |
4489 \-- Asia
4490
4491 See also hyperlink1.pl for web URL examples.
4492
4493 #!/usr/bin/perl -w
4494
4495 ###############################################################################
4496 #
4497 # Example of how to use the WriteExcel module to write internal and internal
4498 # hyperlinks.
4499 #
4500 # If you wish to run this program and follow the hyperlinks you should create
4501 # the following directory structure:
4502 #
4503 # C:\ -- Temp --+-- Europe
4504 # |
4505 # \-- Asia
4506 #
4507 #
4508 # See also hyperlink1.pl for web URL examples.
4509 #
4510 # reverse('(c)'), February 2002, John McNamara, jmcnamara@cpan.org
4511 #
4512
4513
4514 use strict;
4515 use Spreadsheet::WriteExcel;
4516
4517 # Create three workbooks:
4518 # C:\Temp\Europe\Ireland.xls
4519 # C:\Temp\Europe\Italy.xls
4520 # C:\Temp\Asia\China.xls
4521 #
4522 my $ireland = Spreadsheet::WriteExcel->new('C:\Temp\Europe\Ireland.xls');
4523 my $ire_links = $ireland->add_worksheet('Links');
4524 my $ire_sales = $ireland->add_worksheet('Sales');
4525 my $ire_data = $ireland->add_worksheet('Product Data');
4526
4527 my $italy = Spreadsheet::WriteExcel->new('C:\Temp\Europe\Italy.xls');
4528 my $ita_links = $italy->add_worksheet('Links');
4529 my $ita_sales = $italy->add_worksheet('Sales');
4530 my $ita_data = $italy->add_worksheet('Product Data');
4531
4532 my $china = Spreadsheet::WriteExcel->new('C:\Temp\Asia\China.xls');
4533 my $cha_links = $china->add_worksheet('Links');
4534 my $cha_sales = $china->add_worksheet('Sales');
4535 my $cha_data = $china->add_worksheet('Product Data');
4536
4537 # Add a format
4538 my $format = $ireland->add_format(color => 'green', bold => 1);
4539 $ire_links->set_column('A:B', 25);
4540
4541
4542 ###############################################################################
4543 #
4544 # Examples of internal links
4545 #
4546 $ire_links->write('A1', 'Internal links', $format);
4547
4548 # Internal link
4549 $ire_links->write('A2', 'internal:Sales!A2');
4550
4551 # Internal link to a range
4552 $ire_links->write('A3', 'internal:Sales!A3:D3');
4553
4554 # Internal link with an alternative string
4555 $ire_links->write('A4', 'internal:Sales!A4', 'Link');
4556
4557 # Internal link with a format
4558 $ire_links->write('A5', 'internal:Sales!A5', $format);
4559
4560 # Internal link with an alternative string and format
4561 $ire_links->write('A6', 'internal:Sales!A6', 'Link', $format);
4562
4563 # Internal link (spaces in worksheet name)
4564 $ire_links->write('A7', q{internal:'Product Data'!A7});
4565
4566
4567 ###############################################################################
4568 #
4569 # Examples of external links
4570 #
4571 $ire_links->write('B1', 'External links', $format);
4572
4573 # External link to a local file
4574 $ire_links->write('B2', 'external:Italy.xls');
4575
4576 # External link to a local file with worksheet
4577 $ire_links->write('B3', 'external:Italy.xls#Sales!B3');
4578
4579 # External link to a local file with worksheet and alternative string
4580 $ire_links->write('B4', 'external:Italy.xls#Sales!B4', 'Link');
4581
4582 # External link to a local file with worksheet and format
4583 $ire_links->write('B5', 'external:Italy.xls#Sales!B5', $format);
4584
4585 # External link to a remote file, absolute path
4586 $ire_links->write('B6', 'external:c:/Temp/Asia/China.xls');
4587
4588 # External link to a remote file, relative path
4589 $ire_links->write('B7', 'external:../Asia/China.xls');
4590
4591 # External link to a remote file with worksheet
4592 $ire_links->write('B8', 'external:c:/Temp/Asia/China.xls#Sales!B8');
4593
4594 # External link to a remote file with worksheet (with spaces in the name)
4595 $ire_links->write('B9', q{external:c:/Temp/Asia/China.xls#'Product Data'!B9});
4596
4597
4598 ###############################################################################
4599 #
4600 # Some utility links to return to the main sheet
4601 #
4602 $ire_sales->write('A2', 'internal:Links!A2', 'Back');
4603 $ire_sales->write('A3', 'internal:Links!A3', 'Back');
4604 $ire_sales->write('A4', 'internal:Links!A4', 'Back');
4605 $ire_sales->write('A5', 'internal:Links!A5', 'Back');
4606 $ire_sales->write('A6', 'internal:Links!A6', 'Back');
4607 $ire_data-> write('A7', 'internal:Links!A7', 'Back');
4608
4609 $ita_links->write('A1', 'external:Ireland.xls#Links!B2', 'Back');
4610 $ita_sales->write('B3', 'external:Ireland.xls#Links!B3', 'Back');
4611 $ita_sales->write('B4', 'external:Ireland.xls#Links!B4', 'Back');
4612 $ita_sales->write('B5', 'external:Ireland.xls#Links!B5', 'Back');
4613 $cha_links->write('A1', 'external:../Europe/Ireland.xls#Links!B6', 'Back');
4614 $cha_sales->write('B8', 'external:../Europe/Ireland.xls#Links!B8', 'Back');
4615 $cha_data-> write('B9', 'external:../Europe/Ireland.xls#Links!B9', 'Back');
4616
4617 Download this example:
4618 <http://cpansearch.perl.org/src/JMCNAMARA/Spreadsheet-WriteExcel-2.40/examples/hyperlink2.pl>
4619
4620 Example: images.pl
4621 Example of how to insert images into an Excel worksheet using the
4622 Spreadsheet::WriteExcel insert_image() method.
4623
4624 Source code for this example:
4625
4626 #!/usr/bin/perl -w
4627
4628 #######################################################################
4629 #
4630 # Example of how to insert images into an Excel worksheet using the
4631 # Spreadsheet::WriteExcel insert_image() method.
4632 #
4633 # reverse('(c)'), October 2001, John McNamara, jmcnamara@cpan.org
4634 #
4635
4636 use strict;
4637 use Spreadsheet::WriteExcel;
4638
4639 # Create a new workbook called simple.xls and add a worksheet
4640 my $workbook = Spreadsheet::WriteExcel->new("images.xls");
4641 my $worksheet1 = $workbook->add_worksheet('Image 1');
4642 my $worksheet2 = $workbook->add_worksheet('Image 2');
4643 my $worksheet3 = $workbook->add_worksheet('Image 3');
4644 my $worksheet4 = $workbook->add_worksheet('Image 4');
4645
4646 # Insert a basic image
4647 $worksheet1->write('A10', "Image inserted into worksheet.");
4648 $worksheet1->insert_image('A1', 'republic.png');
4649
4650
4651 # Insert an image with an offset
4652 $worksheet2->write('A10', "Image inserted with an offset.");
4653 $worksheet2->insert_image('A1', 'republic.png', 32, 10);
4654
4655 # Insert a scaled image
4656 $worksheet3->write('A10', "Image scaled: width x 2, height x 0.8.");
4657 $worksheet3->insert_image('A1', 'republic.png', 0, 0, 2, 0.8);
4658
4659 # Insert an image over varied column and row sizes.
4660 $worksheet4->set_column('A:A', 5);
4661 $worksheet4->set_column('B:B', undef, undef, 1); # Hidden
4662 $worksheet4->set_column('C:D', 10);
4663 $worksheet4->set_row(0, 30);
4664 $worksheet4->set_row(3, 5);
4665
4666 $worksheet4->write('A10', "Image inserted over scaled rows and columns.");
4667 $worksheet4->insert_image('A1', 'republic.png');
4668
4669 Download this example:
4670 <http://cpansearch.perl.org/src/JMCNAMARA/Spreadsheet-WriteExcel-2.40/examples/images.pl>
4671
4672 Example: indent.pl
4673 A simple formatting example using Spreadsheet::WriteExcel.
4674
4675 This program demonstrates the indentation cell format.
4676
4677 Source code for this example:
4678
4679 #!/usr/bin/perl -w
4680
4681 ##############################################################################
4682 #
4683 # A simple formatting example using Spreadsheet::WriteExcel.
4684 #
4685 # This program demonstrates the indentation cell format.
4686 #
4687 # reverse('(c)'), May 2004, John McNamara, jmcnamara@cpan.org
4688 #
4689
4690
4691 use strict;
4692 use Spreadsheet::WriteExcel;
4693
4694 my $workbook = Spreadsheet::WriteExcel->new('indent.xls');
4695
4696 my $worksheet = $workbook->add_worksheet();
4697 my $indent1 = $workbook->add_format(indent => 1);
4698 my $indent2 = $workbook->add_format(indent => 2);
4699
4700 $worksheet->set_column('A:A', 40);
4701
4702
4703 $worksheet->write('A1', "This text is indented 1 level", $indent1);
4704 $worksheet->write('A2', "This text is indented 2 levels", $indent2);
4705
4706
4707 __END__
4708
4709 Download this example:
4710 <http://cpansearch.perl.org/src/JMCNAMARA/Spreadsheet-WriteExcel-2.40/examples/indent.pl>
4711
4712 Example: merge1.pl
4713 Simple example of merging cells using the Spreadsheet::WriteExcel
4714 module.
4715
4716 This example merges three cells using the "Centre Across Selection"
4717 alignment which was the Excel 5 method of achieving a merge. For a more
4718 modern approach use the merge_range() worksheet method instead. See
4719 the merge3.pl - merge6.pl programs.
4720
4721 Source code for this example:
4722
4723 #!/usr/bin/perl -w
4724
4725 ###############################################################################
4726 #
4727 # Simple example of merging cells using the Spreadsheet::WriteExcel module.
4728 #
4729 # This example merges three cells using the "Centre Across Selection"
4730 # alignment which was the Excel 5 method of achieving a merge. For a more
4731 # modern approach use the merge_range() worksheet method instead.
4732 # See the merge3.pl - merge6.pl programs.
4733 #
4734 # reverse('(c)'), August 2002, John McNamara, jmcnamara@cpan.org
4735 #
4736
4737 use strict;
4738 use Spreadsheet::WriteExcel;
4739
4740 # Create a new workbook and add a worksheet
4741 my $workbook = Spreadsheet::WriteExcel->new("merge1.xls");
4742 my $worksheet = $workbook->add_worksheet();
4743
4744
4745 # Increase the cell size of the merged cells to highlight the formatting.
4746 $worksheet->set_column('B:D', 20);
4747 $worksheet->set_row(2, 30);
4748
4749
4750 # Create a merge format
4751 my $format = $workbook->add_format(center_across => 1);
4752
4753
4754 # Only one cell should contain text, the others should be blank.
4755 $worksheet->write (2, 1, "Center across selection", $format);
4756 $worksheet->write_blank(2, 2, $format);
4757 $worksheet->write_blank(2, 3, $format);
4758
4759 Download this example:
4760 <http://cpansearch.perl.org/src/JMCNAMARA/Spreadsheet-WriteExcel-2.40/examples/merge1.pl>
4761
4762 Example: merge2.pl
4763 Simple example of merging cells using the Spreadsheet::WriteExcel
4764 module
4765
4766 This example merges three cells using the "Centre Across Selection"
4767 alignment which was the Excel 5 method of achieving a merge. For a more
4768 modern approach use the merge_range() worksheet method instead. See
4769 the merge3.pl - merge6.pl programs.
4770
4771 Source code for this example:
4772
4773 #!/usr/bin/perl -w
4774
4775 ###############################################################################
4776 #
4777 # Simple example of merging cells using the Spreadsheet::WriteExcel module
4778 #
4779 # This example merges three cells using the "Centre Across Selection"
4780 # alignment which was the Excel 5 method of achieving a merge. For a more
4781 # modern approach use the merge_range() worksheet method instead.
4782 # See the merge3.pl - merge6.pl programs.
4783 #
4784 # reverse('(c)'), August 2002, John McNamara, jmcnamara@cpan.org
4785 #
4786
4787 use strict;
4788 use Spreadsheet::WriteExcel;
4789
4790 # Create a new workbook and add a worksheet
4791 my $workbook = Spreadsheet::WriteExcel->new("merge2.xls");
4792 my $worksheet = $workbook->add_worksheet();
4793
4794
4795 # Increase the cell size of the merged cells to highlight the formatting.
4796 $worksheet->set_column(1, 2, 30);
4797 $worksheet->set_row(2, 40);
4798
4799
4800 # Create a merged format
4801 my $format = $workbook->add_format(
4802 center_across => 1,
4803 bold => 1,
4804 size => 15,
4805 pattern => 1,
4806 border => 6,
4807 color => 'white',
4808 fg_color => 'green',
4809 border_color => 'yellow',
4810 align => 'vcenter',
4811 );
4812
4813
4814 # Only one cell should contain text, the others should be blank.
4815 $worksheet->write (2, 1, "Center across selection", $format);
4816 $worksheet->write_blank(2, 2, $format);
4817
4818 Download this example:
4819 <http://cpansearch.perl.org/src/JMCNAMARA/Spreadsheet-WriteExcel-2.40/examples/merge2.pl>
4820
4821 Example: merge3.pl
4822 Example of how to use Spreadsheet::WriteExcel to write a hyperlink in a
4823 merged cell. There are two options write_url_range() with a standard
4824 merge format or merge_range().
4825
4826 Source code for this example:
4827
4828 #!/usr/bin/perl -w
4829
4830 ###############################################################################
4831 #
4832 # Example of how to use Spreadsheet::WriteExcel to write a hyperlink in a
4833 # merged cell. There are two options write_url_range() with a standard merge
4834 # format or merge_range().
4835 #
4836 # reverse('(c)'), September 2002, John McNamara, jmcnamara@cpan.org
4837 #
4838
4839 use strict;
4840 use Spreadsheet::WriteExcel;
4841
4842 # Create a new workbook and add a worksheet
4843 my $workbook = Spreadsheet::WriteExcel->new('merge3.xls');
4844 my $worksheet = $workbook->add_worksheet();
4845
4846
4847 # Increase the cell size of the merged cells to highlight the formatting.
4848 $worksheet->set_row($_, 30) for (1, 3, 6, 7);
4849 $worksheet->set_column('B:D', 20);
4850
4851
4852 ###############################################################################
4853 #
4854 # Example 1: Merge cells containing a hyperlink using write_url_range()
4855 # and the standard Excel 5+ merge property.
4856 #
4857 my $format1 = $workbook->add_format(
4858 center_across => 1,
4859 border => 1,
4860 underline => 1,
4861 color => 'blue',
4862 );
4863
4864 # Write the cells to be merged
4865 $worksheet->write_url_range('B2:D2', 'http://www.perl.com', $format1);
4866 $worksheet->write_blank('C2', $format1);
4867 $worksheet->write_blank('D2', $format1);
4868
4869
4870
4871 ###############################################################################
4872 #
4873 # Example 2: Merge cells containing a hyperlink using merge_range().
4874 #
4875 my $format2 = $workbook->add_format(
4876 border => 1,
4877 underline => 1,
4878 color => 'blue',
4879 align => 'center',
4880 valign => 'vcenter',
4881 );
4882
4883 # Merge 3 cells
4884 $worksheet->merge_range('B4:D4', 'http://www.perl.com', $format2);
4885
4886
4887 # Merge 3 cells over two rows
4888 $worksheet->merge_range('B7:D8', 'http://www.perl.com', $format2);
4889
4890 Download this example:
4891 <http://cpansearch.perl.org/src/JMCNAMARA/Spreadsheet-WriteExcel-2.40/examples/merge3.pl>
4892
4893 Example: merge4.pl
4894 Example of how to use the Spreadsheet::WriteExcel merge_range()
4895 workbook method with complex formatting.
4896
4897 Source code for this example:
4898
4899 #!/usr/bin/perl -w
4900
4901 ###############################################################################
4902 #
4903 # Example of how to use the Spreadsheet::WriteExcel merge_range() workbook
4904 # method with complex formatting.
4905 #
4906 # reverse('(c)'), September 2002, John McNamara, jmcnamara@cpan.org
4907 #
4908
4909 use strict;
4910 use Spreadsheet::WriteExcel;
4911
4912 # Create a new workbook and add a worksheet
4913 my $workbook = Spreadsheet::WriteExcel->new('merge4.xls');
4914 my $worksheet = $workbook->add_worksheet();
4915
4916
4917 # Increase the cell size of the merged cells to highlight the formatting.
4918 $worksheet->set_row($_, 30) for (1..11);
4919 $worksheet->set_column('B:D', 20);
4920
4921
4922 ###############################################################################
4923 #
4924 # Example 1: Text centered vertically and horizontally
4925 #
4926 my $format1 = $workbook->add_format(
4927 border => 6,
4928 bold => 1,
4929 color => 'red',
4930 valign => 'vcenter',
4931 align => 'center',
4932 );
4933
4934
4935
4936 $worksheet->merge_range('B2:D3', 'Vertical and horizontal', $format1);
4937
4938
4939 ###############################################################################
4940 #
4941 # Example 2: Text aligned to the top and left
4942 #
4943 my $format2 = $workbook->add_format(
4944 border => 6,
4945 bold => 1,
4946 color => 'red',
4947 valign => 'top',
4948 align => 'left',
4949 );
4950
4951
4952
4953 $worksheet->merge_range('B5:D6', 'Aligned to the top and left', $format2);
4954
4955
4956 ###############################################################################
4957 #
4958 # Example 3: Text aligned to the bottom and right
4959 #
4960 my $format3 = $workbook->add_format(
4961 border => 6,
4962 bold => 1,
4963 color => 'red',
4964 valign => 'bottom',
4965 align => 'right',
4966 );
4967
4968
4969
4970 $worksheet->merge_range('B8:D9', 'Aligned to the bottom and right', $format3);
4971
4972
4973 ###############################################################################
4974 #
4975 # Example 4: Text justified (i.e. wrapped) in the cell
4976 #
4977 my $format4 = $workbook->add_format(
4978 border => 6,
4979 bold => 1,
4980 color => 'red',
4981 valign => 'top',
4982 align => 'justify',
4983 );
4984
4985
4986
4987 $worksheet->merge_range('B11:D12', 'Justified: '.'so on and ' x18, $format4);
4988
4989 Download this example:
4990 <http://cpansearch.perl.org/src/JMCNAMARA/Spreadsheet-WriteExcel-2.40/examples/merge4.pl>
4991
4992 Example: merge5.pl
4993 Example of how to use the Spreadsheet::WriteExcel merge_cells()
4994 workbook method with complex formatting and rotation.
4995
4996 Source code for this example:
4997
4998 #!/usr/bin/perl -w
4999
5000 ###############################################################################
5001 #
5002 # Example of how to use the Spreadsheet::WriteExcel merge_cells() workbook
5003 # method with complex formatting and rotation.
5004 #
5005 #
5006 # reverse('(c)'), September 2002, John McNamara, jmcnamara@cpan.org
5007 #
5008
5009 use strict;
5010 use Spreadsheet::WriteExcel;
5011
5012 # Create a new workbook and add a worksheet
5013 my $workbook = Spreadsheet::WriteExcel->new('merge5.xls');
5014 my $worksheet = $workbook->add_worksheet();
5015
5016
5017 # Increase the cell size of the merged cells to highlight the formatting.
5018 $worksheet->set_row($_, 36) for (3..8);
5019 $worksheet->set_column($_, $_ , 15) for (1,3,5);
5020
5021
5022 ###############################################################################
5023 #
5024 # Rotation 1, letters run from top to bottom
5025 #
5026 my $format1 = $workbook->add_format(
5027 border => 6,
5028 bold => 1,
5029 color => 'red',
5030 valign => 'vcentre',
5031 align => 'centre',
5032 rotation => 270,
5033 );
5034
5035
5036 $worksheet->merge_range('B4:B9', 'Rotation 270', $format1);
5037
5038
5039 ###############################################################################
5040 #
5041 # Rotation 2, 90 deg anticlockwise
5042 #
5043 my $format2 = $workbook->add_format(
5044 border => 6,
5045 bold => 1,
5046 color => 'red',
5047 valign => 'vcentre',
5048 align => 'centre',
5049 rotation => 90,
5050 );
5051
5052
5053 $worksheet->merge_range('D4:D9', 'Rotation 90 deg', $format2);
5054
5055
5056
5057 ###############################################################################
5058 #
5059 # Rotation 3, 90 deg clockwise
5060 #
5061 my $format3 = $workbook->add_format(
5062 border => 6,
5063 bold => 1,
5064 color => 'red',
5065 valign => 'vcentre',
5066 align => 'centre',
5067 rotation => -90,
5068 );
5069
5070
5071 $worksheet->merge_range('F4:F9', 'Rotation -90 deg', $format3);
5072
5073 Download this example:
5074 <http://cpansearch.perl.org/src/JMCNAMARA/Spreadsheet-WriteExcel-2.40/examples/merge5.pl>
5075
5076 Example: merge6.pl
5077 Example of how to use the Spreadsheet::WriteExcel merge_cells()
5078 workbook method with Unicode strings.
5079
5080 Source code for this example:
5081
5082 #!/usr/bin/perl -w
5083
5084 ###############################################################################
5085 #
5086 # Example of how to use the Spreadsheet::WriteExcel merge_cells() workbook
5087 # method with Unicode strings.
5088 #
5089 #
5090 # reverse('(c)'), December 2005, John McNamara, jmcnamara@cpan.org
5091 #
5092
5093 use strict;
5094 use Spreadsheet::WriteExcel;
5095
5096 # Create a new workbook and add a worksheet
5097 my $workbook = Spreadsheet::WriteExcel->new('merge6.xls');
5098 my $worksheet = $workbook->add_worksheet();
5099
5100
5101 # Increase the cell size of the merged cells to highlight the formatting.
5102 $worksheet->set_row($_, 36) for 2..9;
5103 $worksheet->set_column('B:D', 25);
5104
5105
5106 # Format for the merged cells.
5107 my $format = $workbook->add_format(
5108 border => 6,
5109 bold => 1,
5110 color => 'red',
5111 size => 20,
5112 valign => 'vcentre',
5113 align => 'left',
5114 indent => 1,
5115 );
5116
5117
5118
5119
5120 ###############################################################################
5121 #
5122 # Write an Ascii string.
5123 #
5124
5125 $worksheet->merge_range('B3:D4', 'ASCII: A simple string', $format);
5126
5127
5128
5129
5130 ###############################################################################
5131 #
5132 # Write a UTF-16 Unicode string.
5133 #
5134
5135 # A phrase in Cyrillic encoded as UTF-16BE.
5136 my $utf16_str = pack "H*", '005500540046002d00310036003a0020'.
5137 '042d0442043e002004440440043004370430002004'.
5138 '3d043000200440044304410441043a043e043c0021';
5139
5140 # Note the extra parameter at the end to indicate UTF-16 encoding.
5141 $worksheet->merge_range('B6:D7', $utf16_str, $format, 1);
5142
5143
5144
5145
5146 ###############################################################################
5147 #
5148 # Write a UTF-8 Unicode string.
5149 #
5150
5151 if ($] >= 5.008) {
5152 my $smiley = chr 0x263a;
5153 $worksheet->merge_range('B9:D10', "UTF-8: A Unicode smiley $smiley",
5154 $format);
5155 }
5156 else {
5157 $worksheet->merge_range('B9:D10', "UTF-8: Requires Perl 5.8", $format);
5158 }
5159
5160
5161
5162
5163 __END__
5164
5165 Download this example:
5166 <http://cpansearch.perl.org/src/JMCNAMARA/Spreadsheet-WriteExcel-2.40/examples/merge6.pl>
5167
5168 Example: mod_perl1.pl
5169 Example of how to use the Spreadsheet::WriteExcel module to send an
5170 Excel file to a browser using mod_perl 1 and Apache
5171
5172 This module ties *XLS directly to Apache, and with the correct
5173 content-disposition/types it will prompt the user to save the file, or
5174 open it at this location.
5175
5176 This script is a modification of the Spreadsheet::WriteExcel cgi.pl
5177 example.
5178
5179 Change the name of this file to Cgi.pm. Change the package location to
5180 where ever you locate this package. In the example below it is located
5181 in the WriteExcel directory.
5182
5183 Your httpd.conf entry for this module, should you choose to use it as a
5184 stand alone app, should look similar to the following:
5185
5186 <Location /spreadsheet-test>
5187 SetHandler perl-script
5188 PerlHandler Spreadsheet::WriteExcel::Cgi
5189 PerlSendHeader On
5190 </Location>
5191
5192 The PerlHandler name above and the package name below *have* to match.
5193
5194 ###############################################################################
5195 #
5196 # Example of how to use the Spreadsheet::WriteExcel module to send an Excel
5197 # file to a browser using mod_perl 1 and Apache
5198 #
5199 # This module ties *XLS directly to Apache, and with the correct
5200 # content-disposition/types it will prompt the user to save
5201 # the file, or open it at this location.
5202 #
5203 # This script is a modification of the Spreadsheet::WriteExcel cgi.pl example.
5204 #
5205 # Change the name of this file to Cgi.pm.
5206 # Change the package location to where ever you locate this package.
5207 # In the example below it is located in the WriteExcel directory.
5208 #
5209 # Your httpd.conf entry for this module, should you choose to use it
5210 # as a stand alone app, should look similar to the following:
5211 #
5212 # <Location /spreadsheet-test>
5213 # SetHandler perl-script
5214 # PerlHandler Spreadsheet::WriteExcel::Cgi
5215 # PerlSendHeader On
5216 # </Location>
5217 #
5218 # The PerlHandler name above and the package name below *have* to match.
5219
5220 # Apr 2001, Thomas Sullivan, webmaster@860.org
5221 # Feb 2001, John McNamara, jmcnamara@cpan.org
5222
5223 package Spreadsheet::WriteExcel::Cgi;
5224
5225 ##########################################
5226 # Pragma Definitions
5227 ##########################################
5228 use strict;
5229
5230 ##########################################
5231 # Required Modules
5232 ##########################################
5233 use Apache::Constants qw(:common);
5234 use Apache::Request;
5235 use Apache::URI; # This may not be needed
5236 use Spreadsheet::WriteExcel;
5237
5238 ##########################################
5239 # Main App Body
5240 ##########################################
5241 sub handler {
5242 # New apache object
5243 # Should you decide to use it.
5244 my $r = Apache::Request->new(shift);
5245
5246 # Set the filename and send the content type
5247 # This will appear when they save the spreadsheet
5248 my $filename ="cgitest.xls";
5249
5250 ####################################################
5251 ## Send the content type headers
5252 ####################################################
5253 print "Content-disposition: attachment;filename=$filename\n";
5254 print "Content-type: application/vnd.ms-excel\n\n";
5255
5256 ####################################################
5257 # Tie a filehandle to Apache's STDOUT.
5258 # Create a new workbook and add a worksheet.
5259 ####################################################
5260 tie *XLS => 'Apache';
5261 binmode(*XLS);
5262
5263 my $workbook = Spreadsheet::WriteExcel->new(\*XLS);
5264 my $worksheet = $workbook->add_worksheet();
5265
5266
5267 # Set the column width for column 1
5268 $worksheet->set_column(0, 0, 20);
5269
5270
5271 # Create a format
5272 my $format = $workbook->add_format();
5273 $format->set_bold();
5274 $format->set_size(15);
5275 $format->set_color('blue');
5276
5277
5278 # Write to the workbook
5279 $worksheet->write(0, 0, "Hi Excel!", $format);
5280
5281 # You must close the workbook for Content-disposition
5282 $workbook->close();
5283 }
5284
5285 1;
5286
5287 Download this example:
5288 <http://cpansearch.perl.org/src/JMCNAMARA/Spreadsheet-WriteExcel-2.40/examples/mod_perl1.pl>
5289
5290 Example: mod_perl2.pl
5291 Example of how to use the Spreadsheet::WriteExcel module to send an
5292 Excel file to a browser using mod_perl 2 and Apache.
5293
5294 This module ties *XLS directly to Apache, and with the correct
5295 content-disposition/types it will prompt the user to save the file, or
5296 open it at this location.
5297
5298 This script is a modification of the Spreadsheet::WriteExcel cgi.pl
5299 example.
5300
5301 Change the name of this file to MP2Test.pm. Change the package
5302 location to where ever you locate this package. In the example below
5303 it is located in the WriteExcel directory.
5304
5305 Your httpd.conf entry for this module, should you choose to use it as a
5306 stand alone app, should look similar to the following:
5307
5308 PerlModule Apache2::RequestRec
5309 PerlModule APR::Table
5310 PerlModule Apache2::RequestIO
5311
5312 <Location /spreadsheet-test>
5313 SetHandler perl-script
5314 PerlResponseHandler Spreadsheet::WriteExcel::MP2Test
5315 </Location>
5316
5317 The PerlResponseHandler must match the package name below.
5318
5319 ###############################################################################
5320 #
5321 # Example of how to use the Spreadsheet::WriteExcel module to send an Excel
5322 # file to a browser using mod_perl 2 and Apache.
5323 #
5324 # This module ties *XLS directly to Apache, and with the correct
5325 # content-disposition/types it will prompt the user to save
5326 # the file, or open it at this location.
5327 #
5328 # This script is a modification of the Spreadsheet::WriteExcel cgi.pl example.
5329 #
5330 # Change the name of this file to MP2Test.pm.
5331 # Change the package location to where ever you locate this package.
5332 # In the example below it is located in the WriteExcel directory.
5333 #
5334 # Your httpd.conf entry for this module, should you choose to use it
5335 # as a stand alone app, should look similar to the following:
5336 #
5337 # PerlModule Apache2::RequestRec
5338 # PerlModule APR::Table
5339 # PerlModule Apache2::RequestIO
5340 #
5341 # <Location /spreadsheet-test>
5342 # SetHandler perl-script
5343 # PerlResponseHandler Spreadsheet::WriteExcel::MP2Test
5344 # </Location>
5345 #
5346 # The PerlResponseHandler must match the package name below.
5347
5348 # Jun 2004, Matisse Enzer, matisse@matisse.net (mod_perl 2 version)
5349 # Apr 2001, Thomas Sullivan, webmaster@860.org
5350 # Feb 2001, John McNamara, jmcnamara@cpan.org
5351
5352 package Spreadsheet::WriteExcel::MP2Test;
5353
5354 ##########################################
5355 # Pragma Definitions
5356 ##########################################
5357 use strict;
5358
5359 ##########################################
5360 # Required Modules
5361 ##########################################
5362 use Apache2::Const -compile => qw( :common );
5363 use Spreadsheet::WriteExcel;
5364
5365 ##########################################
5366 # Main App Body
5367 ##########################################
5368 sub handler {
5369 my($r) = @_; # Apache request object is passed to handler in mod_perl 2
5370
5371 # Set the filename and send the content type
5372 # This will appear when they save the spreadsheet
5373 my $filename ="mod_perl2_test.xls";
5374
5375 ####################################################
5376 ## Send the content type headers the mod_perl 2 way
5377 ####################################################
5378 $r->headers_out->{'Content-Disposition'} = "attachment;filename=$filename";
5379 $r->content_type('application/vnd.ms-excel');
5380
5381 ####################################################
5382 # Tie a filehandle to Apache's STDOUT.
5383 # Create a new workbook and add a worksheet.
5384 ####################################################
5385 tie *XLS => $r; # The mod_perl 2 way. Tie to the Apache::RequestRec object
5386 binmode(*XLS);
5387
5388 my $workbook = Spreadsheet::WriteExcel->new(\*XLS);
5389 my $worksheet = $workbook->add_worksheet();
5390
5391
5392 # Set the column width for column 1
5393 $worksheet->set_column(0, 0, 20);
5394
5395
5396 # Create a format
5397 my $format = $workbook->add_format();
5398 $format->set_bold();
5399 $format->set_size(15);
5400 $format->set_color('blue');
5401
5402
5403 # Write to the workbook
5404 $worksheet->write(0, 0, 'Hi Excel! from ' . $r->hostname , $format);
5405
5406 # You must close the workbook for Content-disposition
5407 $workbook->close();
5408 return Apache2::Const::OK;
5409 }
5410
5411 1;
5412
5413 Download this example:
5414 <http://cpansearch.perl.org/src/JMCNAMARA/Spreadsheet-WriteExcel-2.40/examples/mod_perl2.pl>
5415
5416 Example: outline.pl
5417 Example of how use Spreadsheet::WriteExcel to generate Excel outlines
5418 and grouping.
5419
5420 Excel allows you to group rows or columns so that they can be hidden or
5421 displayed with a single mouse click. This feature is referred to as
5422 outlines.
5423
5424 Outlines can reduce complex data down to a few salient sub-totals or
5425 summaries.
5426
5427 This feature is best viewed in Excel but the following is an ASCII
5428 representation of what a worksheet with three outlines might look like.
5429 Rows 3-4 and rows 7-8 are grouped at level 2. Rows 2-9 are grouped at
5430 level 1. The lines at the left hand side are called outline level bars.
5431
5432 ------------------------------------------
5433 1 2 3 | | A | B | C | D | ...
5434 ------------------------------------------
5435 _ | 1 | A | | | | ...
5436 | _ | 2 | B | | | | ...
5437 | | | 3 | (C) | | | | ...
5438 | | | 4 | (D) | | | | ...
5439 | - | 5 | E | | | | ...
5440 | _ | 6 | F | | | | ...
5441 | | | 7 | (G) | | | | ...
5442 | | | 8 | (H) | | | | ...
5443 | - | 9 | I | | | | ...
5444 - | . | ... | ... | ... | ... | ...
5445
5446 Clicking the minus sign on each of the level 2 outlines will collapse
5447 and hide the data as shown in the next figure. The minus sign changes
5448 to a plus sign to indicate that the data in the outline is hidden.
5449
5450 ------------------------------------------
5451 1 2 3 | | A | B | C | D | ...
5452 ------------------------------------------
5453 _ | 1 | A | | | | ...
5454 | | 2 | B | | | | ...
5455 | + | 5 | E | | | | ...
5456 | | 6 | F | | | | ...
5457 | + | 9 | I | | | | ...
5458 - | . | ... | ... | ... | ... | ...
5459
5460 Clicking on the minus sign on the level 1 outline will collapse the
5461 remaining rows as follows:
5462
5463 ------------------------------------------
5464 1 2 3 | | A | B | C | D | ...
5465 ------------------------------------------
5466 | 1 | A | | | | ...
5467 + | . | ... | ... | ... | ... | ...
5468
5469 See the main Spreadsheet::WriteExcel documentation for more
5470 information.
5471
5472 Source code for this example:
5473
5474 #!/usr/bin/perl -w
5475
5476 ###############################################################################
5477 #
5478 # Example of how use Spreadsheet::WriteExcel to generate Excel outlines and
5479 # grouping.
5480 #
5481 #
5482 # Excel allows you to group rows or columns so that they can be hidden or
5483 # displayed with a single mouse click. This feature is referred to as outlines.
5484 #
5485 # Outlines can reduce complex data down to a few salient sub-totals or
5486 # summaries.
5487 #
5488 # This feature is best viewed in Excel but the following is an ASCII
5489 # representation of what a worksheet with three outlines might look like.
5490 # Rows 3-4 and rows 7-8 are grouped at level 2. Rows 2-9 are grouped at
5491 # level 1. The lines at the left hand side are called outline level bars.
5492 #
5493 #
5494 # ------------------------------------------
5495 # 1 2 3 | | A | B | C | D | ...
5496 # ------------------------------------------
5497 # _ | 1 | A | | | | ...
5498 # | _ | 2 | B | | | | ...
5499 # | | | 3 | (C) | | | | ...
5500 # | | | 4 | (D) | | | | ...
5501 # | - | 5 | E | | | | ...
5502 # | _ | 6 | F | | | | ...
5503 # | | | 7 | (G) | | | | ...
5504 # | | | 8 | (H) | | | | ...
5505 # | - | 9 | I | | | | ...
5506 # - | . | ... | ... | ... | ... | ...
5507 #
5508 #
5509 # Clicking the minus sign on each of the level 2 outlines will collapse and
5510 # hide the data as shown in the next figure. The minus sign changes to a plus
5511 # sign to indicate that the data in the outline is hidden.
5512 #
5513 # ------------------------------------------
5514 # 1 2 3 | | A | B | C | D | ...
5515 # ------------------------------------------
5516 # _ | 1 | A | | | | ...
5517 # | | 2 | B | | | | ...
5518 # | + | 5 | E | | | | ...
5519 # | | 6 | F | | | | ...
5520 # | + | 9 | I | | | | ...
5521 # - | . | ... | ... | ... | ... | ...
5522 #
5523 #
5524 # Clicking on the minus sign on the level 1 outline will collapse the remaining
5525 # rows as follows:
5526 #
5527 # ------------------------------------------
5528 # 1 2 3 | | A | B | C | D | ...
5529 # ------------------------------------------
5530 # | 1 | A | | | | ...
5531 # + | . | ... | ... | ... | ... | ...
5532 #
5533 # See the main Spreadsheet::WriteExcel documentation for more information.
5534 #
5535 # reverse('(c)'), April 2003, John McNamara, jmcnamara@cpan.org
5536 #
5537
5538
5539
5540 use strict;
5541 use Spreadsheet::WriteExcel;
5542
5543 # Create a new workbook and add some worksheets
5544 my $workbook = Spreadsheet::WriteExcel->new('outline.xls');
5545 my $worksheet1 = $workbook->add_worksheet('Outlined Rows');
5546 my $worksheet2 = $workbook->add_worksheet('Collapsed Rows');
5547 my $worksheet3 = $workbook->add_worksheet('Outline Columns');
5548 my $worksheet4 = $workbook->add_worksheet('Outline levels');
5549
5550 # Add a general format
5551 my $bold = $workbook->add_format(bold => 1);
5552
5553
5554
5555 ###############################################################################
5556 #
5557 # Example 1: Create a worksheet with outlined rows. It also includes SUBTOTAL()
5558 # functions so that it looks like the type of automatic outlines that are
5559 # generated when you use the Excel Data->SubTotals menu item.
5560 #
5561
5562
5563 # For outlines the important parameters are $hidden and $level. Rows with the
5564 # same $level are grouped together. The group will be collapsed if $hidden is
5565 # non-zero. $height and $XF are assigned default values if they are undef.
5566 #
5567 # The syntax is: set_row($row, $height, $XF, $hidden, $level, $collapsed)
5568 #
5569 $worksheet1->set_row(1, undef, undef, 0, 2);
5570 $worksheet1->set_row(2, undef, undef, 0, 2);
5571 $worksheet1->set_row(3, undef, undef, 0, 2);
5572 $worksheet1->set_row(4, undef, undef, 0, 2);
5573 $worksheet1->set_row(5, undef, undef, 0, 1);
5574
5575 $worksheet1->set_row(6, undef, undef, 0, 2);
5576 $worksheet1->set_row(7, undef, undef, 0, 2);
5577 $worksheet1->set_row(8, undef, undef, 0, 2);
5578 $worksheet1->set_row(9, undef, undef, 0, 2);
5579 $worksheet1->set_row(10, undef, undef, 0, 1);
5580
5581
5582 # Add a column format for clarity
5583 $worksheet1->set_column('A:A', 20);
5584
5585 # Add the data, labels and formulas
5586 $worksheet1->write('A1', 'Region', $bold);
5587 $worksheet1->write('A2', 'North');
5588 $worksheet1->write('A3', 'North');
5589 $worksheet1->write('A4', 'North');
5590 $worksheet1->write('A5', 'North');
5591 $worksheet1->write('A6', 'North Total', $bold);
5592
5593 $worksheet1->write('B1', 'Sales', $bold);
5594 $worksheet1->write('B2', 1000);
5595 $worksheet1->write('B3', 1200);
5596 $worksheet1->write('B4', 900);
5597 $worksheet1->write('B5', 1200);
5598 $worksheet1->write('B6', '=SUBTOTAL(9,B2:B5)', $bold);
5599
5600 $worksheet1->write('A7', 'South');
5601 $worksheet1->write('A8', 'South');
5602 $worksheet1->write('A9', 'South');
5603 $worksheet1->write('A10', 'South');
5604 $worksheet1->write('A11', 'South Total', $bold);
5605
5606 $worksheet1->write('B7', 400);
5607 $worksheet1->write('B8', 600);
5608 $worksheet1->write('B9', 500);
5609 $worksheet1->write('B10', 600);
5610 $worksheet1->write('B11', '=SUBTOTAL(9,B7:B10)', $bold);
5611
5612 $worksheet1->write('A12', 'Grand Total', $bold);
5613 $worksheet1->write('B12', '=SUBTOTAL(9,B2:B10)', $bold);
5614
5615
5616 ###############################################################################
5617 #
5618 # Example 2: Create a worksheet with outlined rows. This is the same as the
5619 # previous example except that the rows are collapsed.
5620 # Note: We need to indicate the row that contains the collapsed symbol '+'
5621 # with the optional parameter, $collapsed.
5622
5623 # The group will be collapsed if $hidden is non-zero.
5624 # The syntax is: set_row($row, $height, $XF, $hidden, $level, $collapsed)
5625 #
5626 $worksheet2->set_row(1, undef, undef, 1, 2);
5627 $worksheet2->set_row(2, undef, undef, 1, 2);
5628 $worksheet2->set_row(3, undef, undef, 1, 2);
5629 $worksheet2->set_row(4, undef, undef, 1, 2);
5630 $worksheet2->set_row(5, undef, undef, 1, 1);
5631
5632 $worksheet2->set_row(6, undef, undef, 1, 2);
5633 $worksheet2->set_row(7, undef, undef, 1, 2);
5634 $worksheet2->set_row(8, undef, undef, 1, 2);
5635 $worksheet2->set_row(9, undef, undef, 1, 2);
5636 $worksheet2->set_row(10, undef, undef, 1, 1);
5637 $worksheet2->set_row(11, undef, undef, 0, 0, 1);
5638
5639
5640 # Add a column format for clarity
5641 $worksheet2->set_column('A:A', 20);
5642
5643 # Add the data, labels and formulas
5644 $worksheet2->write('A1', 'Region', $bold);
5645 $worksheet2->write('A2', 'North');
5646 $worksheet2->write('A3', 'North');
5647 $worksheet2->write('A4', 'North');
5648 $worksheet2->write('A5', 'North');
5649 $worksheet2->write('A6', 'North Total', $bold);
5650
5651 $worksheet2->write('B1', 'Sales', $bold);
5652 $worksheet2->write('B2', 1000);
5653 $worksheet2->write('B3', 1200);
5654 $worksheet2->write('B4', 900);
5655 $worksheet2->write('B5', 1200);
5656 $worksheet2->write('B6', '=SUBTOTAL(9,B2:B5)', $bold);
5657
5658 $worksheet2->write('A7', 'South');
5659 $worksheet2->write('A8', 'South');
5660 $worksheet2->write('A9', 'South');
5661 $worksheet2->write('A10', 'South');
5662 $worksheet2->write('A11', 'South Total', $bold);
5663
5664 $worksheet2->write('B7', 400);
5665 $worksheet2->write('B8', 600);
5666 $worksheet2->write('B9', 500);
5667 $worksheet2->write('B10', 600);
5668 $worksheet2->write('B11', '=SUBTOTAL(9,B7:B10)', $bold);
5669
5670 $worksheet2->write('A12', 'Grand Total', $bold);
5671 $worksheet2->write('B12', '=SUBTOTAL(9,B2:B10)', $bold);
5672
5673
5674
5675 ###############################################################################
5676 #
5677 # Example 3: Create a worksheet with outlined columns.
5678 #
5679 my $data = [
5680 ['Month', 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',' Total'],
5681 ['North', 50, 20, 15, 25, 65, 80, ,'=SUM(B2:G2)'],
5682 ['South', 10, 20, 30, 50, 50, 50, ,'=SUM(B3:G3)'],
5683 ['East', 45, 75, 50, 15, 75, 100, ,'=SUM(B4:G4)'],
5684 ['West', 15, 15, 55, 35, 20, 50, ,'=SUM(B5:G6)'],
5685 ];
5686
5687 # Add bold format to the first row
5688 $worksheet3->set_row(0, undef, $bold);
5689
5690 # Syntax: set_column($col1, $col2, $width, $XF, $hidden, $level, $collapsed)
5691 $worksheet3->set_column('A:A', 10, $bold );
5692 $worksheet3->set_column('B:G', 5, undef, 0, 1);
5693 $worksheet3->set_column('H:H', 10);
5694
5695 # Write the data and a formula
5696 $worksheet3->write_col('A1', $data);
5697 $worksheet3->write('H6', '=SUM(H2:H5)', $bold);
5698
5699
5700
5701 ###############################################################################
5702 #
5703 # Example 4: Show all possible outline levels.
5704 #
5705 my $levels = ["Level 1", "Level 2", "Level 3", "Level 4",
5706 "Level 5", "Level 6", "Level 7", "Level 6",
5707 "Level 5", "Level 4", "Level 3", "Level 2", "Level 1"];
5708
5709
5710 $worksheet4->write_col('A1', $levels);
5711
5712 $worksheet4->set_row(0, undef, undef, undef, 1);
5713 $worksheet4->set_row(1, undef, undef, undef, 2);
5714 $worksheet4->set_row(2, undef, undef, undef, 3);
5715 $worksheet4->set_row(3, undef, undef, undef, 4);
5716 $worksheet4->set_row(4, undef, undef, undef, 5);
5717 $worksheet4->set_row(5, undef, undef, undef, 6);
5718 $worksheet4->set_row(6, undef, undef, undef, 7);
5719 $worksheet4->set_row(7, undef, undef, undef, 6);
5720 $worksheet4->set_row(8, undef, undef, undef, 5);
5721 $worksheet4->set_row(9, undef, undef, undef, 4);
5722 $worksheet4->set_row(10, undef, undef, undef, 3);
5723 $worksheet4->set_row(11, undef, undef, undef, 2);
5724 $worksheet4->set_row(12, undef, undef, undef, 1);
5725
5726
5727
5728 __END__
5729
5730 Download this example:
5731 <http://cpansearch.perl.org/src/JMCNAMARA/Spreadsheet-WriteExcel-2.40/examples/outline.pl>
5732
5733 Example: outline_collapsed.pl
5734 Example of how use Spreadsheet::WriteExcel to generate Excel outlines
5735 and grouping.
5736
5737 These example focus mainly on collapsed outlines. See also the
5738 outlines.pl example program for more general examples.
5739
5740 Source code for this example:
5741
5742 #!/usr/bin/perl -w
5743
5744 ###############################################################################
5745 #
5746 # Example of how use Spreadsheet::WriteExcel to generate Excel outlines and
5747 # grouping.
5748 #
5749 # These example focus mainly on collapsed outlines. See also the
5750 # outlines.pl example program for more general examples.
5751 #
5752 # reverse('(c)'), March 2008, John McNamara, jmcnamara@cpan.org
5753 #
5754
5755 use strict;
5756 use Spreadsheet::WriteExcel;
5757
5758 # Create a new workbook and add some worksheets
5759 my $workbook = Spreadsheet::WriteExcel->new('outline_collapsed.xls');
5760 my $worksheet1 = $workbook->add_worksheet('Outlined Rows');
5761 my $worksheet2 = $workbook->add_worksheet('Collapsed Rows 1');
5762 my $worksheet3 = $workbook->add_worksheet('Collapsed Rows 2');
5763 my $worksheet4 = $workbook->add_worksheet('Collapsed Rows 3');
5764 my $worksheet5 = $workbook->add_worksheet('Outline Columns');
5765 my $worksheet6 = $workbook->add_worksheet('Collapsed Columns');
5766
5767
5768 # Add a general format
5769 my $bold = $workbook->add_format(bold => 1);
5770
5771
5772 #
5773 # This function will generate the same data and sub-totals on each worksheet.
5774 #
5775 sub create_sub_totals {
5776
5777 my $worksheet = $_[0];
5778
5779 # Add a column format for clarity
5780 $worksheet->set_column('A:A', 20);
5781
5782 # Add the data, labels and formulas
5783 $worksheet->write('A1', 'Region', $bold);
5784 $worksheet->write('A2', 'North');
5785 $worksheet->write('A3', 'North');
5786 $worksheet->write('A4', 'North');
5787 $worksheet->write('A5', 'North');
5788 $worksheet->write('A6', 'North Total', $bold);
5789
5790 $worksheet->write('B1', 'Sales', $bold);
5791 $worksheet->write('B2', 1000);
5792 $worksheet->write('B3', 1200);
5793 $worksheet->write('B4', 900);
5794 $worksheet->write('B5', 1200);
5795 $worksheet->write('B6', '=SUBTOTAL(9,B2:B5)', $bold);
5796
5797 $worksheet->write('A7', 'South');
5798 $worksheet->write('A8', 'South');
5799 $worksheet->write('A9', 'South');
5800 $worksheet->write('A10', 'South');
5801 $worksheet->write('A11', 'South Total', $bold);
5802
5803 $worksheet->write('B7', 400);
5804 $worksheet->write('B8', 600);
5805 $worksheet->write('B9', 500);
5806 $worksheet->write('B10', 600);
5807 $worksheet->write('B11', '=SUBTOTAL(9,B7:B10)', $bold);
5808
5809 $worksheet->write('A12', 'Grand Total', $bold);
5810 $worksheet->write('B12', '=SUBTOTAL(9,B2:B10)', $bold);
5811
5812 }
5813
5814
5815 ###############################################################################
5816 #
5817 # Example 1: Create a worksheet with outlined rows. It also includes SUBTOTAL()
5818 # functions so that it looks like the type of automatic outlines that are
5819 # generated when you use the Excel Data->SubTotals menu item.
5820 #
5821
5822 # The syntax is: set_row($row, $height, $XF, $hidden, $level, $collapsed)
5823 $worksheet1->set_row(1, undef, undef, 0, 2);
5824 $worksheet1->set_row(2, undef, undef, 0, 2);
5825 $worksheet1->set_row(3, undef, undef, 0, 2);
5826 $worksheet1->set_row(4, undef, undef, 0, 2);
5827 $worksheet1->set_row(5, undef, undef, 0, 1);
5828
5829 $worksheet1->set_row(6, undef, undef, 0, 2);
5830 $worksheet1->set_row(7, undef, undef, 0, 2);
5831 $worksheet1->set_row(8, undef, undef, 0, 2);
5832 $worksheet1->set_row(9, undef, undef, 0, 2);
5833 $worksheet1->set_row(10, undef, undef, 0, 1);
5834
5835 # Write the sub-total data that is common to the row examples.
5836 create_sub_totals($worksheet1);
5837
5838
5839 ###############################################################################
5840 #
5841 # Example 2: Create a worksheet with collapsed outlined rows.
5842 # This is the same as the example 1 except that the all rows are collapsed.
5843 # Note: We need to indicate the row that contains the collapsed symbol '+' with
5844 # the optional parameter, $collapsed.
5845
5846 $worksheet2->set_row(1, undef, undef, 1, 2);
5847 $worksheet2->set_row(2, undef, undef, 1, 2);
5848 $worksheet2->set_row(3, undef, undef, 1, 2);
5849 $worksheet2->set_row(4, undef, undef, 1, 2);
5850 $worksheet2->set_row(5, undef, undef, 1, 1);
5851
5852 $worksheet2->set_row(6, undef, undef, 1, 2);
5853 $worksheet2->set_row(7, undef, undef, 1, 2);
5854 $worksheet2->set_row(8, undef, undef, 1, 2);
5855 $worksheet2->set_row(9, undef, undef, 1, 2);
5856 $worksheet2->set_row(10, undef, undef, 1, 1);
5857
5858 $worksheet2->set_row(11, undef, undef, 0, 0, 1);
5859
5860 # Write the sub-total data that is common to the row examples.
5861 create_sub_totals($worksheet2);
5862
5863
5864 ###############################################################################
5865 #
5866 # Example 3: Create a worksheet with collapsed outlined rows.
5867 # Same as the example 1 except that the two sub-totals are collapsed.
5868
5869 $worksheet3->set_row(1, undef, undef, 1, 2);
5870 $worksheet3->set_row(2, undef, undef, 1, 2);
5871 $worksheet3->set_row(3, undef, undef, 1, 2);
5872 $worksheet3->set_row(4, undef, undef, 1, 2);
5873 $worksheet3->set_row(5, undef, undef, 0, 1, 1);
5874
5875 $worksheet3->set_row(6, undef, undef, 1, 2);
5876 $worksheet3->set_row(7, undef, undef, 1, 2);
5877 $worksheet3->set_row(8, undef, undef, 1, 2);
5878 $worksheet3->set_row(9, undef, undef, 1, 2);
5879 $worksheet3->set_row(10, undef, undef, 0, 1, 1);
5880
5881
5882 # Write the sub-total data that is common to the row examples.
5883 create_sub_totals($worksheet3);
5884
5885
5886 ###############################################################################
5887 #
5888 # Example 4: Create a worksheet with outlined rows.
5889 # Same as the example 1 except that the two sub-totals are collapsed.
5890
5891 $worksheet4->set_row(1, undef, undef, 1, 2);
5892 $worksheet4->set_row(2, undef, undef, 1, 2);
5893 $worksheet4->set_row(3, undef, undef, 1, 2);
5894 $worksheet4->set_row(4, undef, undef, 1, 2);
5895 $worksheet4->set_row(5, undef, undef, 1, 1, 1);
5896
5897 $worksheet4->set_row(6, undef, undef, 1, 2);
5898 $worksheet4->set_row(7, undef, undef, 1, 2);
5899 $worksheet4->set_row(8, undef, undef, 1, 2);
5900 $worksheet4->set_row(9, undef, undef, 1, 2);
5901 $worksheet4->set_row(10, undef, undef, 1, 1, 1);
5902
5903 $worksheet4->set_row(11, undef, undef, 0, 0, 1);
5904
5905 # Write the sub-total data that is common to the row examples.
5906 create_sub_totals($worksheet4);
5907
5908
5909
5910 ###############################################################################
5911 #
5912 # Example 5: Create a worksheet with outlined columns.
5913 #
5914 my $data = [
5915 ['Month', 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',' Total'],
5916 ['North', 50, 20, 15, 25, 65, 80, ,'=SUM(B2:G2)'],
5917 ['South', 10, 20, 30, 50, 50, 50, ,'=SUM(B3:G3)'],
5918 ['East', 45, 75, 50, 15, 75, 100, ,'=SUM(B4:G4)'],
5919 ['West', 15, 15, 55, 35, 20, 50, ,'=SUM(B5:G6)'],
5920 ];
5921
5922 # Add bold format to the first row
5923 $worksheet5->set_row(0, undef, $bold);
5924
5925 # Syntax: set_column($col1, $col2, $width, $XF, $hidden, $level, $collapsed)
5926 $worksheet5->set_column('A:A', 10, $bold );
5927 $worksheet5->set_column('B:G', 5, undef, 0, 1);
5928 $worksheet5->set_column('H:H', 10 );
5929
5930 # Write the data and a formula
5931 $worksheet5->write_col('A1', $data);
5932 $worksheet5->write('H6', '=SUM(H2:H5)', $bold);
5933
5934
5935 ###############################################################################
5936 #
5937 # Example 6: Create a worksheet with collapsed outlined columns.
5938 # This is the same as the previous example except collapsed columns.
5939
5940 # Add bold format to the first row
5941 $worksheet6->set_row(0, undef, $bold);
5942
5943 # Syntax: set_column($col1, $col2, $width, $XF, $hidden, $level, $collapsed)
5944 $worksheet6->set_column('A:A', 10, $bold );
5945 $worksheet6->set_column('B:G', 5, undef, 1, 1 );
5946 $worksheet6->set_column('H:H', 10, undef, 0, 0, 1);
5947
5948 # Write the data and a formula
5949 $worksheet6->write_col('A1', $data);
5950 $worksheet6->write('H6', '=SUM(H2:H5)', $bold);
5951
5952
5953 __END__
5954
5955 Download this example:
5956 <http://cpansearch.perl.org/src/JMCNAMARA/Spreadsheet-WriteExcel-2.40/examples/outline_collapsed.pl>
5957
5958 Example: panes.pl
5959 Example of using the WriteExcel module to create worksheet panes.
5960
5961 Source code for this example:
5962
5963 #!/usr/bin/perl -w
5964
5965 #######################################################################
5966 #
5967 # Example of using the WriteExcel module to create worksheet panes.
5968 #
5969 # reverse('(c)'), May 2001, John McNamara, jmcnamara@cpan.org
5970 #
5971
5972 use strict;
5973 use Spreadsheet::WriteExcel;
5974
5975 my $workbook = Spreadsheet::WriteExcel->new("panes.xls");
5976
5977 my $worksheet1 = $workbook->add_worksheet('Panes 1');
5978 my $worksheet2 = $workbook->add_worksheet('Panes 2');
5979 my $worksheet3 = $workbook->add_worksheet('Panes 3');
5980 my $worksheet4 = $workbook->add_worksheet('Panes 4');
5981
5982 # Freeze panes
5983 $worksheet1->freeze_panes(1, 0); # 1 row
5984
5985 $worksheet2->freeze_panes(0, 1); # 1 column
5986 $worksheet3->freeze_panes(1, 1); # 1 row and column
5987
5988 # Split panes.
5989 # The divisions must be specified in terms of row and column dimensions.
5990 # The default row height is 12.75 and the default column width is 8.43
5991 #
5992 $worksheet4->split_panes(12.75, 8.43, 1, 1); # 1 row and column
5993
5994
5995 #######################################################################
5996 #
5997 # Set up some formatting and text to highlight the panes
5998 #
5999
6000 my $header = $workbook->add_format();
6001 $header->set_color('white');
6002 $header->set_align('center');
6003 $header->set_align('vcenter');
6004 $header->set_pattern();
6005 $header->set_fg_color('green');
6006
6007 my $center = $workbook->add_format();
6008 $center->set_align('center');
6009
6010
6011 #######################################################################
6012 #
6013 # Sheet 1
6014 #
6015
6016 $worksheet1->set_column('A:I', 16);
6017 $worksheet1->set_row(0, 20);
6018 $worksheet1->set_selection('C3');
6019
6020 for my $i (0..8){
6021 $worksheet1->write(0, $i, 'Scroll down', $header);
6022 }
6023
6024 for my $i (1..100){
6025 for my $j (0..8){
6026 $worksheet1->write($i, $j, $i+1, $center);
6027 }
6028 }
6029
6030
6031 #######################################################################
6032 #
6033 # Sheet 2
6034 #
6035
6036 $worksheet2->set_column('A:A', 16);
6037 $worksheet2->set_selection('C3');
6038
6039 for my $i (0..49){
6040 $worksheet2->set_row($i, 15);
6041 $worksheet2->write($i, 0, 'Scroll right', $header);
6042 }
6043
6044 for my $i (0..49){
6045 for my $j (1..25){
6046 $worksheet2->write($i, $j, $j, $center);
6047 }
6048 }
6049
6050
6051 #######################################################################
6052 #
6053 # Sheet 3
6054 #
6055
6056 $worksheet3->set_column('A:Z', 16);
6057 $worksheet3->set_selection('C3');
6058
6059 for my $i (1..25){
6060 $worksheet3->write(0, $i, 'Scroll down', $header);
6061 }
6062
6063 for my $i (1..49){
6064 $worksheet3->write($i, 0, 'Scroll right', $header);
6065 }
6066
6067 for my $i (1..49){
6068 for my $j (1..25){
6069 $worksheet3->write($i, $j, $j, $center);
6070 }
6071 }
6072
6073
6074 #######################################################################
6075 #
6076 # Sheet 4
6077 #
6078
6079 $worksheet4->set_selection('C3');
6080
6081 for my $i (1..25){
6082 $worksheet4->write(0, $i, 'Scroll', $center);
6083 }
6084
6085 for my $i (1..49){
6086 $worksheet4->write($i, 0, 'Scroll', $center);
6087 }
6088
6089 for my $i (1..49){
6090 for my $j (1..25){
6091 $worksheet4->write($i, $j, $j, $center);
6092 }
6093 }
6094
6095 Download this example:
6096 <http://cpansearch.perl.org/src/JMCNAMARA/Spreadsheet-WriteExcel-2.40/examples/panes.pl>
6097
6098 Example: properties.pl
6099 An example of adding document properties to a Spreadsheet::WriteExcel
6100 file.
6101
6102 Source code for this example:
6103
6104 #!/usr/bin/perl -w
6105
6106 ##############################################################################
6107 #
6108 # An example of adding document properties to a Spreadsheet::WriteExcel file.
6109 #
6110 # reverse('(c)'), August 2008, John McNamara, jmcnamara@cpan.org
6111 #
6112
6113 use strict;
6114 use Spreadsheet::WriteExcel;
6115
6116 my $workbook = Spreadsheet::WriteExcel->new('properties.xls');
6117 my $worksheet = $workbook->add_worksheet();
6118
6119
6120 $workbook->set_properties(
6121 title => 'This is an example spreadsheet',
6122 subject => 'With document properties',
6123 author => 'John McNamara',
6124 manager => 'Dr. Heinz Doofenshmirtz ',
6125 company => 'of Wolves',
6126 category => 'Example spreadsheets',
6127 keywords => 'Sample, Example, Properties',
6128 comments => 'Created with Perl and Spreadsheet::WriteExcel',
6129 );
6130
6131
6132 $worksheet->set_column('A:A', 50);
6133 $worksheet->write('A1', 'Select File->Properties to see the file properties');
6134
6135
6136 __END__
6137
6138 Download this example:
6139 <http://cpansearch.perl.org/src/JMCNAMARA/Spreadsheet-WriteExcel-2.40/examples/properties.pl>
6140
6141 Example: protection.pl
6142 Example of cell locking and formula hiding in an Excel worksheet via
6143 the Spreadsheet::WriteExcel module.
6144
6145 Source code for this example:
6146
6147 #!/usr/bin/perl -w
6148
6149 ########################################################################
6150 #
6151 # Example of cell locking and formula hiding in an Excel worksheet via
6152 # the Spreadsheet::WriteExcel module.
6153 #
6154 # reverse('(c)'), August 2001, John McNamara, jmcnamara@cpan.org
6155 #
6156
6157 use strict;
6158 use Spreadsheet::WriteExcel;
6159
6160 my $workbook = Spreadsheet::WriteExcel->new("protection.xls");
6161 my $worksheet = $workbook->add_worksheet();
6162
6163 # Create some format objects
6164 my $locked = $workbook->add_format(locked => 1);
6165 my $unlocked = $workbook->add_format(locked => 0);
6166 my $hidden = $workbook->add_format(hidden => 1);
6167
6168 # Format the columns
6169 $worksheet->set_column('A:A', 42);
6170 $worksheet->set_selection('B3:B3');
6171
6172 # Protect the worksheet
6173 $worksheet->protect();
6174
6175 # Examples of cell locking and hiding
6176 $worksheet->write('A1', 'Cell B1 is locked. It cannot be edited.');
6177 $worksheet->write('B1', '=1+2', $locked);
6178
6179 $worksheet->write('A2', 'Cell B2 is unlocked. It can be edited.');
6180 $worksheet->write('B2', '=1+2', $unlocked);
6181
6182 $worksheet->write('A3', "Cell B3 is hidden. The formula isn't visible.");
6183 $worksheet->write('B3', '=1+2', $hidden);
6184
6185 $worksheet->write('A5', 'Use Menu->Tools->Protection->Unprotect Sheet');
6186 $worksheet->write('A6', 'to remove the worksheet protection. ');
6187
6188 Download this example:
6189 <http://cpansearch.perl.org/src/JMCNAMARA/Spreadsheet-WriteExcel-2.40/examples/protection.pl>
6190
6191 Example: repeat.pl
6192 Example of writing repeated formulas.
6193
6194 Source code for this example:
6195
6196 #!/usr/bin/perl -w
6197
6198 ######################################################################
6199 #
6200 # Example of writing repeated formulas.
6201 #
6202 # reverse('(c)'), August 2002, John McNamara, jmcnamara@cpan.org
6203 #
6204
6205 use strict;
6206 use Spreadsheet::WriteExcel;
6207
6208 my $workbook = Spreadsheet::WriteExcel->new("repeat.xls");
6209 my $worksheet = $workbook->add_worksheet();
6210
6211
6212 my $limit = 1000;
6213
6214 # Write a column of numbers
6215 for my $row (0..$limit) {
6216 $worksheet->write($row, 0, $row);
6217 }
6218
6219
6220 # Store a formula
6221 my $formula = $worksheet->store_formula('=A1*5+4');
6222
6223
6224 # Write a column of formulas based on the stored formula
6225 for my $row (0..$limit) {
6226 $worksheet->repeat_formula($row, 1, $formula, undef,
6227 qr/^A1$/, 'A'.($row+1));
6228 }
6229
6230
6231 # Direct formula writing. As a speed comparison uncomment the
6232 # following and run the program again
6233
6234 #for my $row (0..$limit) {
6235 # $worksheet->write_formula($row, 2, '=A'.($row+1).'*5+4');
6236 #}
6237
6238
6239
6240 __END__
6241
6242 Download this example:
6243 <http://cpansearch.perl.org/src/JMCNAMARA/Spreadsheet-WriteExcel-2.40/examples/repeat.pl>
6244
6245 Example: right_to_left.pl
6246 Example of how to change the default worksheet direction from left-to-
6247 right to right-to-left as required by some eastern verions of Excel.
6248
6249 Source code for this example:
6250
6251 #!/usr/bin/perl -w
6252
6253 #######################################################################
6254 #
6255 # Example of how to change the default worksheet direction from
6256 # left-to-right to right-to-left as required by some eastern verions
6257 # of Excel.
6258 #
6259 # reverse('(c)'), January 2006, John McNamara, jmcnamara@cpan.org
6260 #
6261
6262 use strict;
6263 use Spreadsheet::WriteExcel;
6264
6265 my $workbook = Spreadsheet::WriteExcel->new("right_to_left.xls");
6266 my $worksheet1 = $workbook->add_worksheet();
6267 my $worksheet2 = $workbook->add_worksheet();
6268
6269 $worksheet2->right_to_left();
6270
6271 $worksheet1->write(0, 0, 'Hello'); # A1, B1, C1, ...
6272 $worksheet2->write(0, 0, 'Hello'); # ..., C1, B1, A1
6273
6274 Download this example:
6275 <http://cpansearch.perl.org/src/JMCNAMARA/Spreadsheet-WriteExcel-2.40/examples/right_to_left.pl>
6276
6277 Example: row_wrap.pl
6278 Demonstrates how to wrap data from one worksheet onto another.
6279
6280 Excel has a row limit of 65536 rows. Sometimes the amount of row data
6281 to be written to a file is greater than this limit. In this case it is
6282 a useful technique to wrap the data from one worksheet onto the next so
6283 that we get something like the following:
6284
6285 Sheet1 Row 1 - 65536
6286 Sheet2 Row 65537 - 131072
6287 Sheet3 Row 131073 - ...
6288
6289 In order to achieve this we use a single worksheet reference and
6290 reinitialise it to point to a new worksheet when required.
6291
6292 Source code for this example:
6293
6294 #!/usr/bin/perl -w
6295
6296 ##############################################################################
6297 #
6298 # Demonstrates how to wrap data from one worksheet onto another.
6299 #
6300 # Excel has a row limit of 65536 rows. Sometimes the amount of row data to be
6301 # written to a file is greater than this limit. In this case it is a useful
6302 # technique to wrap the data from one worksheet onto the next so that we get
6303 # something like the following:
6304 #
6305 # Sheet1 Row 1 - 65536
6306 # Sheet2 Row 65537 - 131072
6307 # Sheet3 Row 131073 - ...
6308 #
6309 # In order to achieve this we use a single worksheet reference and
6310 # reinitialise it to point to a new worksheet when required.
6311 #
6312 # reverse('(c)'), May 2006, John McNamara, jmcnamara@cpan.org
6313 #
6314
6315
6316 use strict;
6317 use Spreadsheet::WriteExcel;
6318
6319 my $workbook = Spreadsheet::WriteExcel->new('row_wrap.xls');
6320 my $worksheet = $workbook->add_worksheet();
6321
6322
6323 # Worksheet formatting.
6324 $worksheet->set_column('A:A', 20);
6325
6326
6327 # For the sake of this example we will use a small row limit. In order to use
6328 # the entire row range set the $row_limit to 65536.
6329 my $row_limit = 10;
6330 my $row = 0;
6331
6332 for my $count (1 .. 2 * $row_limit +10) {
6333
6334 # When we hit the row limit we redirect the output
6335 # to a new worksheet and reset the row number.
6336 if ($row == $row_limit) {
6337 $worksheet = $workbook->add_worksheet();
6338 $row = 0;
6339
6340 # Repeat any worksheet formatting.
6341 $worksheet->set_column('A:A', 20);
6342 }
6343
6344 $worksheet->write($row, 0, "This is row $count");
6345 $row++;
6346 }
6347
6348 Download this example:
6349 <http://cpansearch.perl.org/src/JMCNAMARA/Spreadsheet-WriteExcel-2.40/examples/row_wrap.pl>
6350
6351 Example: sales.pl
6352 Example of a sales worksheet to demonstrate several different features.
6353 Also uses functions from the Spreadsheet::WriteExcel::Utility module.
6354
6355 Source code for this example:
6356
6357 #!/usr/bin/perl -w
6358
6359 ###############################################################################
6360 #
6361 # Example of a sales worksheet to demonstrate several different features.
6362 # Also uses functions from the L<Spreadsheet::WriteExcel::Utility> module.
6363 #
6364 # reverse('(c)'), October 2001, John McNamara, jmcnamara@cpan.org
6365 #
6366
6367 use strict;
6368 use Spreadsheet::WriteExcel;
6369 use Spreadsheet::WriteExcel::Utility;
6370
6371 # Create a new workbook and add a worksheet
6372 my $workbook = Spreadsheet::WriteExcel->new("sales.xls");
6373 my $worksheet = $workbook->add_worksheet('May Sales');
6374
6375
6376 # Set up some formats
6377 my %heading = (
6378 bold => 1,
6379 pattern => 1,
6380 fg_color => 19,
6381 border => 1,
6382 align => 'center',
6383 );
6384
6385 my %total = (
6386 bold => 1,
6387 top => 1,
6388 num_format => '$#,##0.00'
6389 );
6390
6391 my $heading = $workbook->add_format(%heading);
6392 my $total_format = $workbook->add_format(%total);
6393 my $price_format = $workbook->add_format(num_format => '$#,##0.00');
6394 my $date_format = $workbook->add_format(num_format => 'mmm d yyy');
6395
6396
6397 # Write the main headings
6398 $worksheet->freeze_panes(1); # Freeze the first row
6399 $worksheet->write('A1', 'Item', $heading);
6400 $worksheet->write('B1', 'Quantity', $heading);
6401 $worksheet->write('C1', 'Price', $heading);
6402 $worksheet->write('D1', 'Total', $heading);
6403 $worksheet->write('E1', 'Date', $heading);
6404
6405 # Set the column widths
6406 $worksheet->set_column('A:A', 25);
6407 $worksheet->set_column('B:B', 10);
6408 $worksheet->set_column('C:E', 16);
6409
6410
6411 # Extract the sales data from the __DATA__ section at the end of the file.
6412 # In reality this information would probably come from a database
6413 my @sales;
6414
6415 foreach my $line (<DATA>) {
6416 chomp $line;
6417 next if $line eq '';
6418 # Simple-minded processing of CSV data. Refer to the Text::CSV_XS
6419 # and Text::xSV modules for a more complete CSV handling.
6420 my @items = split /,/, $line;
6421 push @sales, \@items;
6422 }
6423
6424
6425 # Write out the items from each row
6426 my $row = 1;
6427 foreach my $sale (@sales) {
6428
6429 $worksheet->write($row, 0, @$sale[0]);
6430 $worksheet->write($row, 1, @$sale[1]);
6431 $worksheet->write($row, 2, @$sale[2], $price_format);
6432
6433 # Create a formula like '=B2*C2'
6434 my $formula = '='
6435 . xl_rowcol_to_cell($row, 1)
6436 . "*"
6437 . xl_rowcol_to_cell($row, 2);
6438
6439 $worksheet->write($row, 3, $formula, $price_format);
6440
6441 # Parse the date
6442 my $date = xl_decode_date_US(@$sale[3]);
6443 $worksheet->write($row, 4, $date, $date_format);
6444 $row++;
6445 }
6446
6447 # Create a formula to sum the totals, like '=SUM(D2:D6)'
6448 my $total = '=SUM(D2:'
6449 . xl_rowcol_to_cell($row-1, 3)
6450 . ")";
6451
6452 $worksheet->write($row, 3, $total, $total_format);
6453
6454
6455
6456 __DATA__
6457 586 card,20,125.50,5/12/01
6458 Flat Screen Monitor,1,1300.00,5/12/01
6459 64 MB dimms,45,49.99,5/13/01
6460 15 GB HD,12,300.00,5/13/01
6461 Speakers (pair),5,15.50,5/14/01
6462
6463 Download this example:
6464 <http://cpansearch.perl.org/src/JMCNAMARA/Spreadsheet-WriteExcel-2.40/examples/sales.pl>
6465
6466 Example: sendmail.pl
6467 Example of how to use Mail::Sender to send a Spreadsheet::WriteExcel
6468 Excel file as an attachment.
6469
6470 The main thing is to ensure that you close() the Worbook before you
6471 send it.
6472
6473 See the Mail::Sender module for further details.
6474
6475 #!/usr/bin/perl -w
6476
6477 ###############################################################################
6478 #
6479 # Example of how to use Mail::Sender to send a Spreadsheet::WriteExcel Excel
6480 # file as an attachment.
6481 #
6482 # The main thing is to ensure that you close() the Worbook before you send it.
6483 #
6484 # See the L<Mail::Sender> module for further details.
6485 #
6486 # reverse('(c)'), August 2002, John McNamara, jmcnamara@cpan.org
6487 #
6488
6489
6490 use strict;
6491 use Spreadsheet::WriteExcel;
6492 use Mail::Sender;
6493
6494 # Create an Excel file
6495 my $workbook = Spreadsheet::WriteExcel->new("sendmail.xls");
6496 my $worksheet = $workbook->add_worksheet;
6497
6498 $worksheet->write('A1', "Hello World!");
6499
6500 $workbook->close(); # Must close before sending
6501
6502
6503
6504 # Send the file. Change all variables to suit
6505 my $sender = new Mail::Sender
6506 {
6507 smtp => '123.123.123.123',
6508 from => 'Someone'
6509 };
6510
6511 $sender->MailFile(
6512 {
6513 to => 'another@mail.com',
6514 subject => 'Excel file',
6515 msg => "Here is the data.\n",
6516 file => 'mail.xls',
6517 });
6518
6519 Download this example:
6520 <http://cpansearch.perl.org/src/JMCNAMARA/Spreadsheet-WriteExcel-2.40/examples/sendmail.pl>
6521
6522 Example: stats_ext.pl
6523 Example of formatting using the Spreadsheet::WriteExcel module
6524
6525 This is a simple example of how to use functions that reference cells
6526 in other worksheets within the same workbook.
6527
6528 Source code for this example:
6529
6530 #!/usr/bin/perl -w
6531
6532 ###############################################################################
6533 #
6534 # Example of formatting using the Spreadsheet::WriteExcel module
6535 #
6536 # This is a simple example of how to use functions that reference cells in
6537 # other worksheets within the same workbook.
6538 #
6539 # reverse('(c)'), March 2001, John McNamara, jmcnamara@cpan.org
6540 #
6541
6542 use strict;
6543 use Spreadsheet::WriteExcel;
6544
6545 # Create a new workbook and add a worksheet
6546 my $workbook = Spreadsheet::WriteExcel->new("stats_ext.xls");
6547 my $worksheet1 = $workbook->add_worksheet('Test results');
6548 my $worksheet2 = $workbook->add_worksheet('Data');
6549
6550 # Set the column width for columns 1
6551 $worksheet1->set_column('A:A', 20);
6552
6553
6554 # Create a format for the headings
6555 my $heading = $workbook->add_format();
6556 $heading->set_bold();
6557
6558 # Create a numerical format
6559 my $numformat = $workbook->add_format();
6560 $numformat->set_num_format('0.00');
6561
6562
6563
6564
6565 # Write some statistical functions
6566 $worksheet1->write('A1', 'Count', $heading);
6567 $worksheet1->write('B1', '=COUNT(Data!B2:B9)');
6568
6569 $worksheet1->write('A2', 'Sum', $heading);
6570 $worksheet1->write('B2', '=SUM(Data!B2:B9)');
6571
6572 $worksheet1->write('A3', 'Average', $heading);
6573 $worksheet1->write('B3', '=AVERAGE(Data!B2:B9)');
6574
6575 $worksheet1->write('A4', 'Min', $heading);
6576 $worksheet1->write('B4', '=MIN(Data!B2:B9)');
6577
6578 $worksheet1->write('A5', 'Max', $heading);
6579 $worksheet1->write('B5', '=MAX(Data!B2:B9)');
6580
6581 $worksheet1->write('A6', 'Standard Deviation', $heading);
6582 $worksheet1->write('B6', '=STDEV(Data!B2:B9)');
6583
6584 $worksheet1->write('A7', 'Kurtosis', $heading);
6585 $worksheet1->write('B7', '=KURT(Data!B2:B9)');
6586
6587
6588 # Write the sample data
6589 $worksheet2->write('A1', 'Sample', $heading);
6590 $worksheet2->write('A2', 1);
6591 $worksheet2->write('A3', 2);
6592 $worksheet2->write('A4', 3);
6593 $worksheet2->write('A5', 4);
6594 $worksheet2->write('A6', 5);
6595 $worksheet2->write('A7', 6);
6596 $worksheet2->write('A8', 7);
6597 $worksheet2->write('A9', 8);
6598
6599 $worksheet2->write('B1', 'Length', $heading);
6600 $worksheet2->write('B2', 25.4, $numformat);
6601 $worksheet2->write('B3', 25.4, $numformat);
6602 $worksheet2->write('B4', 24.8, $numformat);
6603 $worksheet2->write('B5', 25.0, $numformat);
6604 $worksheet2->write('B6', 25.3, $numformat);
6605 $worksheet2->write('B7', 24.9, $numformat);
6606 $worksheet2->write('B8', 25.2, $numformat);
6607 $worksheet2->write('B9', 24.8, $numformat);
6608
6609 Download this example:
6610 <http://cpansearch.perl.org/src/JMCNAMARA/Spreadsheet-WriteExcel-2.40/examples/stats_ext.pl>
6611
6612 Example: stocks.pl
6613 Example of formatting using the Spreadsheet::WriteExcel module
6614
6615 This example shows how to use a conditional numerical format with
6616 colours to indicate if a share price has gone up or down.
6617
6618 Source code for this example:
6619
6620 #!/usr/bin/perl -w
6621
6622 ###############################################################################
6623 #
6624 # Example of formatting using the Spreadsheet::WriteExcel module
6625 #
6626 # This example shows how to use a conditional numerical format
6627 # with colours to indicate if a share price has gone up or down.
6628 #
6629 # reverse('(c)'), March 2001, John McNamara, jmcnamara@cpan.org
6630 #
6631
6632 use strict;
6633 use Spreadsheet::WriteExcel;
6634
6635 # Create a new workbook and add a worksheet
6636 my $workbook = Spreadsheet::WriteExcel->new("stocks.xls");
6637 my $worksheet = $workbook->add_worksheet();
6638
6639 # Set the column width for columns 1, 2, 3 and 4
6640 $worksheet->set_column(0, 3, 15);
6641
6642
6643 # Create a format for the column headings
6644 my $header = $workbook->add_format();
6645 $header->set_bold();
6646 $header->set_size(12);
6647 $header->set_color('blue');
6648
6649
6650 # Create a format for the stock price
6651 my $f_price = $workbook->add_format();
6652 $f_price->set_align('left');
6653 $f_price->set_num_format('$0.00');
6654
6655
6656 # Create a format for the stock volume
6657 my $f_volume = $workbook->add_format();
6658 $f_volume->set_align('left');
6659 $f_volume->set_num_format('#,##0');
6660
6661
6662 # Create a format for the price change. This is an example of a conditional
6663 # format. The number is formatted as a percentage. If it is positive it is
6664 # formatted in green, if it is negative it is formatted in red and if it is
6665 # zero it is formatted as the default font colour (in this case black).
6666 # Note: the [Green] format produces an unappealing lime green. Try
6667 # [Color 10] instead for a dark green.
6668 #
6669 my $f_change = $workbook->add_format();
6670 $f_change->set_align('left');
6671 $f_change->set_num_format('[Green]0.0%;[Red]-0.0%;0.0%');
6672
6673
6674 # Write out the data
6675 $worksheet->write(0, 0, 'Company', $header);
6676 $worksheet->write(0, 1, 'Price', $header);
6677 $worksheet->write(0, 2, 'Volume', $header);
6678 $worksheet->write(0, 3, 'Change', $header);
6679
6680 $worksheet->write(1, 0, 'Damage Inc.' );
6681 $worksheet->write(1, 1, 30.25, $f_price); # $30.25
6682 $worksheet->write(1, 2, 1234567, $f_volume); # 1,234,567
6683 $worksheet->write(1, 3, 0.085, $f_change); # 8.5% in green
6684
6685 $worksheet->write(2, 0, 'Dump Corp.' );
6686 $worksheet->write(2, 1, 1.56, $f_price); # $1.56
6687 $worksheet->write(2, 2, 7564, $f_volume); # 7,564
6688 $worksheet->write(2, 3, -0.015, $f_change); # -1.5% in red
6689
6690 $worksheet->write(3, 0, 'Rev Ltd.' );
6691 $worksheet->write(3, 1, 0.13, $f_price); # $0.13
6692 $worksheet->write(3, 2, 321, $f_volume); # 321
6693 $worksheet->write(3, 3, 0, $f_change); # 0 in the font color (black)
6694
6695 Download this example:
6696 <http://cpansearch.perl.org/src/JMCNAMARA/Spreadsheet-WriteExcel-2.40/examples/stocks.pl>
6697
6698 Example: tab_colors.pl
6699 Example of how to set Excel worksheet tab colours.
6700
6701 Source code for this example:
6702
6703 #!/usr/bin/perl -w
6704
6705 #######################################################################
6706 #
6707 # Example of how to set Excel worksheet tab colours.
6708 #
6709 # reverse('(c)'), May 2006, John McNamara, jmcnamara@cpan.org
6710 #
6711
6712 use strict;
6713 use Spreadsheet::WriteExcel;
6714
6715
6716 my $workbook = Spreadsheet::WriteExcel->new('tab_colors.xls');
6717
6718 my $worksheet1 = $workbook->add_worksheet();
6719 my $worksheet2 = $workbook->add_worksheet();
6720 my $worksheet3 = $workbook->add_worksheet();
6721 my $worksheet4 = $workbook->add_worksheet();
6722
6723 # Worksheet1 will have the default tab colour.
6724 $worksheet2->set_tab_color('red');
6725 $worksheet3->set_tab_color('green');
6726 $worksheet4->set_tab_color(0x35); # Orange
6727
6728 Download this example:
6729 <http://cpansearch.perl.org/src/JMCNAMARA/Spreadsheet-WriteExcel-2.40/examples/tab_colors.pl>
6730
6731 Example: textwrap.pl
6732 Example of formatting using the Spreadsheet::WriteExcel module
6733
6734 This example shows how to wrap text in a cell. There are two
6735 alternatives, vertical justification and text wrap.
6736
6737 With vertical justification the text is wrapped automatically to fit
6738 the column width. With text wrap you must specify a newline with an
6739 embedded \n.
6740
6741 Source code for this example:
6742
6743 #!/usr/bin/perl -w
6744
6745 ###############################################################################
6746 #
6747 # Example of formatting using the Spreadsheet::WriteExcel module
6748 #
6749 # This example shows how to wrap text in a cell. There are two alternatives,
6750 # vertical justification and text wrap.
6751 #
6752 # With vertical justification the text is wrapped automatically to fit the
6753 # column width. With text wrap you must specify a newline with an embedded \n.
6754 #
6755 # reverse('(c)'), March 2001, John McNamara, jmcnamara@cpan.org
6756 #
6757
6758 use strict;
6759 use Spreadsheet::WriteExcel;
6760
6761 # Create a new workbook and add a worksheet
6762 my $workbook = Spreadsheet::WriteExcel->new("textwrap.xls");
6763 my $worksheet = $workbook->add_worksheet();
6764
6765 # Set the column width for columns 1, 2 and 3
6766 $worksheet->set_column(1, 1, 24);
6767 $worksheet->set_column(2, 2, 34);
6768 $worksheet->set_column(3, 3, 34);
6769
6770 # Set the row height for rows 1, 4, and 6. The height of row 2 will adjust
6771 # automatically to fit the text.
6772 #
6773 $worksheet->set_row(0, 30);
6774 $worksheet->set_row(3, 40);
6775 $worksheet->set_row(5, 80);
6776
6777
6778 # No newlines
6779 my $str1 = "For whatever we lose (like a you or a me) ";
6780 $str1 .= "it's always ourselves we find in the sea";
6781
6782 # Embedded newlines
6783 my $str2 = "For whatever we lose\n(like a you or a me)\n";
6784 $str2 .= "it's always ourselves\nwe find in the sea";
6785
6786
6787 # Create a format for the column headings
6788 my $header = $workbook->add_format();
6789 $header->set_bold();
6790 $header->set_font("Courier New");
6791 $header->set_align('center');
6792 $header->set_align('vcenter');
6793
6794 # Create a "vertical justification" format
6795 my $format1 = $workbook->add_format();
6796 $format1->set_align('vjustify');
6797
6798 # Create a "text wrap" format
6799 my $format2 = $workbook->add_format();
6800 $format2->set_text_wrap();
6801
6802 # Write the headers
6803 $worksheet->write(0, 1, "set_align('vjustify')", $header);
6804 $worksheet->write(0, 2, "set_align('vjustify')", $header);
6805 $worksheet->write(0, 3, "set_text_wrap()", $header);
6806
6807 # Write some examples
6808 $worksheet->write(1, 1, $str1, $format1);
6809 $worksheet->write(1, 2, $str1, $format1);
6810 $worksheet->write(1, 3, $str2, $format2);
6811
6812 $worksheet->write(3, 1, $str1, $format1);
6813 $worksheet->write(3, 2, $str1, $format1);
6814 $worksheet->write(3, 3, $str2, $format2);
6815
6816 $worksheet->write(5, 1, $str1, $format1);
6817 $worksheet->write(5, 2, $str1, $format1);
6818 $worksheet->write(5, 3, $str2, $format2);
6819
6820 Download this example:
6821 <http://cpansearch.perl.org/src/JMCNAMARA/Spreadsheet-WriteExcel-2.40/examples/textwrap.pl>
6822
6823 Example: win32ole.pl
6824 This is a simple example of how to create an Excel file using the
6825 Win32::OLE module for the sake of comparison.
6826
6827 #!/usr/bin/perl -w
6828
6829 ###############################################################################
6830 #
6831 # This is a simple example of how to create an Excel file using the
6832 # Win32::OLE module for the sake of comparison.
6833 #
6834 # reverse('(c)'), March 2001, John McNamara, jmcnamara@cpan.org
6835 #
6836
6837 use strict;
6838 use Cwd;
6839 use Win32::OLE;
6840 use Win32::OLE::Const 'Microsoft Excel';
6841
6842
6843 my $application = Win32::OLE->new("Excel.Application");
6844 my $workbook = $application->Workbooks->Add;
6845 my $worksheet = $workbook->Worksheets(1);
6846
6847 $worksheet->Cells(1,1)->{Value} = "Hello World";
6848 $worksheet->Cells(2,1)->{Value} = "One";
6849 $worksheet->Cells(3,1)->{Value} = "Two";
6850 $worksheet->Cells(4,1)->{Value} = 3;
6851 $worksheet->Cells(5,1)->{Value} = 4.0000001;
6852
6853 # Add some formatting
6854 $worksheet->Cells(1,1)->Font->{Bold} = "True";
6855 $worksheet->Cells(1,1)->Font->{Size} = 16;
6856 $worksheet->Cells(1,1)->Font->{ColorIndex} = 3;
6857 $worksheet->Columns("A:A")->{ColumnWidth} = 25;
6858
6859 # Write a hyperlink
6860 my $range = $worksheet->Range("A7:A7");
6861 $worksheet->Hyperlinks->Add({ Anchor => $range, Address => "http://www.perl.com/"});
6862
6863 # Get current directory using Cwd.pm
6864 my $dir = cwd();
6865
6866 $workbook->SaveAs({
6867 FileName => $dir . '/win32ole.xls',
6868 FileFormat => xlNormal,
6869 });
6870 $workbook->Close;
6871
6872 Download this example:
6873 <http://cpansearch.perl.org/src/JMCNAMARA/Spreadsheet-WriteExcel-2.40/examples/win32ole.pl>
6874
6875 Example: write_arrays.pl
6876 Example of how to use the Spreadsheet::WriteExcel module to write 1D
6877 and 2D arrays of data.
6878
6879 To find out more about array references refer(!!) to the perlref and
6880 perlreftut manpages. To find out more about 2D arrays or "list of
6881 lists" refer to the perllol manpage.
6882
6883 Source code for this example:
6884
6885 #!/usr/bin/perl -w
6886
6887 #######################################################################
6888 #
6889 # Example of how to use the Spreadsheet::WriteExcel module to
6890 # write 1D and 2D arrays of data.
6891 #
6892 # To find out more about array references refer(!!) to the perlref and
6893 # perlreftut manpages. To find out more about 2D arrays or "list of
6894 # lists" refer to the perllol manpage.
6895 #
6896 # reverse('(c)'), March 2002, John McNamara, jmcnamara@cpan.org
6897 #
6898
6899
6900 use strict;
6901 use Spreadsheet::WriteExcel;
6902
6903
6904 my $workbook = Spreadsheet::WriteExcel->new("write_arrays.xls");
6905 my $worksheet1 = $workbook->add_worksheet('Example 1');
6906 my $worksheet2 = $workbook->add_worksheet('Example 2');
6907 my $worksheet3 = $workbook->add_worksheet('Example 3');
6908 my $worksheet4 = $workbook->add_worksheet('Example 4');
6909 my $worksheet5 = $workbook->add_worksheet('Example 5');
6910 my $worksheet6 = $workbook->add_worksheet('Example 6');
6911 my $worksheet7 = $workbook->add_worksheet('Example 7');
6912 my $worksheet8 = $workbook->add_worksheet('Example 8');
6913
6914 my $format = $workbook->add_format(color => 'red', bold => 1);
6915
6916
6917 # Data arrays used in the following examples.
6918 # undef values are written as blank cells (with format if specified).
6919 #
6920 my @array = ( 'one', 'two', undef, 'four' );
6921
6922 my @array2d = (
6923 ['maggie', 'milly', 'molly', 'may' ],
6924 [13, 14, 15, 16 ],
6925 ['shell', 'star', 'crab', 'stone'],
6926 );
6927
6928
6929 # 1. Write a row of data using an array reference.
6930 $worksheet1->write('A1', \@array);
6931
6932 # 2. Same as 1. above using an anonymous array ref.
6933 $worksheet2->write('A1', [ @array ]);
6934
6935 # 3. Write a row of data using an explicit write_row() method call.
6936 # This is the same as calling write() in Ex. 1 above.
6937 #
6938 $worksheet3->write_row('A1', \@array);
6939
6940 # 4. Write a column of data using the write_col() method call.
6941 $worksheet4->write_col('A1', \@array);
6942
6943 # 5. Write a column of data using a ref to an array ref, i.e. a 2D array.
6944 $worksheet5->write('A1', [ \@array ]);
6945
6946 # 6. Write a 2D array in col-row order.
6947 $worksheet6->write('A1', \@array2d);
6948
6949 # 7. Write a 2D array in row-col order.
6950 $worksheet7->write_col('A1', \@array2d);
6951
6952 # 8. Write a row of data with formatting. The blank cell is also formatted.
6953 $worksheet8->write('A1', \@array, $format);
6954
6955 Download this example:
6956 <http://cpansearch.perl.org/src/JMCNAMARA/Spreadsheet-WriteExcel-2.40/examples/write_arrays.pl>
6957
6958 Example: write_handler1.pl
6959 Example of how to add a user defined data handler to the Spreadsheet::
6960 WriteExcel write() method.
6961
6962 The following example shows how to add a handler for a 7 digit ID
6963 number.
6964
6965 Source code for this example:
6966
6967 #!/usr/bin/perl -w
6968
6969 ###############################################################################
6970 #
6971 # Example of how to add a user defined data handler to the Spreadsheet::
6972 # WriteExcel write() method.
6973 #
6974 # The following example shows how to add a handler for a 7 digit ID number.
6975 #
6976 #
6977 # reverse('(c)'), September 2004, John McNamara, jmcnamara@cpan.org
6978 #
6979
6980 use strict;
6981 use Spreadsheet::WriteExcel;
6982
6983
6984 my $workbook = Spreadsheet::WriteExcel->new("write_handler1.xls");
6985 my $worksheet = $workbook->add_worksheet();
6986
6987
6988 ###############################################################################
6989 #
6990 # Add a handler for 7 digit id numbers. This is useful when you want a string
6991 # such as 0000001 written as a string instead of a number and thus preserve
6992 # the leading zeroes.
6993 #
6994 # Note: you can get the same effect using the keep_leading_zeros() method but
6995 # this serves as a simple example.
6996 #
6997 $worksheet->add_write_handler(qr[^\d{7}$], \&write_my_id);
6998
6999
7000 ###############################################################################
7001 #
7002 # The following function processes the data when a match is found.
7003 #
7004 sub write_my_id {
7005
7006 my $worksheet = shift;
7007
7008 return $worksheet->write_string(@_);
7009 }
7010
7011
7012 # This format maintains the cell as text even if it is edited.
7013 my $id_format = $workbook->add_format(num_format => '@');
7014
7015
7016 # Write some numbers in the user defined format
7017 $worksheet->write('A1', '0000000', $id_format);
7018 $worksheet->write('A2', '0000001', $id_format);
7019 $worksheet->write('A3', '0004000', $id_format);
7020 $worksheet->write('A4', '1234567', $id_format);
7021
7022 # Write some numbers that don't match the defined format
7023 $worksheet->write('A6', '000000', $id_format);
7024 $worksheet->write('A7', '000001', $id_format);
7025 $worksheet->write('A8', '004000', $id_format);
7026 $worksheet->write('A9', '123456', $id_format);
7027
7028
7029 __END__
7030
7031 Download this example:
7032 <http://cpansearch.perl.org/src/JMCNAMARA/Spreadsheet-WriteExcel-2.40/examples/write_handler1.pl>
7033
7034 Example: write_handler2.pl
7035 Example of how to add a user defined data handler to the Spreadsheet::
7036 WriteExcel write() method.
7037
7038 The following example shows how to add a handler for a 7 digit ID
7039 number. It adds an additional constraint to the write_handler1.pl in
7040 that it only filters data that isn't in the third column.
7041
7042 Source code for this example:
7043
7044 #!/usr/bin/perl -w
7045
7046 ###############################################################################
7047 #
7048 # Example of how to add a user defined data handler to the Spreadsheet::
7049 # WriteExcel write() method.
7050 #
7051 # The following example shows how to add a handler for a 7 digit ID number.
7052 # It adds an additional constraint to the write_handler1.pl in that it only
7053 # filters data that isn't in the third column.
7054 #
7055 #
7056 # reverse('(c)'), September 2004, John McNamara, jmcnamara@cpan.org
7057 #
7058
7059 use strict;
7060 use Spreadsheet::WriteExcel;
7061
7062
7063 my $workbook = Spreadsheet::WriteExcel->new("write_handler2.xls");
7064 my $worksheet = $workbook->add_worksheet();
7065
7066
7067 ###############################################################################
7068 #
7069 # Add a handler for 7 digit id numbers. This is useful when you want a string
7070 # such as 0000001 written as a string instead of a number and thus preserve
7071 # the leading zeroes.
7072 #
7073 # Note: you can get the same effect using the keep_leading_zeros() method but
7074 # this serves as a simple example.
7075 #
7076 $worksheet->add_write_handler(qr[^\d{7}$], \&write_my_id);
7077
7078
7079 ###############################################################################
7080 #
7081 # The following function processes the data when a match is found. The handler
7082 # is set up so that it only filters data if it is in the third column.
7083 #
7084 sub write_my_id {
7085
7086 my $worksheet = shift;
7087 my $col = $_[1];
7088
7089 # col is zero based
7090 if ($col != 2) {
7091 return $worksheet->write_string(@_);
7092 }
7093 else {
7094 # Reject the match and return control to write()
7095 return undef;
7096 }
7097
7098 }
7099
7100
7101 # This format maintains the cell as text even if it is edited.
7102 my $id_format = $workbook->add_format(num_format => '@');
7103
7104
7105 # Write some numbers in the user defined format
7106 $worksheet->write('A1', '0000000', $id_format);
7107 $worksheet->write('B1', '0000001', $id_format);
7108 $worksheet->write('C1', '0000002', $id_format);
7109 $worksheet->write('D1', '0000003', $id_format);
7110
7111
7112
7113 __END__
7114
7115 Download this example:
7116 <http://cpansearch.perl.org/src/JMCNAMARA/Spreadsheet-WriteExcel-2.40/examples/write_handler2.pl>
7117
7118 Example: write_handler3.pl
7119 Example of how to add a user defined data handler to the Spreadsheet::
7120 WriteExcel write() method.
7121
7122 The following example shows how to add a handler for dates in a
7123 specific format.
7124
7125 See write_handler4.pl for a more rigorous example with error handling.
7126
7127 Source code for this example:
7128
7129 #!/usr/bin/perl -w
7130
7131 ###############################################################################
7132 #
7133 # Example of how to add a user defined data handler to the Spreadsheet::
7134 # WriteExcel write() method.
7135 #
7136 # The following example shows how to add a handler for dates in a specific
7137 # format.
7138 #
7139 # See write_handler4.pl for a more rigorous example with error handling.
7140 #
7141 # reverse('(c)'), September 2004, John McNamara, jmcnamara@cpan.org
7142 #
7143
7144 use strict;
7145 use Spreadsheet::WriteExcel;
7146
7147
7148 my $workbook = Spreadsheet::WriteExcel->new("write_handler3.xls");
7149 my $worksheet = $workbook->add_worksheet();
7150 my $date_format = $workbook->add_format(num_format => 'dd/mm/yy');
7151
7152
7153 ###############################################################################
7154 #
7155 # Add a handler to match dates in the following format: d/m/yyyy
7156 #
7157 # The day and month can be single or double digits.
7158 #
7159 $worksheet->add_write_handler(qr[^\d{1,2}/\d{1,2}/\d{4}$], \&write_my_date);
7160
7161
7162 ###############################################################################
7163 #
7164 # The following function processes the data when a match is found.
7165 # See write_handler4.pl for a more rigorous example with error handling.
7166 #
7167 sub write_my_date {
7168
7169 my $worksheet = shift;
7170 my @args = @_;
7171
7172 my $token = $args[2];
7173 $token =~ qr[^(\d{1,2})/(\d{1,2})/(\d{4})$];
7174
7175 # Change to the date format required by write_date_time().
7176 my $date = sprintf "%4d-%02d-%02dT", $3, $2, $1;
7177
7178 $args[2] = $date;
7179
7180 return $worksheet->write_date_time(@args);
7181 }
7182
7183
7184 # Write some dates in the user defined format
7185 $worksheet->write('A1', '22/12/2004', $date_format);
7186 $worksheet->write('A2', '1/1/1995', $date_format);
7187 $worksheet->write('A3', '01/01/1995', $date_format);
7188
7189
7190
7191 __END__
7192
7193 Download this example:
7194 <http://cpansearch.perl.org/src/JMCNAMARA/Spreadsheet-WriteExcel-2.40/examples/write_handler3.pl>
7195
7196 Example: write_handler4.pl
7197 Example of how to add a user defined data handler to the Spreadsheet::
7198 WriteExcel write() method.
7199
7200 The following example shows how to add a handler for dates in a
7201 specific format.
7202
7203 This is a more rigorous version of write_handler3.pl.
7204
7205 Source code for this example:
7206
7207 #!/usr/bin/perl -w
7208
7209 ###############################################################################
7210 #
7211 # Example of how to add a user defined data handler to the Spreadsheet::
7212 # WriteExcel write() method.
7213 #
7214 # The following example shows how to add a handler for dates in a specific
7215 # format.
7216 #
7217 # This is a more rigorous version of write_handler3.pl.
7218 #
7219 # reverse('(c)'), September 2004, John McNamara, jmcnamara@cpan.org
7220 #
7221
7222 use strict;
7223 use Spreadsheet::WriteExcel;
7224
7225
7226 my $workbook = Spreadsheet::WriteExcel->new("write_handler4.xls");
7227 my $worksheet = $workbook->add_worksheet();
7228 my $date_format = $workbook->add_format(num_format => 'dd/mm/yy');
7229
7230
7231 ###############################################################################
7232 #
7233 # Add a handler to match dates in the following formats: d/m/yy, d/m/yyyy
7234 #
7235 # The day and month can be single or double digits and the year can be 2 or 4
7236 # digits.
7237 #
7238 $worksheet->add_write_handler(qr[^\d{1,2}/\d{1,2}/\d{2,4}$], \&write_my_date);
7239
7240
7241 ###############################################################################
7242 #
7243 # The following function processes the data when a match is found.
7244 #
7245 sub write_my_date {
7246
7247 my $worksheet = shift;
7248 my @args = @_;
7249
7250 my $token = $args[2];
7251
7252 if ($token =~ qr[^(\d{1,2})/(\d{1,2})/(\d{2,4})$]) {
7253
7254 my $day = $1;
7255 my $mon = $2;
7256 my $year = $3;
7257
7258 # Use a window for 2 digit dates. This will keep some ragged Perl
7259 # programmer employed in thirty years time. :-)
7260 if (length $year == 2) {
7261 if ($year < 50) {
7262 $year += 2000;
7263 }
7264 else {
7265 $year += 1900;
7266 }
7267 }
7268
7269 my $date = sprintf "%4d-%02d-%02dT", $year, $mon, $day;
7270
7271 # Convert the ISO ISO8601 style string to an Excel date
7272 $date = $worksheet->convert_date_time($date);
7273
7274 if (defined $date) {
7275 # Date was valid
7276 $args[2] = $date;
7277 return $worksheet->write_number(@args);
7278 }
7279 else {
7280 # Not a valid date therefore write as a string
7281 return $worksheet->write_string(@args);
7282 }
7283 }
7284 else {
7285 # Shouldn't happen if the same match is used in the re and sub.
7286 return undef;
7287 }
7288 }
7289
7290
7291 # Write some dates in the user defined format
7292 $worksheet->write('A1', '22/12/2004', $date_format);
7293 $worksheet->write('A2', '22/12/04', $date_format);
7294 $worksheet->write('A3', '2/12/04', $date_format);
7295 $worksheet->write('A4', '2/5/04', $date_format);
7296 $worksheet->write('A5', '2/5/95', $date_format);
7297 $worksheet->write('A6', '2/5/1995', $date_format);
7298
7299 # Some erroneous dates
7300 $worksheet->write('A8', '2/5/1895', $date_format); # Date out of Excel range
7301 $worksheet->write('A9', '29/2/2003', $date_format); # Invalid leap day
7302 $worksheet->write('A10','50/50/50', $date_format); # Matches but isn't a date
7303
7304
7305 __END__
7306
7307 Download this example:
7308 <http://cpansearch.perl.org/src/JMCNAMARA/Spreadsheet-WriteExcel-2.40/examples/write_handler4.pl>
7309
7310 Example: write_to_scalar.pl
7311 An example of writing an Excel file to a Perl scalar using
7312 Spreadsheet:: WriteExcel and the new features of perl 5.8.
7313
7314 For an examples of how to write to a scalar in versions prior to perl
7315 5.8 see the filehandle.pl program and IO:Scalar.
7316
7317 #!/usr/bin/perl -w
7318
7319 ##############################################################################
7320 #
7321 # An example of writing an Excel file to a Perl scalar using Spreadsheet::
7322 # WriteExcel and the new features of perl 5.8.
7323 #
7324 # For an examples of how to write to a scalar in versions prior to perl 5.8
7325 # see the filehandle.pl program and IO:Scalar.
7326 #
7327 # reverse('(c)'), September 2004, John McNamara, jmcnamara@cpan.org
7328 #
7329
7330 use strict;
7331 use Spreadsheet::WriteExcel;
7332
7333 require 5.008;
7334
7335
7336 # Use perl 5.8's feature of using a scalar as a filehandle.
7337 my $fh;
7338 my $str = '';
7339 open $fh, '>', \$str or die "Failed to open filehandle: $!";
7340
7341
7342 # Or replace the previous three lines with this:
7343 # open my $fh, '>', \my $str or die "Failed to open filehandle: $!";
7344
7345
7346 # Spreadsheet::WriteExce accepts filehandle as well as file names.
7347 my $workbook = Spreadsheet::WriteExcel->new($fh);
7348 my $worksheet = $workbook->add_worksheet();
7349
7350 $worksheet->write(0, 0, "Hi Excel!");
7351
7352 $workbook->close();
7353
7354
7355 # The Excel file in now in $str. Remember to binmode() the output
7356 # filehandle before printing it.
7357 binmode STDOUT;
7358 print $str;
7359
7360
7361 __END__
7362
7363 Download this example:
7364 <http://cpansearch.perl.org/src/JMCNAMARA/Spreadsheet-WriteExcel-2.40/examples/write_to_scalar.pl>
7365
7366 Example: unicode_utf16.pl
7367 A simple example of writing some Unicode text with
7368 Spreadsheet::WriteExcel.
7369
7370 This example shows UTF16 encoding. With perl 5.8 it is also possible to
7371 use utf8 without modification.
7372
7373 Source code for this example:
7374
7375 #!/usr/bin/perl -w
7376
7377 ##############################################################################
7378 #
7379 # A simple example of writing some Unicode text with Spreadsheet::WriteExcel.
7380 #
7381 # This example shows UTF16 encoding. With perl 5.8 it is also possible to use
7382 # utf8 without modification.
7383 #
7384 # reverse('(c)'), May 2004, John McNamara, jmcnamara@cpan.org
7385 #
7386
7387
7388 use strict;
7389 use Spreadsheet::WriteExcel;
7390
7391
7392 my $workbook = Spreadsheet::WriteExcel->new('unicode_utf16.xls');
7393 my $worksheet = $workbook->add_worksheet();
7394
7395
7396 # Write the Unicode smiley face (with increased font for legibility)
7397 my $smiley = pack "n", 0x263a;
7398 my $big_font = $workbook->add_format(size => 40);
7399
7400 $worksheet->write_utf16be_string('A3', $smiley, $big_font);
7401
7402
7403 # Write a phrase in Cyrillic
7404 my $uni_str = pack "H*", "042d0442043e002004440440043004370430002004".
7405 "3d043000200440044304410441043a043e043c0021";
7406
7407 $worksheet->write_utf16be_string('A5', $uni_str);
7408
7409
7410 $worksheet->write_utf16be_string('A7', pack "H*", "0074006500730074");
7411
7412
7413
7414
7415
7416 __END__
7417
7418 Download this example:
7419 <http://cpansearch.perl.org/src/JMCNAMARA/Spreadsheet-WriteExcel-2.40/examples/unicode_utf16.pl>
7420
7421 Example: unicode_utf16_japan.pl
7422 A simple example of writing some Unicode text with
7423 Spreadsheet::WriteExcel.
7424
7425 This creates an Excel file with the word Nippon in 3 character sets.
7426
7427 This example shows UTF16 encoding. With perl 5.8 it is also possible to
7428 use utf8 without modification.
7429
7430 See also the unicode_2022_jp.pl and unicode_shift_jis.pl examples.
7431
7432 Source code for this example:
7433
7434 #!/usr/bin/perl -w
7435
7436 ##############################################################################
7437 #
7438 # A simple example of writing some Unicode text with Spreadsheet::WriteExcel.
7439 #
7440 # This creates an Excel file with the word Nippon in 3 character sets.
7441 #
7442 # This example shows UTF16 encoding. With perl 5.8 it is also possible to use
7443 # utf8 without modification.
7444 #
7445 # See also the unicode_2022_jp.pl and unicode_shift_jis.pl examples.
7446 #
7447 # reverse('(c)'), May 2004, John McNamara, jmcnamara@cpan.org
7448 #
7449
7450
7451 use strict;
7452 use Spreadsheet::WriteExcel;
7453
7454
7455 my $workbook = Spreadsheet::WriteExcel->new('unicode_utf16_japan.xls');
7456 my $worksheet = $workbook->add_worksheet();
7457
7458
7459 # Set a Unicode font.
7460 my $uni_font = $workbook->add_format(font => 'Arial Unicode MS');
7461
7462
7463 # Create some UTF-16BE Unicode text.
7464 my $kanji = pack 'n*', 0x65e5, 0x672c;
7465 my $katakana = pack 'n*', 0xff86, 0xff8e, 0xff9d;
7466 my $hiragana = pack 'n*', 0x306b, 0x307b, 0x3093;
7467
7468
7469
7470 $worksheet->write_utf16be_string('A1', $kanji, $uni_font);
7471 $worksheet->write_utf16be_string('A2', $katakana, $uni_font);
7472 $worksheet->write_utf16be_string('A3', $hiragana, $uni_font);
7473
7474
7475 $worksheet->write('B1', 'Kanji');
7476 $worksheet->write('B2', 'Katakana');
7477 $worksheet->write('B3', 'Hiragana');
7478
7479
7480 __END__
7481
7482 Download this example:
7483 <http://cpansearch.perl.org/src/JMCNAMARA/Spreadsheet-WriteExcel-2.40/examples/unicode_utf16_japan.pl>
7484
7485 Example: unicode_cyrillic.pl
7486 A simple example of writing some Russian cyrillic text using
7487 Spreadsheet::WriteExcel and perl 5.8.
7488
7489 Source code for this example:
7490
7491 #!/usr/bin/perl -w
7492
7493 ##############################################################################
7494 #
7495 # A simple example of writing some Russian cyrillic text using
7496 # Spreadsheet::WriteExcel and perl 5.8.
7497 #
7498 # reverse('(c)'), March 2005, John McNamara, jmcnamara@cpan.org
7499 #
7500
7501
7502
7503 # Perl 5.8 or later is required for proper utf8 handling. For older perl
7504 # versions you should use UTF16 and the write_utf16be_string() method.
7505 # See the write_utf16be_string section of the Spreadsheet::WriteExcel docs.
7506 #
7507 require 5.008;
7508
7509 use strict;
7510 use Spreadsheet::WriteExcel;
7511
7512
7513 # In this example we generate utf8 strings from character data but in a
7514 # real application we would expect them to come from an external source.
7515 #
7516
7517
7518 # Create a Russian worksheet name in utf8.
7519 my $sheet = pack "U*", 0x0421, 0x0442, 0x0440, 0x0430, 0x043D, 0x0438,
7520 0x0446, 0x0430;
7521
7522
7523 # Create a Russian string.
7524 my $str = pack "U*", 0x0417, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441,
7525 0x0442, 0x0432, 0x0443, 0x0439, 0x0020, 0x041C,
7526 0x0438, 0x0440, 0x0021;
7527
7528
7529
7530 my $workbook = Spreadsheet::WriteExcel->new("unicode_cyrillic.xls");
7531 my $worksheet = $workbook->add_worksheet($sheet . '1');
7532
7533 $worksheet->set_column('A:A', 18);
7534 $worksheet->write('A1', $str);
7535
7536
7537 __END__
7538
7539 Download this example:
7540 <http://cpansearch.perl.org/src/JMCNAMARA/Spreadsheet-WriteExcel-2.40/examples/unicode_cyrillic.pl>
7541
7542 Example: unicode_list.pl
7543 A simple example using Spreadsheet::WriteExcel to display all available
7544 Unicode characters in a font.
7545
7546 Source code for this example:
7547
7548 #!/usr/bin/perl -w
7549
7550 ##############################################################################
7551 #
7552 # A simple example using Spreadsheet::WriteExcel to display all available
7553 # Unicode characters in a font.
7554 #
7555 # reverse('(c)'), May 2004, John McNamara, jmcnamara@cpan.org
7556 #
7557
7558 use strict;
7559 use Spreadsheet::WriteExcel;
7560
7561
7562 my $workbook = Spreadsheet::WriteExcel->new('unicode_list.xls');
7563 my $worksheet = $workbook->add_worksheet();
7564
7565
7566 # Set a Unicode font.
7567 my $uni_font = $workbook->add_format(font => 'Arial Unicode MS');
7568
7569 # Ascii font for labels.
7570 my $courier = $workbook->add_format(font => 'Courier New');
7571
7572
7573 my $char = 0;
7574
7575 # Loop through all 32768 UTF-16BE characters.
7576 #
7577 for my $row (0 .. 2 ** 12 -1) {
7578 for my $col (0 .. 31) {
7579
7580 last if $char == 0xffff;
7581
7582 if ($col % 2 == 0){
7583 $worksheet->write_string($row, $col,
7584 sprintf('0x%04X', $char), $courier);
7585 }
7586 else {
7587 $worksheet->write_utf16be_string($row, $col,
7588 pack('n', $char++), $uni_font);
7589 }
7590 }
7591 }
7592
7593
7594
7595 __END__
7596
7597 Download this example:
7598 <http://cpansearch.perl.org/src/JMCNAMARA/Spreadsheet-WriteExcel-2.40/examples/unicode_list.pl>
7599
7600 Example: unicode_2022_jp.pl
7601 A simple example of converting some Unicode text to an Excel file using
7602 Spreadsheet::WriteExcel and perl 5.8.
7603
7604 This example generates some Japanese from a file with ISO-2022-JP
7605 encoded text.
7606
7607 Source code for this example:
7608
7609 #!/usr/bin/perl -w
7610
7611 ##############################################################################
7612 #
7613 # A simple example of converting some Unicode text to an Excel file using
7614 # Spreadsheet::WriteExcel and perl 5.8.
7615 #
7616 # This example generates some Japanese from a file with ISO-2022-JP
7617 # encoded text.
7618 #
7619 # reverse('(c)'), September 2004, John McNamara, jmcnamara@cpan.org
7620 #
7621
7622
7623
7624 # Perl 5.8 or later is required for proper utf8 handling. For older perl
7625 # versions you should use UTF16 and the write_utf16be_string() method.
7626 # See the write_utf16be_string section of the Spreadsheet::WriteExcel docs.
7627 #
7628 require 5.008;
7629
7630 use strict;
7631 use Spreadsheet::WriteExcel;
7632
7633
7634 my $workbook = Spreadsheet::WriteExcel->new("unicode_2022_jp.xls");
7635 my $worksheet = $workbook->add_worksheet();
7636 $worksheet->set_column('A:A', 50);
7637
7638
7639 my $file = 'unicode_2022_jp.txt';
7640
7641 open FH, '<:encoding(iso-2022-jp)', $file or die "Couldn't open $file: $!\n";
7642
7643 my $row = 0;
7644
7645 while (<FH>) {
7646 next if /^#/; # Ignore the comments in the sample file.
7647 chomp;
7648 $worksheet->write($row++, 0, $_);
7649 }
7650
7651
7652 __END__
7653
7654 Download this example:
7655 <http://cpansearch.perl.org/src/JMCNAMARA/Spreadsheet-WriteExcel-2.40/examples/unicode_2022_jp.pl>
7656
7657 Example: unicode_8859_11.pl
7658 A simple example of converting some Unicode text to an Excel file using
7659 Spreadsheet::WriteExcel and perl 5.8.
7660
7661 This example generates some Thai from a file with ISO-8859-11 encoded
7662 text.
7663
7664 Source code for this example:
7665
7666 #!/usr/bin/perl -w
7667
7668 ##############################################################################
7669 #
7670 # A simple example of converting some Unicode text to an Excel file using
7671 # Spreadsheet::WriteExcel and perl 5.8.
7672 #
7673 # This example generates some Thai from a file with ISO-8859-11 encoded text.
7674 #
7675 #
7676 # reverse('(c)'), September 2004, John McNamara, jmcnamara@cpan.org
7677 #
7678
7679
7680
7681 # Perl 5.8 or later is required for proper utf8 handling. For older perl
7682 # versions you should use UTF16 and the write_utf16be_string() method.
7683 # See the write_utf16be_string section of the Spreadsheet::WriteExcel docs.
7684 #
7685 require 5.008;
7686
7687 use strict;
7688 use Spreadsheet::WriteExcel;
7689
7690
7691 my $workbook = Spreadsheet::WriteExcel->new("unicode_8859_11.xls");
7692 my $worksheet = $workbook->add_worksheet();
7693 $worksheet->set_column('A:A', 50);
7694
7695
7696 my $file = 'unicode_8859_11.txt';
7697
7698 open FH, '<:encoding(iso-8859-11)', $file or die "Couldn't open $file: $!\n";
7699
7700 my $row = 0;
7701
7702 while (<FH>) {
7703 next if /^#/; # Ignore the comments in the sample file.
7704 chomp;
7705 $worksheet->write($row++, 0, $_);
7706 }
7707
7708
7709 __END__
7710
7711 Download this example:
7712 <http://cpansearch.perl.org/src/JMCNAMARA/Spreadsheet-WriteExcel-2.40/examples/unicode_8859_11.pl>
7713
7714 Example: unicode_8859_7.pl
7715 A simple example of converting some Unicode text to an Excel file using
7716 Spreadsheet::WriteExcel and perl 5.8.
7717
7718 This example generates some Greek from a file with ISO-8859-7 encoded
7719 text.
7720
7721 Source code for this example:
7722
7723 #!/usr/bin/perl -w
7724
7725 ##############################################################################
7726 #
7727 # A simple example of converting some Unicode text to an Excel file using
7728 # Spreadsheet::WriteExcel and perl 5.8.
7729 #
7730 # This example generates some Greek from a file with ISO-8859-7 encoded text.
7731 #
7732 #
7733 # reverse('(c)'), September 2004, John McNamara, jmcnamara@cpan.org
7734 #
7735
7736
7737
7738 # Perl 5.8 or later is required for proper utf8 handling. For older perl
7739 # versions you should use UTF16 and the write_utf16be_string() method.
7740 # See the write_utf16be_string section of the Spreadsheet::WriteExcel docs.
7741 #
7742 require 5.008;
7743
7744 use strict;
7745 use Spreadsheet::WriteExcel;
7746
7747
7748 my $workbook = Spreadsheet::WriteExcel->new("unicode_8859_7.xls");
7749 my $worksheet = $workbook->add_worksheet();
7750 $worksheet->set_column('A:A', 50);
7751
7752
7753 my $file = 'unicode_8859_7.txt';
7754
7755 open FH, '<:encoding(iso-8859-7)', $file or die "Couldn't open $file: $!\n";
7756
7757 my $row = 0;
7758
7759 while (<FH>) {
7760 next if /^#/; # Ignore the comments in the sample file.
7761 chomp;
7762 $worksheet->write($row++, 0, $_);
7763 }
7764
7765
7766 __END__
7767
7768 Download this example:
7769 <http://cpansearch.perl.org/src/JMCNAMARA/Spreadsheet-WriteExcel-2.40/examples/unicode_8859_7.pl>
7770
7771 Example: unicode_big5.pl
7772 A simple example of converting some Unicode text to an Excel file using
7773 Spreadsheet::WriteExcel and perl 5.8.
7774
7775 This example generates some Chinese from a file with BIG5 encoded text.
7776
7777 Source code for this example:
7778
7779 #!/usr/bin/perl -w
7780
7781 ##############################################################################
7782 #
7783 # A simple example of converting some Unicode text to an Excel file using
7784 # Spreadsheet::WriteExcel and perl 5.8.
7785 #
7786 # This example generates some Chinese from a file with BIG5 encoded text.
7787 #
7788 #
7789 # reverse('(c)'), September 2004, John McNamara, jmcnamara@cpan.org
7790 #
7791
7792
7793
7794 # Perl 5.8 or later is required for proper utf8 handling. For older perl
7795 # versions you should use UTF16 and the write_utf16be_string() method.
7796 # See the write_utf16be_string section of the Spreadsheet::WriteExcel docs.
7797 #
7798 require 5.008;
7799
7800 use strict;
7801 use Spreadsheet::WriteExcel;
7802
7803
7804 my $workbook = Spreadsheet::WriteExcel->new("unicode_big5.xls");
7805 my $worksheet = $workbook->add_worksheet();
7806 $worksheet->set_column('A:A', 80);
7807
7808
7809 my $file = 'unicode_big5.txt';
7810
7811 open FH, '<:encoding(big5)', $file or die "Couldn't open $file: $!\n";
7812
7813 my $row = 0;
7814
7815 while (<FH>) {
7816 next if /^#/; # Ignore the comments in the sample file.
7817 chomp;
7818 $worksheet->write($row++, 0, $_);
7819 }
7820
7821
7822 __END__
7823
7824 Download this example:
7825 <http://cpansearch.perl.org/src/JMCNAMARA/Spreadsheet-WriteExcel-2.40/examples/unicode_big5.pl>
7826
7827 Example: unicode_cp1251.pl
7828 A simple example of converting some Unicode text to an Excel file using
7829 Spreadsheet::WriteExcel and perl 5.8.
7830
7831 This example generates some Russian from a file with CP1251 encoded
7832 text.
7833
7834 Source code for this example:
7835
7836 #!/usr/bin/perl -w
7837
7838 ##############################################################################
7839 #
7840 # A simple example of converting some Unicode text to an Excel file using
7841 # Spreadsheet::WriteExcel and perl 5.8.
7842 #
7843 # This example generates some Russian from a file with CP1251 encoded text.
7844 #
7845 #
7846 # reverse('(c)'), September 2004, John McNamara, jmcnamara@cpan.org
7847 #
7848
7849
7850
7851 # Perl 5.8 or later is required for proper utf8 handling. For older perl
7852 # versions you should use UTF16 and the write_utf16be_string() method.
7853 # See the write_utf16be_string section of the Spreadsheet::WriteExcel docs.
7854 #
7855 require 5.008;
7856
7857 use strict;
7858 use Spreadsheet::WriteExcel;
7859
7860
7861 my $workbook = Spreadsheet::WriteExcel->new("unicode_cp1251.xls");
7862 my $worksheet = $workbook->add_worksheet();
7863 $worksheet->set_column('A:A', 50);
7864
7865
7866 my $file = 'unicode_cp1251.txt';
7867
7868 open FH, '<:encoding(cp1251)', $file or die "Couldn't open $file: $!\n";
7869
7870 my $row = 0;
7871
7872 while (<FH>) {
7873 next if /^#/; # Ignore the comments in the sample file.
7874 chomp;
7875 $worksheet->write($row++, 0, $_);
7876 }
7877
7878
7879 __END__
7880
7881 Download this example:
7882 <http://cpansearch.perl.org/src/JMCNAMARA/Spreadsheet-WriteExcel-2.40/examples/unicode_cp1251.pl>
7883
7884 Example: unicode_cp1256.pl
7885 A simple example of converting some Unicode text to an Excel file using
7886 Spreadsheet::WriteExcel and perl 5.8.
7887
7888 This example generates some Arabic text from a CP-1256 encoded file.
7889
7890 Source code for this example:
7891
7892 #!/usr/bin/perl -w
7893
7894 ##############################################################################
7895 #
7896 # A simple example of converting some Unicode text to an Excel file using
7897 # Spreadsheet::WriteExcel and perl 5.8.
7898 #
7899 # This example generates some Arabic text from a CP-1256 encoded file.
7900 #
7901 #
7902 # reverse('(c)'), September 2004, John McNamara, jmcnamara@cpan.org
7903 #
7904
7905
7906
7907 # Perl 5.8 or later is required for proper utf8 handling. For older perl
7908 # versions you should use UTF16 and the write_utf16be_string() method.
7909 # See the write_utf16be_string section of the Spreadsheet::WriteExcel docs.
7910 #
7911 require 5.008;
7912
7913 use strict;
7914 use Spreadsheet::WriteExcel;
7915
7916
7917 my $workbook = Spreadsheet::WriteExcel->new("unicode_cp1256.xls");
7918 my $worksheet = $workbook->add_worksheet();
7919 $worksheet->set_column('A:A', 50);
7920
7921
7922 my $file = 'unicode_cp1256.txt';
7923
7924 open FH, '<:encoding(cp1256)', $file or die "Couldn't open $file: $!\n";
7925
7926 my $row = 0;
7927
7928 while (<FH>) {
7929 next if /^#/; # Ignore the comments in the sample file.
7930 chomp;
7931 $worksheet->write($row++, 0, $_);
7932 }
7933
7934
7935 __END__
7936
7937 Download this example:
7938 <http://cpansearch.perl.org/src/JMCNAMARA/Spreadsheet-WriteExcel-2.40/examples/unicode_cp1256.pl>
7939
7940 Example: unicode_koi8r.pl
7941 A simple example of converting some Unicode text to an Excel file using
7942 Spreadsheet::WriteExcel and perl 5.8.
7943
7944 This example generates some Russian from a file with KOI8-R encoded
7945 text.
7946
7947 Source code for this example:
7948
7949 #!/usr/bin/perl -w
7950
7951 ##############################################################################
7952 #
7953 # A simple example of converting some Unicode text to an Excel file using
7954 # Spreadsheet::WriteExcel and perl 5.8.
7955 #
7956 # This example generates some Russian from a file with KOI8-R encoded text.
7957 #
7958 #
7959 # reverse('(c)'), September 2004, John McNamara, jmcnamara@cpan.org
7960 #
7961
7962
7963
7964 # Perl 5.8 or later is required for proper utf8 handling. For older perl
7965 # versions you should use UTF16 and the write_utf16be_string() method.
7966 # See the write_utf16be_string section of the Spreadsheet::WriteExcel docs.
7967 #
7968 require 5.008;
7969
7970 use strict;
7971 use Spreadsheet::WriteExcel;
7972
7973
7974 my $workbook = Spreadsheet::WriteExcel->new("unicode_koi8r.xls");
7975 my $worksheet = $workbook->add_worksheet();
7976 $worksheet->set_column('A:A', 50);
7977
7978
7979 my $file = 'unicode_koi8r.txt';
7980
7981 open FH, '<:encoding(koi8-r)', $file or die "Couldn't open $file: $!\n";
7982
7983 my $row = 0;
7984
7985 while (<FH>) {
7986 next if /^#/; # Ignore the comments in the sample file.
7987 chomp;
7988 $worksheet->write($row++, 0, $_);
7989 }
7990
7991
7992 __END__
7993
7994 Download this example:
7995 <http://cpansearch.perl.org/src/JMCNAMARA/Spreadsheet-WriteExcel-2.40/examples/unicode_koi8r.pl>
7996
7997 Example: unicode_polish_utf8.pl
7998 A simple example of converting some Unicode text to an Excel file using
7999 Spreadsheet::WriteExcel and perl 5.8.
8000
8001 This example generates some Polish from a file with UTF8 encoded text.
8002
8003 Source code for this example:
8004
8005 #!/usr/bin/perl -w
8006
8007 ##############################################################################
8008 #
8009 # A simple example of converting some Unicode text to an Excel file using
8010 # Spreadsheet::WriteExcel and perl 5.8.
8011 #
8012 # This example generates some Polish from a file with UTF8 encoded text.
8013 #
8014 #
8015 # reverse('(c)'), September 2004, John McNamara, jmcnamara@cpan.org
8016 #
8017
8018
8019
8020 # Perl 5.8 or later is required for proper utf8 handling. For older perl
8021 # versions you should use UTF16 and the write_utf16be_string() method.
8022 # See the write_utf16be_string section of the Spreadsheet::WriteExcel docs.
8023 #
8024 require 5.008;
8025
8026 use strict;
8027 use Spreadsheet::WriteExcel;
8028
8029
8030 my $workbook = Spreadsheet::WriteExcel->new("unicode_polish_utf8.xls");
8031 my $worksheet = $workbook->add_worksheet();
8032 $worksheet->set_column('A:A', 50);
8033
8034
8035 my $file = 'unicode_polish_utf8.txt';
8036
8037 open FH, '<:encoding(utf8)', $file or die "Couldn't open $file: $!\n";
8038
8039 my $row = 0;
8040
8041 while (<FH>) {
8042 next if /^#/; # Ignore the comments in the sample file.
8043 chomp;
8044 $worksheet->write($row++, 0, $_);
8045 }
8046
8047
8048 __END__
8049
8050 Download this example:
8051 <http://cpansearch.perl.org/src/JMCNAMARA/Spreadsheet-WriteExcel-2.40/examples/unicode_polish_utf8.pl>
8052
8053 Example: unicode_shift_jis.pl
8054 A simple example of converting some Unicode text to an Excel file using
8055 Spreadsheet::WriteExcel and perl 5.8.
8056
8057 This example generates some Japenese text from a file with Shift-JIS
8058 encoded text.
8059
8060 Source code for this example:
8061
8062 #!/usr/bin/perl -w
8063
8064 ##############################################################################
8065 #
8066 # A simple example of converting some Unicode text to an Excel file using
8067 # Spreadsheet::WriteExcel and perl 5.8.
8068 #
8069 # This example generates some Japenese text from a file with Shift-JIS
8070 # encoded text.
8071 #
8072 # reverse('(c)'), September 2004, John McNamara, jmcnamara@cpan.org
8073 #
8074
8075
8076
8077 # Perl 5.8 or later is required for proper utf8 handling. For older perl
8078 # versions you should use UTF16 and the write_utf16be_string() method.
8079 # See the write_utf16be_string section of the Spreadsheet::WriteExcel docs.
8080 #
8081 require 5.008;
8082
8083 use strict;
8084 use Spreadsheet::WriteExcel;
8085
8086
8087 my $workbook = Spreadsheet::WriteExcel->new("unicode_shift_jis.xls");
8088 my $worksheet = $workbook->add_worksheet();
8089 $worksheet->set_column('A:A', 50);
8090
8091
8092 my $file = 'unicode_shift_jis.txt';
8093
8094 open FH, '<:encoding(shiftjis)', $file or die "Couldn't open $file: $!\n";
8095
8096 my $row = 0;
8097
8098 while (<FH>) {
8099 next if /^#/; # Ignore the comments in the sample file.
8100 chomp;
8101 $worksheet->write($row++, 0, $_);
8102 }
8103
8104
8105 __END__
8106
8107 Download this example:
8108 <http://cpansearch.perl.org/src/JMCNAMARA/Spreadsheet-WriteExcel-2.40/examples/unicode_shift_jis.pl>
8109
8110 Example: csv2xls.pl
8111 Example of how to use the WriteExcel module
8112
8113 Simple program to convert a CSV comma-separated value file to an Excel
8114 file. This is more or less an non-op since Excel can read CSV files.
8115 The program uses Text::CSV_XS to parse the CSV.
8116
8117 Usage: csv2xls.pl file.csv newfile.xls
8118
8119 NOTE: This is only a simple conversion utility for illustrative
8120 purposes. For converting a CSV or Tab separated or any other type of
8121 delimited text file to Excel I recommend the more rigorous csv2xls
8122 program that is part of H.Merijn Brand's Text::CSV_XS module distro.
8123
8124 See the examples/csv2xls link here:
8125 <http://search.cpan.org/~hmbrand/Text-CSV_XS/MANIFEST>
8126
8127 #!/usr/bin/perl -w
8128
8129 ###############################################################################
8130 #
8131 # Example of how to use the WriteExcel module
8132 #
8133 # Simple program to convert a CSV comma-separated value file to an Excel file.
8134 # This is more or less an non-op since Excel can read CSV files.
8135 # The program uses Text::CSV_XS to parse the CSV.
8136 #
8137 # Usage: csv2xls.pl file.csv newfile.xls
8138 #
8139 #
8140 # NOTE: This is only a simple conversion utility for illustrative purposes.
8141 # For converting a CSV or Tab separated or any other type of delimited
8142 # text file to Excel I recommend the more rigorous csv2xls program that is
8143 # part of H.Merijn Brand's Text::CSV_XS module distro.
8144 #
8145 # See the examples/csv2xls link here:
8146 # L<http://search.cpan.org/~hmbrand/Text-CSV_XS/MANIFEST>
8147 #
8148 # reverse('(c)'), March 2001, John McNamara, jmcnamara@cpan.org
8149 #
8150
8151 use strict;
8152 use Spreadsheet::WriteExcel;
8153 use Text::CSV_XS;
8154
8155 # Check for valid number of arguments
8156 if (($#ARGV < 1) || ($#ARGV > 2)) {
8157 die("Usage: csv2xls csvfile.txt newfile.xls\n");
8158 };
8159
8160 # Open the Comma Separated Variable file
8161 open (CSVFILE, $ARGV[0]) or die "$ARGV[0]: $!";
8162
8163 # Create a new Excel workbook
8164 my $workbook = Spreadsheet::WriteExcel->new($ARGV[1]);
8165 my $worksheet = $workbook->add_worksheet();
8166
8167 # Create a new CSV parsing object
8168 my $csv = Text::CSV_XS->new;
8169
8170 # Row and column are zero indexed
8171 my $row = 0;
8172
8173
8174 while (<CSVFILE>) {
8175 if ($csv->parse($_)) {
8176 my @Fld = $csv->fields;
8177
8178 my $col = 0;
8179 foreach my $token (@Fld) {
8180 $worksheet->write($row, $col, $token);
8181 $col++;
8182 }
8183 $row++;
8184 }
8185 else {
8186 my $err = $csv->error_input;
8187 print "Text::CSV_XS parse() failed on argument: ", $err, "\n";
8188 }
8189 }
8190
8191 Download this example:
8192 <http://cpansearch.perl.org/src/JMCNAMARA/Spreadsheet-WriteExcel-2.40/examples/csv2xls.pl>
8193
8194 Example: tab2xls.pl
8195 Example of how to use the WriteExcel module
8196
8197 The following converts a tab separated file into an Excel file
8198
8199 Usage: tab2xls.pl tabfile.txt newfile.xls
8200
8201 NOTE: This is only a simple conversion utility for illustrative
8202 purposes. For converting a CSV or Tab separated or any other type of
8203 delimited text file to Excel I recommend the more rigorous csv2xls
8204 program that is part of H.Merijn Brand's Text::CSV_XS module distro.
8205
8206 See the examples/csv2xls link here:
8207 <http://search.cpan.org/~hmbrand/Text-CSV_XS/MANIFEST>
8208
8209 #!/usr/bin/perl -w
8210
8211 ###############################################################################
8212 #
8213 # Example of how to use the WriteExcel module
8214 #
8215 # The following converts a tab separated file into an Excel file
8216 #
8217 # Usage: tab2xls.pl tabfile.txt newfile.xls
8218 #
8219 #
8220 # NOTE: This is only a simple conversion utility for illustrative purposes.
8221 # For converting a CSV or Tab separated or any other type of delimited
8222 # text file to Excel I recommend the more rigorous csv2xls program that is
8223 # part of H.Merijn Brand's Text::CSV_XS module distro.
8224 #
8225 # See the examples/csv2xls link here:
8226 # L<http://search.cpan.org/~hmbrand/Text-CSV_XS/MANIFEST>
8227 #
8228 # reverse('(c)'), March 2001, John McNamara, jmcnamara@cpan.org
8229 #
8230
8231
8232 use strict;
8233 use Spreadsheet::WriteExcel;
8234
8235
8236 # Check for valid number of arguments
8237 if (($#ARGV < 1) || ($#ARGV > 2)) {
8238 die("Usage: tab2xls tabfile.txt newfile.xls\n");
8239 };
8240
8241
8242 # Open the tab delimited file
8243 open (TABFILE, $ARGV[0]) or die "$ARGV[0]: $!";
8244
8245
8246 # Create a new Excel workbook
8247 my $workbook = Spreadsheet::WriteExcel->new($ARGV[1]);
8248 my $worksheet = $workbook->add_worksheet();
8249
8250 # Row and column are zero indexed
8251 my $row = 0;
8252
8253 while (<TABFILE>) {
8254 chomp;
8255 # Split on single tab
8256 my @Fld = split('\t', $_);
8257
8258 my $col = 0;
8259 foreach my $token (@Fld) {
8260 $worksheet->write($row, $col, $token);
8261 $col++;
8262 }
8263 $row++;
8264 }
8265
8266 Download this example:
8267 <http://cpansearch.perl.org/src/JMCNAMARA/Spreadsheet-WriteExcel-2.40/examples/tab2xls.pl>
8268
8269 Example: datecalc1.pl
8270 NOTE: An easier way of writing dates and times is to use the newer
8271 write_date_time() Worksheet method. See the date_time.pl example.
8272
8273 Demonstration of writing date/time cells to Excel spreadsheets, using
8274 UNIX/Perl time as source of date/time.
8275
8276 UNIX/Perl time is the time since the Epoch (00:00:00 GMT, 1 Jan 1970)
8277 measured in seconds.
8278
8279 An Excel file can use exactly one of two different date/time systems.
8280 In these systems, a floating point number represents the number of days
8281 (and fractional parts of the day) since a start point. The floating
8282 point number is referred to as a 'serial'.
8283
8284 The two systems ('1900' and '1904') use different starting points:
8285
8286 '1900'; '1.00' is 1 Jan 1900 BUT 1900 is erroneously regarded as
8287 a leap year - see:
8288 http://support.microsoft.com/support/kb/articles/Q181/3/70.asp
8289 for the excuse^H^H^H^H^H^Hreason.
8290 '1904'; '1.00' is 2 Jan 1904.
8291
8292 The '1904' system is the default for Apple Macs. Windows versions of
8293 Excel have the option to use the '1904' system.
8294
8295 Note that Visual Basic's "DateSerial" function does NOT erroneously
8296 regard 1900 as a leap year, and thus its serials do not agree with the
8297 1900 serials of Excel for dates before 1 Mar 1900.
8298
8299 Note that StarOffice (at least at version 5.2) does NOT erroneously
8300 regard 1900 as a leap year, and thus its serials do not agree with the
8301 1900 serials of Excel for dates before 1 Mar 1900.
8302
8303 #!/usr/bin/perl -w
8304
8305
8306 ######################################################################
8307 #
8308 # NOTE: An easier way of writing dates and times is to use the newer
8309 # write_date_time() Worksheet method. See the date_time.pl example.
8310 #
8311 ######################################################################
8312 #
8313 # Demonstration of writing date/time cells to Excel spreadsheets,
8314 # using UNIX/Perl time as source of date/time.
8315 #
8316 ######################################################################
8317 #
8318 # UNIX/Perl time is the time since the Epoch (00:00:00 GMT, 1 Jan 1970)
8319 # measured in seconds.
8320 #
8321 # An Excel file can use exactly one of two different date/time systems.
8322 # In these systems, a floating point number represents the number of days
8323 # (and fractional parts of the day) since a start point. The floating point
8324 # number is referred to as a 'serial'.
8325 #
8326 # The two systems ('1900' and '1904') use different starting points:
8327 #
8328 # '1900'; '1.00' is 1 Jan 1900 BUT 1900 is erroneously regarded as
8329 # a leap year - see:
8330 # http://support.microsoft.com/support/kb/articles/Q181/3/70.asp
8331 # for the excuse^H^H^H^H^H^Hreason.
8332 # '1904'; '1.00' is 2 Jan 1904.
8333 #
8334 # The '1904' system is the default for Apple Macs. Windows versions of
8335 # Excel have the option to use the '1904' system.
8336 #
8337 # Note that Visual Basic's "DateSerial" function does NOT erroneously
8338 # regard 1900 as a leap year, and thus its serials do not agree with
8339 # the 1900 serials of Excel for dates before 1 Mar 1900.
8340 #
8341 # Note that StarOffice (at least at version 5.2) does NOT erroneously
8342 # regard 1900 as a leap year, and thus its serials do not agree with
8343 # the 1900 serials of Excel for dates before 1 Mar 1900.
8344 #
8345
8346 # Copyright 2000, Andrew Benham, adsb@bigfoot.com
8347 #
8348
8349 ######################################################################
8350 #
8351 # Calculation description
8352 # =======================
8353 #
8354 # 1900 system
8355 # -----------
8356 # Unix time is '0' at 00:00:00 GMT 1 Jan 1970, i.e. 70 years after 1 Jan 1900.
8357 # Of those 70 years, 17 (1904,08,12,16,20,24,28,32,36,40,44,48,52,56,60,64,68)
8358 # were leap years with an extra day.
8359 # Thus there were 17 + 70*365 days = 25567 days between 1 Jan 1900 and
8360 # 1 Jan 1970.
8361 # In the 1900 system, '1' is 1 Jan 1900, but as 1900 was not a leap year
8362 # 1 Jan 1900 should really be '2', so 1 Jan 1970 is '25569'.
8363 #
8364 # 1904 system
8365 # -----------
8366 # Unix time is '0' at 00:00:00 GMT 1 Jan 1970, i.e. 66 years after 1 Jan 1904.
8367 # Of those 66 years, 17 (1904,08,12,16,20,24,28,32,36,40,44,48,52,56,60,64,68)
8368 # were leap years with an extra day.
8369 # Thus there were 17 + 66*365 days = 24107 days between 1 Jan 1904 and
8370 # 1 Jan 1970.
8371 # In the 1904 system, 2 Jan 1904 being '1', 1 Jan 1970 is '24107'.
8372 #
8373 ######################################################################
8374 #
8375 # Copyright (c) 2000, Andrew Benham.
8376 # This program is free software. It may be used, redistributed and/or
8377 # modified under the same terms as Perl itself.
8378 #
8379 # Andrew Benham, adsb@bigfoot.com
8380 # London, United Kingdom
8381 # 11 Nov 2000
8382 #
8383 ######################################################################
8384
8385
8386 use strict;
8387 use Spreadsheet::WriteExcel;
8388
8389 use Time::Local;
8390
8391 use vars qw/$DATE_SYSTEM/;
8392
8393 # Use 1900 date system on all platforms other than Apple Mac (for which
8394 # use 1904 date system).
8395 $DATE_SYSTEM = ($^O eq 'MacOS') ? 1 : 0;
8396
8397 my $workbook = Spreadsheet::WriteExcel->new("dates.xls");
8398 my $worksheet = $workbook->add_worksheet();
8399
8400 my $format_date = $workbook->add_format();
8401 $format_date->set_num_format('d mmmm yyy');
8402
8403 $worksheet->set_column(0,1,21);
8404
8405 $worksheet->write_string (0,0,"The epoch (GMT)");
8406 $worksheet->write_number (0,1,&calc_serial(0,1),0x16);
8407
8408 $worksheet->write_string (1,0,"The epoch (localtime)");
8409 $worksheet->write_number (1,1,&calc_serial(0,0),0x16);
8410
8411 $worksheet->write_string (2,0,"Today");
8412 $worksheet->write_number (2,1,&calc_serial(),$format_date);
8413
8414 my $christmas2000 = timelocal(0,0,0,25,11,100);
8415 $worksheet->write_string (3,0,"Christmas 2000");
8416 $worksheet->write_number (3,1,&calc_serial($christmas2000),$format_date);
8417
8418 $workbook->close();
8419
8420 #-----------------------------------------------------------
8421 # calc_serial()
8422 #
8423 # Called with (up to) 2 parameters.
8424 # 1. Unix timestamp. If omitted, uses current time.
8425 # 2. GMT flag. Set to '1' to return serial in GMT.
8426 # If omitted, returns serial in appropriate timezone.
8427 #
8428 # Returns date/time serial according to $DATE_SYSTEM selected
8429 #-----------------------------------------------------------
8430 sub calc_serial {
8431 my $time = (defined $_[0]) ? $_[0] : time();
8432 my $gmtflag = (defined $_[1]) ? $_[1] : 0;
8433
8434 # Divide timestamp by number of seconds in a day.
8435 # This gives a date serial with '0' on 1 Jan 1970.
8436 my $serial = $time / 86400;
8437
8438 # Adjust the date serial by the offset appropriate to the
8439 # currently selected system (1900/1904).
8440 if ($DATE_SYSTEM == 0) { # use 1900 system
8441 $serial += 25569;
8442 } else { # use 1904 system
8443 $serial += 24107;
8444 }
8445
8446 unless ($gmtflag) {
8447 # Now have a 'raw' serial with the right offset. But this
8448 # gives a serial in GMT, which is false unless the timezone
8449 # is GMT. We need to adjust the serial by the appropriate
8450 # timezone offset.
8451 # Calculate the appropriate timezone offset by seeing what
8452 # the differences between localtime and gmtime for the given
8453 # time are.
8454
8455 my @gmtime = gmtime($time);
8456 my @ltime = localtime($time);
8457
8458 # For the first 7 elements of the two arrays, adjust the
8459 # date serial where the elements differ.
8460 for (0 .. 6) {
8461 my $diff = $ltime[$_] - $gmtime[$_];
8462 if ($diff) {
8463 $serial += _adjustment($diff,$_);
8464 }
8465 }
8466 }
8467
8468 # Perpetuate the error that 1900 was a leap year by decrementing
8469 # the serial if we're using the 1900 system and the date is prior to
8470 # 1 Mar 1900. This has the effect of making serial value '60'
8471 # 29 Feb 1900.
8472
8473 # This fix only has any effect if UNIX/Perl time on the platform
8474 # can represent 1900. Many can't.
8475
8476 unless ($DATE_SYSTEM) {
8477 $serial-- if ($serial < 61); # '61' is 1 Mar 1900
8478 }
8479 return $serial;
8480 }
8481
8482 sub _adjustment {
8483 # Based on the difference in the localtime/gmtime array elements
8484 # number, return the adjustment required to the serial.
8485
8486 # We only look at some elements of the localtime/gmtime arrays:
8487 # seconds unlikely to be different as all known timezones
8488 # have an offset of integral multiples of 15 minutes,
8489 # but it's easy to do.
8490 # minutes will be different for timezone offsets which are
8491 # not an exact number of hours.
8492 # hours very likely to be different.
8493 # weekday will differ when localtime/gmtime difference
8494 # straddles midnight.
8495 #
8496 # Assume that difference between localtime and gmtime is less than
8497 # 5 days, then don't have to do maths for day of month, month number,
8498 # year number, etc...
8499
8500 my ($delta,$element) = @_;
8501 my $adjust = 0;
8502
8503 if ($element == 0) { # Seconds
8504 $adjust = $delta/86400; # 60 * 60 * 24
8505 } elsif ($element == 1) { # Minutes
8506 $adjust = $delta/1440; # 60 * 24
8507 } elsif ($element == 2) { # Hours
8508 $adjust = $delta/24; # 24
8509 } elsif ($element == 6) { # Day of week number
8510 # Catch difference straddling Sat/Sun in either direction
8511 $delta += 7 if ($delta < -4);
8512 $delta -= 7 if ($delta > 4);
8513
8514 $adjust = $delta;
8515 }
8516 return $adjust;
8517 }
8518
8519 Download this example:
8520 <http://cpansearch.perl.org/src/JMCNAMARA/Spreadsheet-WriteExcel-2.40/examples/datecalc1.pl>
8521
8522 Example: datecalc2.pl
8523 Example of how to using the Date::Calc module to calculate Excel dates.
8524
8525 NOTE: An easier way of writing dates and times is to use the newer
8526 write_date_time() Worksheet method. See the date_time.pl example.
8527
8528 #!/usr/bin/perl -w
8529
8530 ###############################################################################
8531 #
8532 # Example of how to using the Date::Calc module to calculate Excel dates.
8533 #
8534 # NOTE: An easier way of writing dates and times is to use the newer
8535 # write_date_time() Worksheet method. See the date_time.pl example.
8536 #
8537 # reverse('(c)'), June 2001, John McNamara, jmcnamara@cpan.org
8538 #
8539
8540 use strict;
8541 use Spreadsheet::WriteExcel;
8542 use Date::Calc qw(Delta_DHMS); # You may need to install this module.
8543
8544
8545 # Create a new workbook and add a worksheet
8546 my $workbook = Spreadsheet::WriteExcel->new("excel_date2.xls");
8547 my $worksheet = $workbook->add_worksheet();
8548
8549 # Expand the first column so that the date is visible.
8550 $worksheet->set_column("A:A", 25);
8551
8552
8553 # Add a format for the date
8554 my $format = $workbook->add_format();
8555 $format->set_num_format('d mmmm yyy HH:MM:SS');
8556
8557
8558 my $date;
8559
8560 # Write some dates and times
8561 $date = excel_date(1900, 1, 1);
8562 $worksheet->write("A1", $date, $format);
8563
8564 $date = excel_date(2000, 1, 1);
8565 $worksheet->write("A2", $date, $format);
8566
8567 $date = excel_date(2000, 4, 17, 14, 33, 15);
8568 $worksheet->write("A3", $date, $format);
8569
8570
8571 ###############################################################################
8572 #
8573 # excel_date($years, $months, $days, $hours, $minutes, $seconds)
8574 #
8575 # Create an Excel date in the 1900 format. All of the arguments are optional
8576 # but you should at least add $years.
8577 #
8578 # Corrects for Excel's missing leap day in 1900. See excel_time1.pl for an
8579 # explanation.
8580 #
8581 sub excel_date {
8582
8583 my $years = $_[0] || 1900;
8584 my $months = $_[1] || 1;
8585 my $days = $_[2] || 1;
8586 my $hours = $_[3] || 0;
8587 my $minutes = $_[4] || 0;
8588 my $seconds = $_[5] || 0;
8589
8590 my @date = ($years, $months, $days, $hours, $minutes, $seconds);
8591 my @epoch = (1899, 12, 31, 0, 0, 0);
8592
8593 ($days, $hours, $minutes, $seconds) = Delta_DHMS(@epoch, @date);
8594
8595 my $date = $days + ($hours*3600 +$minutes*60 +$seconds)/(24*60*60);
8596
8597 # Add a day for Excel's missing leap day in 1900
8598 $date++ if ($date > 59);
8599
8600 return $date;
8601 }
8602
8603 ###############################################################################
8604 #
8605 # excel_date($years, $months, $days, $hours, $minutes, $seconds)
8606 #
8607 # Create an Excel date in the 1904 format. All of the arguments are optional
8608 # but you should at least add $years.
8609 #
8610 # You will also need to call $workbook->set_1904() for this format to be valid.
8611 #
8612 sub excel_date_1904 {
8613
8614 my $years = $_[0] || 1900;
8615 my $months = $_[1] || 1;
8616 my $days = $_[2] || 1;
8617 my $hours = $_[3] || 0;
8618 my $minutes = $_[4] || 0;
8619 my $seconds = $_[5] || 0;
8620
8621 my @date = ($years, $months, $days, $hours, $minutes, $seconds);
8622 my @epoch = (1904, 1, 1, 0, 0, 0);
8623
8624 ($days, $hours, $minutes, $seconds) = Delta_DHMS(@epoch, @date);
8625
8626 my $date = $days + ($hours*3600 +$minutes*60 +$seconds)/(24*60*60);
8627
8628 return $date;
8629 }
8630
8631 Download this example:
8632 <http://cpansearch.perl.org/src/JMCNAMARA/Spreadsheet-WriteExcel-2.40/examples/datecalc2.pl>
8633
8634 Example: lecxe.pl
8635 Utility program to convert an Excel file into a Spreadsheet::WriteExcel
8636 program using Win32::OLE
8637
8638 #!/usr/bin/perl -w
8639
8640 #
8641 # Utility program to convert an Excel file into a Spreadsheet::WriteExcel
8642 # program using Win32::OLE
8643 #
8644
8645 #
8646 # lecxe program
8647 # by t0mas@netlords.net
8648 #
8649 # Version 0.01a Initial release (alpha)
8650
8651
8652 # Modules
8653 use strict;
8654 use Win32::OLE;
8655 use Win32::OLE::Const;
8656 use Getopt::Std;
8657
8658
8659 # Vars
8660 use vars qw(%opts);
8661
8662
8663 # Get options
8664 getopts('i:o:v',\%opts);
8665
8666
8667 # Not enough options
8668 exit &usage unless ($opts{i} && $opts{o});
8669
8670
8671 # Create Excel object
8672 my $Excel = new Win32::OLE("Excel.Application","Quit") or
8673 die "Can't start excel: $!";
8674
8675
8676 # Get constants
8677 my $ExcelConst=Win32::OLE::Const->Load("Microsoft Excel");
8678
8679
8680 # Show Excel
8681 $Excel->{Visible} = 1 if ($opts{v});
8682
8683
8684 # Open infile
8685 my $Workbook = $Excel->Workbooks->Open({Filename=>$opts{i}});
8686
8687
8688 # Open outfile
8689 open (OUTFILE,">$opts{o}") or die "Can't open outfile $opts{o}: $!";
8690
8691
8692 # Print header for outfile
8693 print OUTFILE <<'EOH';
8694 #!/usr/bin/perl -w
8695
8696
8697 use strict;
8698 use Spreadsheet::WriteExcel;
8699
8700
8701 use vars qw($workbook %worksheets %formats);
8702
8703
8704 $workbook = Spreadsheet::WriteExcel->new("_change_me_.xls");
8705
8706
8707 EOH
8708
8709
8710 # Loop all sheets
8711 foreach my $sheetnum (1..$Excel->Workbooks(1)->Worksheets->Count) {
8712
8713
8714 # Format sheet
8715 my $name=$Excel->Workbooks(1)->Worksheets($sheetnum)->Name;
8716 print "Sheet $name\n" if ($opts{v});
8717 print OUTFILE "# Sheet $name\n";
8718 print OUTFILE "\$worksheets{'$name'} = \$workbook->add_worksheet('$name');\n";
8719
8720
8721 # Get usedrange of cells in worksheet
8722 my $usedrange=$Excel->Workbooks(1)->Worksheets($sheetnum)->UsedRange;
8723
8724
8725 # Loop all columns in used range
8726 foreach my $j (1..$usedrange->Columns->Count){
8727
8728
8729 # Format column
8730 print "Col $j\n" if ($opts{v});
8731 my ($colwidth);
8732 $colwidth=$usedrange->Columns($j)->ColumnWidth;
8733 print OUTFILE "# Column $j\n";
8734 print OUTFILE "\$worksheets{'$name'}->set_column(".($j-1).",".($j-1).
8735 ", $colwidth);\n";
8736
8737
8738 # Loop all rows in used range
8739 foreach my $i (1..$usedrange->Rows->Count){
8740
8741
8742 # Format row
8743 print "Row $i\n" if ($opts{v});
8744 print OUTFILE "# Row $i\n";
8745 do {
8746 my ($rowheight);
8747 $rowheight=$usedrange->Rows($i)->RowHeight;
8748 print OUTFILE "\$worksheets{'$name'}->set_row(".($i-1).
8749 ", $rowheight);\n";
8750 } if ($j==1);
8751
8752
8753 # Start creating cell format
8754 my $fname="\$formats{'".$name.'R'.$i.'C'.$j."'}";
8755 my $format="$fname=\$workbook->add_format();\n";
8756 my $print_format=0;
8757
8758 # Check for borders
8759 my @bfnames=qw(left right top bottom);
8760 foreach my $k (1..$usedrange->Cells($i,$j)->Borders->Count) {
8761 my $lstyle=$usedrange->Cells($i,$j)->Borders($k)->LineStyle;
8762 if ($lstyle > 0) {
8763 $format.=$fname."->set_".$bfnames[$k-1]."($lstyle);\n";
8764 $print_format=1;
8765 }
8766 }
8767
8768
8769 # Check for font
8770 my ($fontattr,$prop,$func,%fontsets,$fontColor);
8771 %fontsets=(Name=>'set_font',
8772 Size=>'set_size');
8773 while (($prop,$func) = each %fontsets) {
8774 $fontattr=$usedrange->Cells($i,$j)->Font->$prop;
8775 if ($fontattr ne "") {
8776 $format.=$fname."->$func('$fontattr');\n";
8777 $print_format=1;
8778 }
8779
8780
8781 }
8782 %fontsets=(Bold=>'set_bold(1)',
8783 Italic=>'set_italic(1)',
8784 Underline=>'set_underline(1)',
8785 Strikethrough=>'set_strikeout(1)',
8786 Superscript=>'set_script(1)',
8787 Subscript=>'set_script(2)',
8788 OutlineFont=>'set_outline(1)',
8789 Shadow=>'set_shadow(1)');
8790 while (($prop,$func) = each %fontsets) {
8791 $fontattr=$usedrange->Cells($i,$j)->Font->$prop;
8792 if ($fontattr==1) {
8793 $format.=$fname."->$func;\n" ;
8794
8795 $print_format=1;
8796 }
8797 }
8798 $fontColor=$usedrange->Cells($i,$j)->Font->ColorIndex();
8799 if ($fontColor>0&&$fontColor!=$ExcelConst->{xlColorIndexAutomatic}) {
8800 $format.=$fname."->set_color(".($fontColor+7).");\n" ;
8801 $print_format=1;
8802 }
8803
8804
8805
8806 # Check text alignment, merging and wrapping
8807 my ($halign,$valign,$merge,$wrap);
8808 $halign=$usedrange->Cells($i,$j)->HorizontalAlignment;
8809 my %hAligns=($ExcelConst->{xlHAlignCenter}=>"'center'",
8810 $ExcelConst->{xlHAlignJustify}=>"'justify'",
8811 $ExcelConst->{xlHAlignLeft}=>"'left'",
8812 $ExcelConst->{xlHAlignRight}=>"'right'",
8813 $ExcelConst->{xlHAlignFill}=>"'fill'",
8814 $ExcelConst->{xlHAlignCenterAcrossSelection}=>"'merge'");
8815 if ($halign!=$ExcelConst->{xlHAlignGeneral}) {
8816 $format.=$fname."->set_align($hAligns{$halign});\n";
8817 $print_format=1;
8818 }
8819 $valign=$usedrange->Cells($i,$j)->VerticalAlignment;
8820 my %vAligns=($ExcelConst->{xlVAlignBottom}=>"'bottom'",
8821 $ExcelConst->{xlVAlignCenter}=>"'vcenter'",
8822 $ExcelConst->{xlVAlignJustify}=>"'vjustify'",
8823 $ExcelConst->{xlVAlignTop}=>"'top'");
8824 if ($valign) {
8825 $format.=$fname."->set_align($vAligns{$valign});\n";
8826 $print_format=1;
8827 }
8828 $merge=$usedrange->Cells($i,$j)->MergeCells;
8829 if ($merge==1) {
8830 $format.=$fname."->set_merge();\n";
8831
8832 $print_format=1;
8833 }
8834 $wrap=$usedrange->Cells($i,$j)->WrapText;
8835 if ($wrap==1) {
8836 $format.=$fname."->set_text_wrap(1);\n";
8837
8838 $print_format=1;
8839 }
8840
8841
8842 # Check patterns
8843 my ($pattern,%pats);
8844 %pats=(-4142=>0,-4125=>2,-4126=>3,-4124=>4,-4128=>5,-4166=>6,
8845 -4121=>7,-4162=>8);
8846 $pattern=$usedrange->Cells($i,$j)->Interior->Pattern;
8847 if ($pattern&&$pattern!=$ExcelConst->{xlPatternAutomatic}) {
8848 $pattern=$pats{$pattern} if ($pattern<0 && defined $pats{$pattern});
8849 $format.=$fname."->set_pattern($pattern);\n";
8850
8851 # Colors fg/bg
8852 my ($cIndex);
8853 $cIndex=$usedrange->Cells($i,$j)->Interior->PatternColorIndex;
8854 if ($cIndex>0&&$cIndex!=$ExcelConst->{xlColorIndexAutomatic}) {
8855 $format.=$fname."->set_bg_color(".($cIndex+7).");\n";
8856 }
8857 $cIndex=$usedrange->Cells($i,$j)->Interior->ColorIndex;
8858 if ($cIndex>0&&$cIndex!=$ExcelConst->{xlColorIndexAutomatic}) {
8859 $format.=$fname."->set_fg_color(".($cIndex+7).");\n";
8860 }
8861 $print_format=1;
8862 }
8863
8864
8865 # Check for number format
8866 my ($num_format);
8867 $num_format=$usedrange->Cells($i,$j)->NumberFormat;
8868 if ($num_format ne "") {
8869 $format.=$fname."->set_num_format('$num_format');\n";
8870 $print_format=1;
8871 }
8872
8873
8874 # Check for contents (text or formula)
8875 my ($contents);
8876 $contents=$usedrange->Cells($i,$j)->Formula;
8877 $contents=$usedrange->Cells($i,$j)->Text if ($contents eq "");
8878
8879
8880 # Print cell
8881 if ($contents ne "" or $print_format) {
8882 print OUTFILE "# Cell($i,$j)\n";
8883 print OUTFILE $format if ($print_format);
8884 print OUTFILE "\$worksheets{'$name'}->write(".($i-1).",".($j-1).
8885 ",'$contents'";
8886 print OUTFILE ",$fname" if ($print_format);
8887 print OUTFILE ");\n";
8888 }
8889 }
8890 }
8891 }
8892
8893
8894 # Famous last words...
8895 print OUTFILE "\$workbook->close();\n";
8896
8897
8898 # Close outfile
8899 close (OUTFILE) or die "Can't close outfile $opts{o}: $!";
8900
8901
8902 ####################################################################
8903 sub usage {
8904 printf STDERR "usage: $0 [options]\n".
8905 "\tOptions:\n".
8906 "\t\t-v \tverbose mode\n" .
8907 "\t\t-i <name>\tname of input file\n" .
8908 "\t\t-o <name>\tname of output file\n";
8909 }
8910
8911
8912 ####################################################################
8913 sub END {
8914 # Quit excel
8915 do {
8916 $Excel->{DisplayAlerts} = 0;
8917 $Excel->Quit;
8918 } if (defined $Excel);
8919 }
8920
8921
8922 __END__
8923
8924
8925 =head1 NAME
8926
8927
8928 lecxe - A Excel file to Spreadsheet::WriteExcel code converter
8929
8930
8931 =head1 DESCRIPTION
8932
8933
8934 This program takes an MS Excel workbook file as input and from
8935 that file, produces an output file with Perl code that uses the
8936 Spreadsheet::WriteExcel module to reproduce the original
8937 file.
8938
8939
8940 =head1 STUFF
8941
8942
8943 Additional hands-on editing of the output file might be neccecary
8944 as:
8945
8946
8947 * This program always names the file produced by output script
8948 _change_me_.xls
8949
8950
8951 * Users of international Excel versions will have som work to do
8952 on list separators and numeric punctation characters.
8953
8954
8955 =head1 SEE ALSO
8956
8957
8958 L<Win32::OLE>, L<Win32::OLE::Variant>, L<Spreadsheet::WriteExcel>
8959
8960
8961 =head1 BUGS
8962
8963
8964 * Picks wrong color on cells sometimes.
8965
8966
8967 * Probably a few other...
8968
8969
8970 =head1 DISCLAIMER
8971
8972
8973 I do not guarantee B<ANYTHING> with this program. If you use it you
8974 are doing so B<AT YOUR OWN RISK>! I may or may not support this
8975 depending on my time schedule...
8976
8977
8978 =head1 AUTHOR
8979
8980
8981 t0mas@netlords.net
8982
8983
8984 =head1 COPYRIGHT
8985
8986
8987 Copyright 2001, t0mas@netlords.net
8988
8989
8990 This package is free software; you can redistribute it and/or
8991 modify it under the same terms as Perl itself.
8992
8993 Download this example:
8994 <http://cpansearch.perl.org/src/JMCNAMARA/Spreadsheet-WriteExcel-2.40/examples/lecxe.pl>
8995
8996 Example: convertA1.pl
8997 This program contains helper functions to deal with the Excel A1 cell
8998 reference notation.
8999
9000 These functions have been superseded by
9001 Spreadsheet::WriteExcel::Utility.
9002
9003 #!/usr/bin/perl -w
9004
9005 ###############################################################################
9006 #
9007 # This program contains helper functions to deal with the Excel A1 cell
9008 # reference notation.
9009 #
9010 # These functions have been superseded by L<Spreadsheet::WriteExcel::Utility>.
9011 #
9012 # reverse('(c)'), March 2001, John McNamara, jmcnamara@cpan.org
9013 #
9014
9015 use strict;
9016
9017 print "\n";
9018 print "Cell B7 is equivalent to (";
9019 print join " ", cell_to_rowcol('B7');
9020 print ") in row column notation.\n";
9021
9022 print "Cell \$B7 is equivalent to (";
9023 print join " ", cell_to_rowcol('$B7');
9024 print ") in row column notation.\n";
9025
9026 print "Cell B\$7 is equivalent to (";
9027 print join " ", cell_to_rowcol('B$7');
9028 print ") in row column notation.\n";
9029
9030 print "Cell \$B\$7 is equivalent to (";
9031 print join " ", cell_to_rowcol('$B$7');
9032 print ") in row column notation.\n\n";
9033
9034 print "Row and column (1999, 29) are equivalent to ";
9035 print rowcol_to_cell(1999, 29), ".\n";
9036
9037 print "Row and column (1999, 29, 0, 1) are equivalent to ";
9038 print rowcol_to_cell(1999, 29, 0, 1), ".\n\n";
9039
9040 print "The base cell is: Z7\n";
9041 print "Increment the row: ", inc_cell_row('Z7'), "\n";
9042 print "Decrement the row: ", dec_cell_row('Z7'), "\n";
9043 print "Increment the column: ", inc_cell_col('Z7'), "\n";
9044 print "Decrement the column: ", dec_cell_col('Z7'), "\n\n";
9045
9046
9047 ###############################################################################
9048 #
9049 # rowcol_to_cell($row, $col, $row_absolute, $col_absolute)
9050 #
9051 # Convert a zero based row and column reference to a A1 reference. For example
9052 # (0, 2) to C1. $row_absolute, $col_absolute are optional. They are boolean
9053 # values used to indicate if the row or column value is absolute, i.e. if it is
9054 # prefixed by a $ sign: eg. (0, 2, 0, 1) converts to $C1.
9055 #
9056 # Returns: a cell reference string.
9057 #
9058 sub rowcol_to_cell {
9059
9060 my $row = $_[0];
9061 my $col = $_[1];
9062 my $row_abs = $_[2] || 0;
9063 my $col_abs = $_[3] || 0;
9064
9065
9066 if ($row_abs) {
9067 $row_abs = '$'
9068 }
9069 else {
9070 $row_abs = ''
9071 }
9072
9073 if ($col_abs) {
9074 $col_abs = '$'
9075 }
9076 else {
9077 $col_abs = ''
9078 }
9079
9080
9081 my $int = int ($col / 26);
9082 my $frac = $col % 26 +1;
9083
9084 my $chr1 ='';
9085 my $chr2 ='';
9086
9087
9088 if ($frac != 0) {
9089 $chr2 = chr (ord('A') + $frac -1);
9090 }
9091
9092 if ($int > 0) {
9093 $chr1 = chr (ord('A') + $int -1);
9094 }
9095
9096 $row++; # Zero index to 1-index
9097
9098 return $col_abs . $chr1 . $chr2 . $row_abs. $row;
9099 }
9100
9101
9102 ###############################################################################
9103 #
9104 # cell_to_rowcol($cell_ref)
9105 #
9106 # Convert an Excel cell reference in A1 notation to a zero based row and column
9107 # reference; converts C1 to (0, 2, 0, 0).
9108 #
9109 # Returns: row, column, row_is_absolute, column_is_absolute
9110 #
9111 #
9112 sub cell_to_rowcol {
9113
9114 my $cell = shift;
9115
9116 $cell =~ /(\$?)([A-I]?[A-Z])(\$?)(\d+)/;
9117
9118 my $col_abs = $1 eq "" ? 0 : 1;
9119 my $col = $2;
9120 my $row_abs = $3 eq "" ? 0 : 1;
9121 my $row = $4;
9122
9123 # Convert base26 column string to number
9124 # All your Base are belong to us.
9125 my @chars = split //, $col;
9126 my $expn = 0;
9127 $col = 0;
9128
9129 while (@chars) {
9130 my $char = pop(@chars); # LS char first
9131 $col += (ord($char) -ord('A') +1) * (26**$expn);
9132 $expn++;
9133 }
9134
9135 # Convert 1-index to zero-index
9136 $row--;
9137 $col--;
9138
9139 return $row, $col, $row_abs, $col_abs;
9140 }
9141
9142
9143 ###############################################################################
9144 #
9145 # inc_cell_row($cell_ref)
9146 #
9147 # Increments the row number of an Excel cell reference in A1 notation.
9148 # For example C3 to C4
9149 #
9150 # Returns: a cell reference string.
9151 #
9152 sub inc_cell_row {
9153
9154 my $cell = shift;
9155 my ($row, $col, $row_abs, $col_abs) = cell_to_rowcol($cell);
9156
9157 $row++;
9158
9159 return rowcol_to_cell($row, $col, $row_abs, $col_abs);
9160 }
9161
9162
9163 ###############################################################################
9164 #
9165 # dec_cell_row($cell_ref)
9166 #
9167 # Decrements the row number of an Excel cell reference in A1 notation.
9168 # For example C4 to C3
9169 #
9170 # Returns: a cell reference string.
9171 #
9172 sub dec_cell_row {
9173
9174 my $cell = shift;
9175 my ($row, $col, $row_abs, $col_abs) = cell_to_rowcol($cell);
9176
9177 $row--;
9178
9179 return rowcol_to_cell($row, $col, $row_abs, $col_abs);
9180 }
9181
9182
9183 ###############################################################################
9184 #
9185 # inc_cell_col($cell_ref)
9186 #
9187 # Increments the column number of an Excel cell reference in A1 notation.
9188 # For example C3 to D3
9189 #
9190 # Returns: a cell reference string.
9191 #
9192 sub inc_cell_col {
9193
9194 my $cell = shift;
9195 my ($row, $col, $row_abs, $col_abs) = cell_to_rowcol($cell);
9196
9197 $col++;
9198
9199 return rowcol_to_cell($row, $col, $row_abs, $col_abs);
9200 }
9201
9202
9203 ###############################################################################
9204 #
9205 # dec_cell_col($cell_ref)
9206 #
9207 # Decrements the column number of an Excel cell reference in A1 notation.
9208 # For example D3 to C3
9209 #
9210 # Returns: a cell reference string.
9211 #
9212 sub dec_cell_col {
9213
9214 my $cell = shift;
9215 my ($row, $col, $row_abs, $col_abs) = cell_to_rowcol($cell);
9216
9217 $col--;
9218
9219 return rowcol_to_cell($row, $col, $row_abs, $col_abs);
9220 }
9221
9222 Download this example:
9223 <http://cpansearch.perl.org/src/JMCNAMARA/Spreadsheet-WriteExcel-2.40/examples/convertA1.pl>
9224
9225 Example: writeA1.pl
9226 This is an example of how to extend the Spreadsheet::WriteExcel module.
9227
9228 Code is appended to the Spreadsheet::WriteExcel::Worksheet module by
9229 reusing the package name. The new code provides a write() method that
9230 allows you to use Excels A1 style cell references. This is not
9231 particularly useful but it serves as an example of how the module can
9232 be extended without modifying the code directly.
9233
9234 #!/usr/bin/perl -w
9235
9236 ###############################################################################
9237 #
9238 # This is an example of how to extend the Spreadsheet::WriteExcel module.
9239 #
9240 # Code is appended to the Spreadsheet::WriteExcel::Worksheet module by reusing
9241 # the package name. The new code provides a write() method that allows you to
9242 # use Excels A1 style cell references. This is not particularly useful but it
9243 # serves as an example of how the module can be extended without modifying the
9244 # code directly.
9245 #
9246 # reverse('(c)'), March 2001, John McNamara, jmcnamara@cpan.org
9247 #
9248
9249 use strict;
9250 use Spreadsheet::WriteExcel;
9251
9252 # Create a new workbook called simple.xls and add a worksheet
9253 my $workbook = Spreadsheet::WriteExcel->new("writeA1.xls");
9254 my $worksheet = $workbook->add_worksheet();
9255
9256 # Write numbers or text
9257 $worksheet->write (0, 0, "Hello");
9258 $worksheet->writeA1("A3", "A3" );
9259 $worksheet->writeA1("A5", 1.2345 );
9260
9261
9262 ###############################################################################
9263 #
9264 # The following will be appended to the Spreadsheet::WriteExcel::Worksheet
9265 # package.
9266 #
9267
9268 package Spreadsheet::WriteExcel::Worksheet;
9269
9270 ###############################################################################
9271 #
9272 # writeA1($cell, $token, $format)
9273 #
9274 # Convert $cell from Excel A1 notation to $row, $col notation and
9275 # call write() on $token.
9276 #
9277 # Returns: return value of called subroutine or -4 for invalid cell
9278 # reference.
9279 #
9280 sub writeA1 {
9281 my $self = shift;
9282 my $cell = shift;
9283 my $col;
9284 my $row;
9285
9286 if ($cell =~ /([A-z]+)(\d+)/) {
9287 ($row, $col) = _convertA1($2, $1);
9288 $self->write($row, $col, @_);
9289 } else {
9290 return -4;
9291 }
9292 }
9293
9294 ###############################################################################
9295 #
9296 # _convertA1($row, $col)
9297 #
9298 # Convert Excel A1 notation to $row, $col notation. Convert base26 column
9299 # string to a number.
9300 #
9301 sub _convertA1 {
9302 my $row = $_[0];
9303 my $col = $_[1]; # String in AA notation
9304
9305 my @chars = split //, $col;
9306 my $expn = 0;
9307 $col = 0;
9308
9309 while (@chars) {
9310 my $char = uc(pop(@chars)); # LS char first
9311 $col += (ord($char) -ord('A') +1) * (26**$expn);
9312 $expn++;
9313 }
9314
9315 # Convert 1 index to 0 index
9316 $row--;
9317 $col--;
9318
9319 return($row, $col);
9320 }
9321
9322 Download this example:
9323 <http://cpansearch.perl.org/src/JMCNAMARA/Spreadsheet-WriteExcel-2.40/examples/writeA1.pl>
9324
9326 John McNamara jmcnamara@cpan.org
9327
9328 Contributed examples contain the original author's name.
9329
9331 Copyright MM-MMX, John McNamara.
9332
9333 All Rights Reserved. This module is free software. It may be used,
9334 redistributed and/or modified under the same terms as Perl itself.
9335
9336
9337
9338perl v5.34.0 2022-01-2S1preadsheet::WriteExcel::Examples(3)