NAME

    Spreadsheet::SimpleExcel - Create Excel files with Perl

VERSION

    version 1.93

SYNOPSIS

      use Spreadsheet::SimpleExcel;
    
      binmode(\*STDOUT);
      # data for spreadsheet
      my @header = qw(Header1 Header2);
      my @data   = (['Row1Col1', 'Row1Col2'],
                    ['Row2Col1', 'Row2Col2']);
    
      # create a new instance
      my $excel = Spreadsheet::SimpleExcel->new();
    
      # add worksheets
      $excel->add_worksheet('Name of Worksheet',{-headers => \@header, -data => \@data});
      $excel->add_worksheet('Second Worksheet',{-data => \@data});
      $excel->add_worksheet('Test');
    
      # add a row into the middle
      $excel->add_row_at('Name of Worksheet',1,[qw/new row/]);
    
      # sort data of worksheet - ASC or DESC
      $excel->sort_data('Name of Worksheet',0,'DESC');
    
      # remove a worksheet
      $excel->del_worksheet('Test');
    
      # sort worksheets
      $excel->sort_worksheets('DESC');
    
      # create the spreadsheet
      $excel->output();
    
      # print sheet-names
      print join(", ",$excel->sheets()),"\n";
    
      # get the result as a string
      my $spreadsheet = $excel->output_as_string();
    
      # print result into a file and handle error
      $excel->output_to_file("my_excel.xls") or die $excel->errstr();
      $excel->output_to_file("my_excel2.xls",45000) or die $excel->errstr();
    
      ## or
    
      # data
      my @data2  = (['Row1Col1', 'Row1Col2'],
                    ['Row2Col1', 'Row2Col2']);
    
      my $worksheet = ['NAME',{-data => \@data2}];
      # create a new instance
      my $excel2    = Spreadsheet::SimpleExcel->new(-worksheets => [$worksheet]);
    
      # add headers to 'NAME'
      $excel2->set_headers('NAME',[qw/this is a test/]);
      # append data to 'NAME'
      $excel2->add_row('NAME',[qw/new row/]);
    
      $excel2->output();
      
      $excel2->output_to_XML('test.xml');
    
      ## create XLSX
      my $worksheet3 = [ 'NAME', { -data => \@data } ];
      my $file3      = 'test.xlsx';
      
      # create a new instance
      my $excel3 = Spreadsheet::SimpleExcel->new(
          -worksheets => [$worksheet3],
          -filename   => $file3,
          -format     => 'xlsx',
      );
      
      # add headers to 'NAME'
      $excel3->set_headers('NAME',[qw/this is a test/]);
      
      $excel3->output_to_file();

DESCRIPTION

    Spreadsheet::SimpleExcel simplifies the creation of excel-files in the
    web. It does provide simple cell-formats, but only three types of
    formats (to keep the module simple).

METHODS

    Added in version 1.4:

    If you want a method to do the functionality for the last inserted
    worksheet (current sheet), you don't have to pass the title as a
    parameter for the method.

    So now you can do something like this:

      $excel->add_worksheet("Test");
      $excel->add_row(\@data);
      $excel->sort_date($column_idx);

    This leads to more usability.

 new

      # create a new instance
      my $excel = Spreadsheet::SimpleExcel->new();
    
      # or
    
      my $worksheet = ['NAME',{-data => ['This','is','an','Test']}];
      my $excel2    = Spreadsheet::SimpleExcel->new(-worksheets => [$worksheet]);
    
      # to create a file
      my $filename = 'test.xls';
      my $excel = Spreadsheet::SimpleExcel->new(-filename => $filename);
      
      #if a file > 7 MB should be created
      $excel = Spreadsheet::SimpleExcel->new(-big => 1);

    If -big is set to true, Spreadsheet::WriteExcel::Big is required!

 add_worksheet

      # add worksheets
      $excel->add_worksheet('Name of Worksheet',{-headers => \@header, -data => \@data});
      $excel->add_worksheet('Second Worksheet',{-data => \@data});
      $excel->add_worksheet('Test');

    The first parameter of this method is the name of the worksheet and the
    second one is a hash with (optional) information about the headlines
    and the data. No duplicate worksheets allowed.

 del_worksheet

      # remove a worksheet
      $excel->del_worksheet('Test');

    Deletes all worksheets named like the first parameter

 add_row

      # append data to 'NAME'
      $excel->add_row('NAME',[qw/new row/]);

    Adds a new row to the worksheet named 'NAME'

 add_row_at

      # add a row into the middle
      $excel->add_row_at('Name of Worksheet',1,[qw/new row/]);

    This method inserts a row into the existing data

 sort_data

      # sort data of worksheet - ASC or DESC
      $excel->sort_data('Name of Worksheet',0,'DESC');

    sort_data sorts the rows. All sorts for one worksheet are combined, so

      $excel->sort_data('Name of Worksheet',0,'DESC');
      $excel->sort_data('Name of Worksheet',1,'ASC');

    will sort the column 0 first and then (within this sorted data) the
    column 1.

 reset_sort

      $excel->reset_sort('Name of Worksheet');

    The data won't be sorted, the data are in original order instead.

 set_headers

      # add headers to 'NAME'
      $excel->set_headers('NAME',[qw/this is a test/]);

    set the headers for the worksheet named 'NAME'

 errstr

    returns error message.

 sort_worksheets

      # sort worksheets
      $excel->sort_worksheets('DESC');

    sorts the worksheets in DESCending or ASCending order.

 output

      $excel2->output();

    prints the worksheet to the STDOUT and prints the Mime-type
    'application/vnd.ms-excel'.

 output_as_string

      # get the result as a string
      my $spreadsheet = $excel->output_as_string();

    returns a string that contains the data in excel-format

 output_to_file

      # print result into a file [output_to_file(<filename>,<lines>)]
      $excel->output_to_file("my_excel.xls");
      $excel->output_to_file("my_excel2.xls",45000) or die $excel->errstr();

    prints the data into a file. The data will be printed into more
    worksheets, if the number of rows is greater than <lines> (default
    32000).

 output_to_XML

      $excel2->output_to_XML('test.xml');

    prints the data into a XML file.

 sheets

      $ref = $excel->sheets();
      @names = $excel->sheets();

    In listcontext this subroutines returns a list of the names of sheets
    that are in $excel, in scalar context it returns a reference on an
    Array.

 set_headers_format

      # set formats for headers of 'NAME'
      # first col 'string', second col 'number', third col default format, fourth col 'number'
      $excel2->set_headers_format('NAME',['s','n',undef,'n']);

    sets the headers formats for a specified worksheet. If formats are
    commited, the default format is set. Default format is set by
    Spreadsheet::WriteExcel

 set_data_format

      # set formats for headers of 'NAME'
      # first col 'string', second col 'number', third col default format, fourth col 'number'
      $excel2->set_data_format('NAME',['s','n',undef,'n']);

    sets the data formats for a specified worksheet. If formats are
    commited, the default format is set. Default format is set by
    Spreadsheet::WriteExcel

 current_sheet

      $excel->add_worksheet('Testtitle');
      print $excel->current_sheet;

    returns the title of the current worksheet.

