NAME

Clearbuilt::ExcelErator - Write XLSX files in a Clearbuilt-standard way

VERSION

version 2.0001

SYNOPSIS

use Clearbuilt::ExcelErator;

my %spreadsheet = (
   'title'      => 'Summary',
   'col_widths' => {
      '1-3' => 12
   },
   'rows' => [
      [ { value => 'The Report Title', format => [ font => 'bold' ], nowidth => 1 } ],
      [],
      [
         '',
         { value => 'Qty', format => [ bb => 2, font => 'bold', halign => 'center' ] },
         { value => 'Cost', format => [ bb => 2, font => 'bold', halign => 'center' ] },
         { value => 'Total Cost', format => [ bb => 2, font => 'bold', halign => 'center' ] },
      ],
      [ 'Widget 1',
         { value => $qty_of_widget_1,  format => [ halign => 'right', type => 'dec1comma' ] },
         { value => $cost_of_widget_1, format => [ halign => 'right', type => 'currencyacct' ] },
         { value => $qty_of_widget_1 * $cost_of_widget_1,
              format => [ halign => 'right', type => 'currencyacct' ] },
      ],
      [ 'Widget 2',
         { value => $qty_of_widget_2,  format => [ halign => 'right', type => 'dec1comma' ] },
         { value => $cost_of_widget_2, format => [ halign => 'right', type => 'currencyacct' ] },
         { value => $qty_of_widget_2 * $cost_of_widget_2,
              format => [ halign => 'right', type => 'currencyacct' ] },
      ],
      [ 'Totals',
         { value  => "=sum(B3:B4)", format => [ tb => 2, halign => 'right', type => 'dec1comma' ] },
         { value  => "=sum(C3:C4)", format => [ tb => 2, halign => 'right', type => 'currencyacct' ] },
         { value  => "=sum(D3:D4)", format => [ tb => 2, halign => 'right', type => 'currencyacct' ] },
      ],
   ],
);
my $workbook = Clearbuilt::ExcelErator->new( { filename => 'my_workbook.xlsx' } );
$workbook->write_the_book( [\%spreadsheet] );

DESCRIPTION

Clearbuilt::Excelerator is a wrapper around Excel::Writer::XLSX that simplifies and standardizes its usage. You create a hash defining your spradsheet, and it does the rest for you!

More documentation of the hash will be added later, but the "SYNOPSIS" above shows a simple and common usage, with frequently-used options. A more-extensive example can be found in the package, in examples/create_test_excel_sheet.

THE WORKBOOK ARRAY

The workbook is an array of hashes, each of which is a worksheet.

Note that the hash for this simple example is sent as an arrayref-to-the-hash. The implication of that it is, of course, that you could create multiple hashes, push them into an array in the order you want, and send a reference to that array to write_the_book and get a multi-sheet workbook.

THE WORKSHEET HASH

There are only three valid elements in this hash:

  • title: The title of the spreadsheet, which will show up in the tabs at the bottom.

  • col_widths: A hashref of column widths. The key is the column number (beginning with 1), and the value is the desired width.

  • rows: The array of rows for the sheet.

THE WORKSHEET ROWS ARRAY

The rows array is an array of arrayrefs; each of those is an arrayref of cells. The cell can be a scalar, in which case it is displayed with default formatting, or a hashref with a value and optionally a format. If you do not specify a format, you get the default for that cell.

EXPORTED METHODS

new({ filename => <filespec>})>

Opens the desired file for writing. At this time, filename is the only parameter, which is passed verbatim into Excel::Writer::XLSX; there may be other options in the future.

write_the_book(\%spreadsheet);

Writes the file, and closes it. Easy-peasy!

REQUIRES

ROADMAP

  • Add other formatting functions

  • Default column formatting

  • More documentation

  • A robust unit test for write_the_book

AUTHOR

D Ruth Holloway <ruthh@clearbuilt.com>

COPYRIGHT AND LICENSE

This software is copyright (c) 2022 by Clearbuilt.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.