Spreadsheet::ParseExcel::SaveParser - Rewrite an existing Excel file.


Spreadsheet-ParseExcel documentation Contained in the Spreadsheet-ParseExcel distribution.

Index


Code Index:

NAME

Top

Spreadsheet::ParseExcel::SaveParser - Rewrite an existing Excel file.

SYNOPSIS

Top

Say we start with an Excel file that looks like this:

    -----------------------------------------------------
   |   |      A      |      B      |      C      |
    -----------------------------------------------------
   | 1 | Hello       | ...         | ...         |  ...
   | 2 | World       | ...         | ...         |  ...
   | 3 | *Bold text* | ...         | ...         |  ...
   | 4 | ...         | ...         | ...         |  ...
   | 5 | ...         | ...         | ...         |  ...




Then we process it with the following program:

    #!/usr/bin/perl

    use strict;
    use warnings;

    use Spreadsheet::ParseExcel;
    use Spreadsheet::ParseExcel::SaveParser;




    # Open an existing file with SaveParser
    my $parser   = Spreadsheet::ParseExcel::SaveParser->new();
    my $template = $parser->Parse('template.xls');




    # Get the first worksheet.
    my $worksheet = $template->worksheet(0);
    my $row  = 0;
    my $col  = 0;




    # Overwrite the string in cell A1
    $worksheet->AddCell( $row, $col, 'New string' );




    # Add a new string in cell B1
    $worksheet->AddCell( $row, $col + 1, 'Newer' );




    # Add a new string in cell C1 with the format from cell A3.
    my $cell = $worksheet->get_cell( $row + 2, $col );
    my $format_number = $cell->{FormatNo};

    $worksheet->AddCell( $row, $col + 2, 'Newest', $format_number );




    # Write over the existing file or write a new file.
    $template->SaveAs('newfile.xls');




We should now have an Excel file that looks like this:

    -----------------------------------------------------
   |   |      A      |      B      |      C      |
    -----------------------------------------------------
   | 1 | New string  | Newer       | *Newest*    |  ...
   | 2 | World       | ...         | ...         |  ...
   | 3 | *Bold text* | ...         | ...         |  ...
   | 4 | ...         | ...         | ...         |  ...
   | 5 | ...         | ...         | ...         |  ...







DESCRIPTION

Top

The Spreadsheet::ParseExcel::SaveParser module rewrite an existing Excel file by reading it with Spreadsheet::ParseExcel and rewriting it with Spreadsheet::WriteExcel.

METHODS

Top

Parser

Top

new()

    $parse = new Spreadsheet::ParseExcel::SaveParser();

Constructor.

Parse()

    $workbook = $parse->Parse($sFileName);

    $workbook = $parse->Parse($sFileName , $formatter);

Returns a Workbook object. If an error occurs, returns undef.

The optional $formatter is a Formatter Class to format the value of cells.

Workbook

Top

The Parse() method returns a Spreadsheet::ParseExcel::SaveParser::Workbook object.

This is a subclass of the Spreadsheet::ParseExcel::Workbook and has the following methods:

worksheets()

Returns an array of Worksheet objects. This was most commonly used to iterate over the worksheets in a workbook:

    for my $worksheet ( $workbook->worksheets() ) {
        ...
    }

worksheet()

The worksheet() method returns a single Worksheet object using either its name or index:

    $worksheet = $workbook->worksheet('Sheet1');
    $worksheet = $workbook->worksheet(0);

Returns undef if the sheet name or index doesn't exist.

AddWorksheet()

    $workbook = $workbook->AddWorksheet($name, %properties);

Create a new Worksheet object of type Spreadsheet::ParseExcel::Worksheet.

The %properties hash contains the properties of new Worksheet.

AddFont

    $workbook = $workbook->AddFont(%properties);

Create new Font object of type Spreadsheet::ParseExcel::Font.

The %properties hash contains the properties of new Font.

AddFormat

    $workbook = $workbook->AddFormat(%properties);

The %properties hash contains the properties of new Font.

Worksheet

Top

Spreadsheet::ParseExcel::SaveParser::Worksheet

Worksheet is a subclass of Spreadsheet::ParseExcel::Worksheet. And has these methods :

The Worksbook::worksheet() method returns a Spreadsheet::ParseExcel::SaveParser::Worksheet object.

This is a subclass of the Spreadsheet::ParseExcel::Worksheet and has the following methods:

AddCell

Top

    $workbook = $worksheet->AddCell($row, $col, $value, $format [$encoding]);

Create new Cell object of type Spreadsheet::ParseExcel::Cell.

The $format parameter is the format number rather than a full format object.

To specify just same as another cell, you can set it like below:

    $row            = 0;
    $col            = 0;
    $worksheet      = $template->worksheet(0);
    $cell           = $worksheet->get_cell( $row, $col );
    $format_number  = $cell->{FormatNo};

    $worksheet->AddCell($row +1, $coll, 'New data', $format_number);










TODO

Top

Please note that this module is currently (versions 0.50-0.60) undergoing a major restructuring and rewriting.

Known Problems

Top

You can only rewrite the features that Spreadsheet::WriteExcel supports so macros, graphs and some other features in the original Excel file will be lost. Also, formulas aren't rewritten, only the result of a formula is written.

Only last print area will remain. (Others will be removed)

AUTHOR

Top

Maintainer 0.40+: John McNamara jmcnamara@cpan.org

Maintainer 0.27-0.33: Gabor Szabo szabgab@cpan.org

Original author: Kawai Takanori kwitknr@cpan.org

COPYRIGHT

Top


Spreadsheet-ParseExcel documentation Contained in the Spreadsheet-ParseExcel distribution.

package Spreadsheet::ParseExcel::SaveParser;

###############################################################################
#
# Spreadsheet::ParseExcel::SaveParser - Rewrite an existing Excel file.
#
# Used in conjunction with Spreadsheet::ParseExcel.
#
# Copyright (c) 2009      John McNamara
# Copyright (c) 2006-2008 Gabor Szabo
# Copyright (c) 2000-2006 Kawai Takanori
#
# perltidy with standard settings.
#
# Documentation after __END__
#

use strict;
use warnings;

use Spreadsheet::ParseExcel;
use Spreadsheet::ParseExcel::SaveParser::Workbook;
use Spreadsheet::ParseExcel::SaveParser::Worksheet;
use Spreadsheet::WriteExcel;
use base 'Spreadsheet::ParseExcel';

our $VERSION = '0.59';

###############################################################################
#
# new()
#
sub new {

    my ( $package, %params ) = @_;
    $package->SUPER::new(%params);
}

###############################################################################
#
# Create()
#
sub Create {

    my ( $self, $formatter ) = @_;

    #0. New $workbook
    my $workbook = Spreadsheet::ParseExcel::Workbook->new();
    $workbook->{SheetCount} = 0;

    # User specified formater class.
    if ($formatter) {
        $workbook->{FmtClass} = $formatter;
    }
    else {
        $workbook->{FmtClass} = Spreadsheet::ParseExcel::FmtDefault->new();
    }

    return Spreadsheet::ParseExcel::SaveParser::Workbook->new($workbook);
}

###############################################################################
#
# Parse()
#
sub Parse {

    my ( $self, $sFile, $formatter ) = @_;

    my $workbook = $self->SUPER::Parse( $sFile, $formatter );

    return undef unless defined $workbook;
    return Spreadsheet::ParseExcel::SaveParser::Workbook->new($workbook);
}

###############################################################################
#
# SaveAs()
#
sub SaveAs {

    my ( $self, $workbook, $filename ) = @_;

    $workbook->SaveAs($filename);
}

1;

__END__