EXAMPLES

 PRINT ON STDOUT

      #! /usr/bin/perl
    
      use strict;
      use warnings;
      use Spreadsheet::SimpleExcel;
    
      binmode(\*STDOUT);
      # data for spreadsheet
      my @header = qw(Header1 Header2);
      my @data   = (['Row1Col1', 'Row1Col2'],
                    ['Row2Col1', 'Row2Col2']);
    
      # create a new instance
      my $excel = Spreadsheet::SimpleExcel->new();
    
      # add worksheets
      $excel->add_worksheet('Name of Worksheet',{-headers => \@header, -data => \@data});
      $excel->add_worksheet('Second Worksheet',{-data => \@data});
      $excel->add_worksheet('Test');
    
      # add a row into the middle
      $excel->add_row_at('Name of Worksheet',1,[qw/new row/]);
    
      # sort data of worksheet - ASC or DESC
      $excel->sort_data('Name of Worksheet',0,'DESC');
    
      # remove a worksheet
      $excel->del_worksheet('Test');
    
      # create the spreadsheet
      $excel->output();

 RECEIVE DATA AS A SCALAR

      #!/usr/bin/perl
    
      use strict;
      use warnings;
      use Spreadsheet::SimpleExcel;
    
      # data
      my @data2  = (['Row1Col1', 'Row1Col2'],
                    ['Row2Col1', 'Row2Col2']);
    
      my $worksheet = ['NAME',{-data => \@data2}];
      # create a new instance
      my $excel2    = Spreadsheet::SimpleExcel->new(-worksheets => [$worksheet]);
    
      # add headers to 'NAME'
      $excel2->set_headers('NAME',[qw/this is a test/]);
      # append data to 'NAME'
      $excel2->add_row('NAME',[qw/new row/]);
    
      # receive as string
      my $string = $excel2->output_as_string();

 PRINT INTO FILE

      #! /usr/bin/perl
    
      use strict;
      use warnings;
      use Spreadsheet::SimpleExcel;
    
      # data
      my @data2  = (['Row1Col1', 'Row1Col2'],
                    ['Row2Col1', 'Row2Col2']);
    
      my $worksheet = ['NAME',{-data => \@data2}];
      # create a new instance
      my $excel2    = Spreadsheet::SimpleExcel->new(-worksheets => [$worksheet]);
    
      # add headers to 'NAME'
      $excel2->set_headers('NAME',[qw/this is a test/]);
      # append data to 'NAME'
      $excel2->add_row('NAME',[qw/new row/]);
    
      # print into file
      $excel2->output_to_file("my_excel.xls");

 PRINT INTO FILE (break worksheets)

      #! /usr/bin/perl
    
      use strict;
      use warnings;
      use Spreadsheet::SimpleExcel;
    
      # create a new instance
      my $excel    = Spreadsheet::SimpleExcel->new();
    
      my @header = qw(Header1 Header2);
      my @data   = (['Row1Col1', 'Row1Col2'],
                    ['Row2Col1', 'Row2Col2']);
      for(0..70000){
        push(@data,[qw/1 2 4 6 8/]);
      }
      # add worksheets
      $excel->add_worksheet('Name of Worksheet',{-headers => \@header, -data => \@data});
      $excel->add_row('Name of Worksheet',[qw/1 2 3 4 5/]);
    
      # print into file
      $excel->output_to_file("my_excel.xls",10000);

DEPENDENCIES

    This module requires Spreadsheet::WriteExcel and IO::Scalar

SEE ALSO

    Spreadsheet::WriteExcel

    IO::Scalar

    IO::File

    XML::Writer

AUTHOR

    Renee Baecker <reneeb@cpan.org>

COPYRIGHT AND LICENSE

    This software is Copyright (c) 2015 by Renee Baecker.

    This is free software, licensed under:

      The Artistic License 2.0 (GPL Compatible)

