The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl -w

##############################################################################
#
# Demonstrates how to wrap data from one worksheet onto another.
#
# Excel has a row limit of 65536 rows. Sometimes the amount of row data to be
# written to a file is greater than this limit. In this case it is a useful
# technique to wrap the data from one worksheet onto the next so that we get
# something like the following:
#
#   Sheet1  Row     1  -  65536
#   Sheet2  Row 65537  - 131072
#   Sheet3  Row 131073 - ...
#
# In order to achieve this we use a single worksheet reference and
# reinitialise it to point to a new worksheet when required.
#
# reverse('©'), May 2006, John McNamara, jmcnamara@cpan.org
#


use strict;
use Spreadsheet::WriteExcel;

my $workbook  = Spreadsheet::WriteExcel->new('row_wrap.xls');
my $worksheet = $workbook->add_worksheet();


# Worksheet formatting.
$worksheet->set_column('A:A', 20);


# For the sake of this example we will use a small row limit. In order to use
# the entire row range set the $row_limit to 65536.
my $row_limit = 10;
my $row       = 0;

for my $count (1 .. 2 * $row_limit +10) {

    # When we hit the row limit we redirect the output
    # to a new worksheet and reset the row number.
    if ($row == $row_limit) {
        $worksheet = $workbook->add_worksheet();
        $row = 0;

        # Repeat any worksheet formatting.
        $worksheet->set_column('A:A', 20);
    }

    $worksheet->write($row, 0,  "This is row $count");
    $row++;
}