-
-
18 Mar 2014 20:47:23 UTC
- Distribution: Spreadsheet-ParseExcel
- Module version: 0.65
- Source (raw)
- Browse (raw)
- Changes
- Homepage
- How to Contribute
- Repository
- Issues (26)
- Testers (9466 / 0 / 10)
- Kwalitee
Bus factor: 1- 77.21% Coverage
- License: perl_5
- Activity
24 month- Tools
- Download (202.07KB)
- MetaCPAN Explorer
- Permissions
- Subscribe to distribution
- Permalinks
- This version
- Latest version
and 1 contributors- Douglas Wilson (dougw@cpan.org)
- Dependencies
- Crypt::RC4
- Digest::Perl::MD5
- IO::File
- IO::Scalar
- OLE::Storage_Lite
- Scalar::Util
- and possibly others
- Reverse dependencies
- CPAN Testers List
- Dependency graph
NAME
Spreadsheet::ParseExcel::Utility - Utility functions for Spreadsheet::ParseExcel.
SYNOPSIS
use Spreadsheet::ParseExcel::Utility qw(ExcelFmt ExcelLocaltime LocaltimeExcel); # Convert localtime to Excel time my $datetime = LocaltimeExcel(11, 10, 12, 23, 2, 64); # 1964-3-23 12:10:11 print $datetime, "\n"; # 23459.5070717593 (Excel date/time format) # Convert Excel Time to localtime my @time = ExcelLocaltime($datetime); print join(":", @time), "\n"; # 11:10:12:23:2:64:1:0 # Formatting print ExcelFmt('yyyy-mm-dd', $datetime), "\n"; # 1964-3-23 print ExcelFmt('m-d-yy', $datetime), "\n"; # 3-23-64 print ExcelFmt('#,##0', $datetime), "\n"; # 23,460 print ExcelFmt('#,##0.00', $datetime), "\n"; # 23,459.51
DESCRIPTION
The
Spreadsheet::ParseExcel::Utility
module provides utility functions for working with ParseExcel and Excel data.Functions
Spreadsheet::ParseExcel::Utility
can export the following functions:ExcelFmt ExcelLocaltime LocaltimeExcel col2int int2col sheetRef xls2csv
These functions must be imported implicitly:
# Just one function. use Spreadsheet::ParseExcel::Utility 'col2int'; # More than one. use Spreadsheet::ParseExcel::Utility qw(ExcelFmt ExcelLocaltime LocaltimeExcel);
ExcelFmt($format_string, $number, $is_1904)
Excel stores data such as dates and currency values as numbers. The way these numbers are displayed is controlled by the number format string for the cell. For example a cell with a number format of
'$#,##0.00'
for currency and a value of 1234.567 would be displayed as follows:'$#,##0.00' + 1234.567 = '$1,234.57'.
The
ExcelFmt()
function tries to emulate this formatting so that the user can convert raw numbers returned bySpreadsheet::ParseExel
to a desired format. For example:print ExcelFmt('$#,##0.00', 1234.567); # $1,234.57.
The syntax of the function is:
my $text = ExcelFmt($format_string, $number, $is_1904);
Where
$format_string
is an Excel number format string,$number
is a real or integer number andis_1904
is an optional flag to indicate that dates should use Excel's 1904 epoch instead of the default 1900 epoch.ExcelFmt()
is also used internally to convert numbers returned by theCell::unformatted()
method to the formatted value returned by theCell::value()
method:my $cell = $worksheet->get_cell( 0, 0 ); print $cell->unformatted(), "\n"; # 1234.567 print $cell->value(), "\n"; # $1,234.57
The most common usage for
ExcelFmt
is to convert numbers to dates. Dates and times in Excel are represented by real numbers, for example "1 Jan 2001 12:30 PM" is represented by the number 36892.521. The integer part of the number stores the number of days since the epoch and the fractional part stores the percentage of the day. By applying an Excel number format the number is converted to the desired string representation:print ExcelFmt('d mmm yyyy h:mm AM/PM', 36892.521); # 1 Jan 2001 12:30 PM
$is_1904
is an optional flag to indicate that dates should use Excel's 1904 epoch instead of the default 1900 epoch. Excel for Windows generally uses 1900 and Excel for Mac OS uses 1904. The$is1904
flag isn't required very often by a casual user and can usually be ignored.ExcelLocaltime($excel_datetime, $is_1904)
The
ExcelLocaltime()
function converts from an Excel date/time number to alocaltime()
-like array of values:my @time = ExcelLocaltime($excel_datetime); # 0 1 2 3 4 5 6 7 my ( $sec, $min, $hour, $day, $month, $year, $wday, $msec ) = @time;
The array elements from
(0 .. 6)
are the same as Perl'slocaltime()
. The last element$msec
is milliseconds. In particular it should be noted that, in common withlocaltime()
, the month is zero indexed and the year is the number of years since 1900. This means that you will usually need to do the following:$month++; $year += 1900;
See also Perl's documentation for localtime():
The
$is_1904
flag is an optional. It is used to indicate that dates should use Excel's 1904 epoch instead of the default 1900 epoch.LocaltimeExcel($sec, $min, $hour, $day, $month, $year, $wday, $msec, $is_1904)
The
LocaltimeExcel()
function converts from alocaltime()
-like array of values to an Excel date/time number:$excel_datetime = LocaltimeExcel($sec, $min, $hour, $day, $month, $year, $wday, $msec);
The array elements from
(0 .. 6)
are the same as Perl'slocaltime()
. The last element$msec
is milliseconds. In particular it should be noted that, in common withlocaltime()
, the month is zero indexed and the year is the number of years since 1900. See also Perl's documentation for localtime():The
$wday
and$msec
elements are usually optional. This time elements can also be zeroed if they aren't of interest:# sec, min, hour, day, month, year $excel_datetime = LocaltimeExcel( 0, 0, 0, 1, 0, 101 ); print ExcelFmt('d mmm yyyy', $excel_datetime); # 1 Jan 2001
The
$is_1904
flag is also optional. It is used to indicate that dates should use Excel's 1904 epoch instead of the default 1900 epoch.col2int($column)
The
col2int()
function converts an Excel column letter to an zero-indexed column number:print col2int('A'); # 0 print col2int('AA'); # 26
This function was contributed by Kevin Mulholland.
int2col($column_number)
The
int2col()
function converts an zero-indexed Excel column number to a column letter:print int2col(0); # 'A' print int2col(26); # 'AA'
This function was contributed by Kevin Mulholland.
sheetRef($cell_string)
The
sheetRef()
function converts an Excel cell reference in 'A1' notation to a zero-indexed(row, col)
pair.my ($row, $col) = sheetRef('A1'); # ( 0, 0 ) my ($row, $col) = sheetRef('C2'); # ( 1, 2 )
This function was contributed by Kevin Mulholland.
xls2csv($filename, $region, $rotate)
The
xls2csv()
function converts a section of an Excel file into a CSV text string.$csv_text = xls2csv($filename, $region, $rotate);
Where:
$region = "sheet-colrow:colrow" For example '1-A1:B2' means 'A1:B2' for sheet 1. and $rotate = 0 or 1 (output is rotated/transposed or not)
This function requires
Text::CSV_XS
to be installed. It was contributed by Kevin Mulholland along with thexls2csv
script in thesample
directory of the distro.See also the following xls2csv utilities: Ken Prows'
xls2csv
: http://search.cpan.org/~ken/xls2csv/script/xls2csv and H.Merijn Brand'sxls2csv
(which is part of Spreadsheet::Read): http://search.cpan.org/~hmbrand/Spreadsheet-Read/AUTHOR
Current maintainer 0.60+: Douglas Wilson dougw@cpan.org
Maintainer 0.40-0.59: John McNamara jmcnamara@cpan.org
Maintainer 0.27-0.33: Gabor Szabo szabgab@cpan.org
Original author: Kawai Takanori kwitknr@cpan.org
COPYRIGHT
Copyright (c) 2014 Douglas Wilson
Copyright (c) 2009-2013 John McNamara
Copyright (c) 2006-2008 Gabor Szabo
Copyright (c) 2000-2006 Kawai Takanori
All rights reserved.
You may distribute under the terms of either the GNU General Public License or the Artistic License, as specified in the Perl README file.
Module Install Instructions
To install Spreadsheet::ParseExcel, copy and paste the appropriate command in to your terminal.
cpanm Spreadsheet::ParseExcel
perl -MCPAN -e shell install Spreadsheet::ParseExcel
For more information on module installation, please visit the detailed CPAN module installation guide.