r661 - in packages: . libspreadsheet-parseexcel-perl
libspreadsheet-parseexcel-perl/branches
libspreadsheet-parseexcel-perl/branches/upstream
libspreadsheet-parseexcel-perl/branches/upstream/current
libspreadsheet-parseexcel-perl/branches/upstream/current/ParseExcel
libspreadsheet-parseexcel-perl/branches/upstream/current/sample
libspreadsheet-parseexcel-perl/branches/upstream/current/sample/Excel
Gunnar Wolf
gwolf at costa.debian.org
Sun Jul 17 08:08:55 UTC 2005
Author: gwolf
Date: 2005-01-25 16:06:55 +0100 (Tue, 25 Jan 2005)
New Revision: 661
Added:
packages/libspreadsheet-parseexcel-perl/
packages/libspreadsheet-parseexcel-perl/branches/
packages/libspreadsheet-parseexcel-perl/branches/upstream/
packages/libspreadsheet-parseexcel-perl/branches/upstream/current/
packages/libspreadsheet-parseexcel-perl/branches/upstream/current/CP932Excel.map
packages/libspreadsheet-parseexcel-perl/branches/upstream/current/Changes
packages/libspreadsheet-parseexcel-perl/branches/upstream/current/MANIFEST
packages/libspreadsheet-parseexcel-perl/branches/upstream/current/META.yml
packages/libspreadsheet-parseexcel-perl/branches/upstream/current/Makefile.PL
packages/libspreadsheet-parseexcel-perl/branches/upstream/current/ParseExcel.pm
packages/libspreadsheet-parseexcel-perl/branches/upstream/current/ParseExcel/
packages/libspreadsheet-parseexcel-perl/branches/upstream/current/ParseExcel/Dump.pm
packages/libspreadsheet-parseexcel-perl/branches/upstream/current/ParseExcel/FmtDefault.pm
packages/libspreadsheet-parseexcel-perl/branches/upstream/current/ParseExcel/FmtJapan.pm
packages/libspreadsheet-parseexcel-perl/branches/upstream/current/ParseExcel/FmtJapan2.pm
packages/libspreadsheet-parseexcel-perl/branches/upstream/current/ParseExcel/FmtUnicode.pm
packages/libspreadsheet-parseexcel-perl/branches/upstream/current/ParseExcel/SaveParser.pm
packages/libspreadsheet-parseexcel-perl/branches/upstream/current/ParseExcel/Utility.pm
packages/libspreadsheet-parseexcel-perl/branches/upstream/current/README
packages/libspreadsheet-parseexcel-perl/branches/upstream/current/README_Japan.htm
packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/
packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/Excel/
packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/Excel/AuthorK.xls
packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/Excel/AuthorK95.xls
packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/Excel/FmtTest.xls
packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/Excel/Rich.xls
packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/Excel/Test1904.xls
packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/Excel/Test1904_95.xls
packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/Excel/Test95.xls
packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/Excel/Test95J.xls
packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/Excel/Test97.xls
packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/Excel/Test97J.xls
packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/Excel/oem.xls
packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/Ilya.pl
packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/README
packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/chkFmt.pl
packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/chkInfo.pl
packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/dmpEx.pl
packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/dmpExH.pl
packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/dmpExHJ.pl
packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/dmpExJ.pl
packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/dmpExR.pl
packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/dmpExU.pl
packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/dmpEx_2xml.pl
packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/iftest.pl
packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/iftestj.pl
packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/res_fmt
packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/res_info
packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/res_oem
packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/res_rich
packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/res_sample
packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/res_samplej
packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/sample.pl
packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/sampleOEM.pl
packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/sample_j.pl
packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/smpFile.pl
packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/xls2csv.pl
packages/libspreadsheet-parseexcel-perl/branches/upstream/current/test.pl
packages/libspreadsheet-parseexcel-perl/tags/
Log:
[svn-inject] Installing original source of libspreadsheet-parseexcel-perl
Added: packages/libspreadsheet-parseexcel-perl/branches/upstream/current/CP932Excel.map
===================================================================
(Binary files differ)
Property changes on: packages/libspreadsheet-parseexcel-perl/branches/upstream/current/CP932Excel.map
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: packages/libspreadsheet-parseexcel-perl/branches/upstream/current/Changes
===================================================================
--- packages/libspreadsheet-parseexcel-perl/branches/upstream/current/Changes 2005-01-25 02:10:47 UTC (rev 660)
+++ packages/libspreadsheet-parseexcel-perl/branches/upstream/current/Changes 2005-01-25 15:06:55 UTC (rev 661)
@@ -0,0 +1,242 @@
+Revision history for Perl extension Spreadsheet::ParseExcel.
+
+0.2603 Mon May 30, 2004
+ - Mod SaveParser : Apply a path from Eduardo J
+ adding Protect feature
+ (Thank you, Eduardo J for patch)
+ - Mod ParseExcel : Apply a path from C. Jon Larsen
+ adding GetContent
+ (Thank you, C. Jon Larsen)
+
+0.2602 Mon Jul 15, 2002
+ - Fix SaveParser : Mod hidden support(with 0 column width)
+ (Thank you, HIROSHIGE,Shigeru for report)
+
+0.2601 Sat Jul 13, 2002
+ Thank you for Peter Marschall for PATCH.
+ - Mod ParseExcel : Add new methods
+ - Mod SaveParser : Add new methods
+
+ - Mod ParseExcel : Mod subHeader, subFooter
+ (Thank you, RT? for report)
+ - Mod SaveParser : Add hidden support
+ (Thank you, HIROSHIGE,Shigeru for report)
+ - Add new sample : Add dmpEx_2xml.pl
+ (Thank you, Khalid EZZARAOUI for new code)
+
+0.26 Sat Jun 1, 2002
+ Thank you for Peter Marschall.
+ - Mod ParseExcel : Add new interface
+ - Mod SaveParser : Add new interface
+
+0.25 Fri May 10, 2002
+ - Mod ParseExcel : Fix For SaveParser
+ - Mod SaveParser : Add Create
+ Add page setting
+ Add some documents
+
+0.2407 Mon Apr 24, 2002
+ - Mod Utility : Fix Numeric format
+ (Thank you, Jeff Shaffer for report)
+ Fix MakeBun
+ - Mod ParseExcel : Fix Continue (COTINUE with no header)
+ (Thank you, Tuneyosi Fukusima for report)
+ : Add {Val} in sample :-)
+ (Thank you, Ernst Kloppenburg for suggestion)
+
+0.2406 Mon Apr 8, 2002
+ - Mod Utility : Fix $sNUMEXP
+ (Thank you for Xavier Catteau for patch)
+ Add col2int int2col sheetRef xls2csv
+ (Thank you for Xavier Catteau for patch)
+ - Mod ParseExcel : Add file contents
+ - Mod SaveParser : Mod AddCell
+
+0.2405 Tue Jan 29, 2002
+ - Mod FmtDefault : Fix 0x01 (='0') format
+ (Thank you Marc Pohl for report)
+ - Mod ParseExcel : Mod Parse Fh of CGI.pm and GLOB ref.
+ (Thank you Nicholas Hamlin and Abe Daisuke for reports)
+ Fix PrintArea detection
+ (Thank you Todd A. Green for patch)
+ Add custom palette support
+ (Thank you Florian Pflug for patch)
+ Fix _SetDimension prototype
+ (Thank you David Dyck for patch)
+ - Mod SaveParser : Mod return value of SaveParser
+ (Thank you Iceman for patch)
+ - Mod Utility : Mod $iAftP manipulation
+ (Thank you Stanislav Sukholet for patch)
+
+0.2404 Tue Jul 24 7:30:00 2001 - Tue Dec 4 11:00:00 2001
+ - Mod ParseExcel : Mod _SwapForUnicode for a string with odd length
+ (Thank you, Mikhail Turenko)
+ : Add GLOB reference support
+ (Thank you, coral.)
+ : Fix/Add Font name Unicode judge
+ (Thank you, Mikhail Turenko, Alex Edelman)
+ - Mod Utility : Fix Backslash problem
+ (Thank you, Bruno Wolff III. And sorry for TOO LATE)
+ : Fix add number expressions
+ (Thank you, Jing Zhao)
+
+0.2403 Tue Jul 24 7:30:00 2001
+ - Mod FmtUnicode, FmtJapan, FmtJapan2 : Fix NL
+ (Thank you, Jeremy Smartt)
+
+0.2402 Thu Jul 12 20:30:00 2001
+ - Mod Utility, FmtDefault :Fix format error
+ (Thank you, Kevin Ko)
+ - Mod Utility :Mod for Japanese sign(triangle)
+
+0.2401 Mon Jul 9 19:00:00 2001
+ - Mod FmtUnicode :Mod alphanumeric in BIG5
+ (Thank you, Kevin Ko)
+ Sorry, it is not effective (ToT)
+
+0.24 Wed Jul 5 06:30:00 2001
+ - Mod ParseExcel :Add OO style callback
+ (Thank you, Ilya Sterin)
+ - Add sample/Ilya.pl :-)
+ - Mod ParseExcel : Mod use FmtDefault for PDK
+ (Thank you, Maxime Alechine)
+
+0.2301 Tue Jun 26 8:00:00 2001
+ - Mod FmtDefault
+ :Fix not convert undefined or '' string
+
+0.23 Thu Jun 21 21:00:00 2001
+ - Mod ParseExcel, FmtUnicode, FmtJapan, FmtJapan2 :
+ :Fix Unicode Latin1 adapt
+ (Thank you, Seiko Yamamura and Sadahiro)
+ - Mod ParseExcel : my(undef) -> my($undef1) ...
+ (Thank you, Alex)
+
+0.22.3 Thu May 16 8:00:00 2001
+ - Mod FmtUnicode : Fix code undefined
+ - Mod ParseExcel : Fix Marged area (row>255)
+ (Thank you, Dmitriy Litovchin)
+
+0.22.2 Thu May 16 8:00:00 2001
+ - Mod ParseExcel : Fix Hidden RowHeight, ColWidht
+ (Thank you, Maxim Ovchinnikov)
+
+0.22.1 Wed May 14 20:35:00 2001
+ - Mod ParseExcel : Fix Continue (COTINUE with no header)
+ (Thank you, Steve Sapovits)
+ : Fix ignore Graph sheet
+ (Thank you, Joel Defarge )
+ - Mod Utility : Fix eval at Conditiona-Format
+ (Thank you, Alok K. Dhir)
+
+0.22 Sat May 5 19:00:00 2001
+ - Add SaveParser : For DBD::Excel
+
+0.21.2 Tue May 1 7:00:00 2001
+ - Fix ParseExcel : MergedArea
+ (Thank you, Bradley M. Handy )
+
+0.21.1 Sat Apr 29 14:00:00 2001
+ - Add ParseExcel : Rich text information support
+ (Thank you, Vladimir Igrevsky)
+
+0.21 Sat Apr 24 18:00:00 2001
+ - Mod ParseExcel : Add New Feature for CellHandler
+ (Thank you, Jeff Clark)
+ - Mod ParseExcel, FmtDefault, FmtJapan, Utility:
+ : Expanding format information to support
+ (Supported by Nippon-RAD OP Division)
+
+0.20.2 Wed Apr 18 9:00:00 2001
+ - Fix Utility : ExcelFmt (For Number format)
+ (Thank you, Jeff Clark)
+
+0.20.1 Sun Apr 11 9:00:00 2001
+ - Fix FmtJapan, FmtJapan2 : TxtFmt
+ - Fix FmtDefault : ValFmt (for 'String' format')
+ (Thank you, Fukusima, Tuneyosi)
+
+0.20 Mon Mar 30 20:00:00 2001
+ - Fix ParseExcel.pm : RK int minus
+ (Thank you, Morten Sickel)
+ - Mod ParseExcel.pm : Fix Font number but not complete
+ (Thank you, Vladimir Igrevsky)
+ - Fix ParseExcel.pm : _convBIFF8 non conversion (LABEL, String...)
+ (Thank you, Fukusima, Tuneyosi)
+ - Add pod : Limitaion with Spreadsheet::WriteExcel.pm
+ (Thank you, Venkataramana Mokkapati)
+
+0.19 Mon Mar 26 12:00:00 2001
+ - Fix Utility.pm :Month short name
+ (Thank you, Morten Sickel)
+ - Fix Utility.pm :Formatting Error
+ (Thank you, yusuf_najuddin)
+ - Fix FmtJapan2.pm: CP932Excel.map readable check
+ (Thank you, Kawasaki)
+
+0.18 Sat Mar 18 16:00:00 2001
+ - Fix Excel4 file support
+ - Fix subLabel (Unicode)
+ (Thank you, yusuf_najmuddin)
+
+0.17 Wed Mar 12 9:00:00 2001
+ - Fix Utility.pm for Number format
+ - Fix FmtJapan2.pm to use FmtJapan
+ (Thank you, Kawasaki)
+ - Fix Utility.pm for Number format (not Numeric)
+ (Thank you, John Dawson)
+ - Fix Format string with Chinese Character (in Excel95)
+
+0.16 Wed Mar 7 22:00:00 2001
+ - Fix Format String
+ - Avoding warnings
+ (Thank you Jimmy Sieben and Daniel Berger)
+
+0.15 Wed Mar 6 10:00:00 2001
+ - Fix RK number
+ (Thank you Jimmy Sieben)
+ - Modify many internal functions!!
+ - Add Spreadsheet::ParseExcel::Utity for formatting!
+
+0.13 Sat Feb 21 20:40:00 2001
+ - Support Pps 'BOOK' (not 'Book') with OLE::Storage_Lite 0.07
+ (Thank you, Punam Chordia )
+ - Modify Makefile.PL (define OLE::Storage_Lite Version)
+ (Thank you, Aldo Calpini)
+ - Fix Conetinue ASCII-Unicode pattern
+ (Thank you, Tim Wills)
+ - Add FmtUnicode sample :dmpExU.pl (Sorry and thank you, Mike Goblin)
+
+0.12 Sat Feb 5 11:00:00 2001
+ - Support Excel4 file (Thank you, Jeff Haferman and herbert )
+ - Add reference of scalar and IO::File object support in Parse
+ (Thank you, Jeff Haferman)
+ - Fix Continue SST (Thank you, Gennadiy)
+ - Delete VBAMacros from sample/Excel/Test97j.xls and Test97.xls
+ avoiding virus check.
+ (Thank you, Alfred Nathaniel)
+ - Fix weekday of ExcelLocaltime
+
+0.11 Sat Jan 26 14:00:00 2001
+ - Skip 0xEF to EOF(0x0A) (Thank you, Phil DiFalco)
+
+0.10 Mon Jan 15 12:00:00 2001
+ - Fix _subString, _subFormula (Thank you, Ilter Cekic and Mike Edwards)
+
+0.09 Sat Dec 15 12:00:00 2000
+ - Fix Month name of FmtDefault.pm (Thank you, Michael Edwards)
+ - Add FmtJapan2.pm
+ - Fix Slightly Bug
+
+0.08 Sat Nov 25 12:00:00 2000
+ - Fix RString, PackedString BUGS (Thank you, Kim Namsuk)
+ - Fix undefined function _subDefColW (Thank you, Hirofumi Morisada)
+
+0.07 Sat Nov 18 12:00:00 2000
+ - Change to use OLE::Storage_Lite
+ - Fix RString, PackedString BUGS (Thank you, Hirofumi Morisada)
+ - Fix and Add Formula String (Thank you, Michael Edwards)
+
+0.05 Mon Oct 2 03:14:04 2000
+ - original version
+
Added: packages/libspreadsheet-parseexcel-perl/branches/upstream/current/MANIFEST
===================================================================
--- packages/libspreadsheet-parseexcel-perl/branches/upstream/current/MANIFEST 2005-01-25 02:10:47 UTC (rev 660)
+++ packages/libspreadsheet-parseexcel-perl/branches/upstream/current/MANIFEST 2005-01-25 15:06:55 UTC (rev 661)
@@ -0,0 +1,51 @@
+CP932Excel.map
+Changes
+MANIFEST
+Makefile.PL
+ParseExcel.pm
+ParseExcel/Dump.pm
+ParseExcel/FmtDefault.pm
+ParseExcel/FmtJapan.pm
+ParseExcel/FmtJapan2.pm
+ParseExcel/FmtUnicode.pm
+ParseExcel/SaveParser.pm
+ParseExcel/Utility.pm
+README
+README_Japan.htm
+sample/Excel/AuthorK.xls
+sample/Excel/AuthorK95.xls
+sample/Excel/FmtTest.xls
+sample/Excel/Rich.xls
+sample/Excel/Test1904.xls
+sample/Excel/Test1904_95.xls
+sample/Excel/Test95.xls
+sample/Excel/Test95J.xls
+sample/Excel/Test97.xls
+sample/Excel/Test97J.xls
+sample/Excel/oem.xls
+sample/README
+sample/chkFmt.pl
+sample/chkInfo.pl
+sample/dmpEx.pl
+sample/dmpExU.pl
+sample/dmpExH.pl
+sample/dmpExHJ.pl
+sample/dmpExJ.pl
+sample/dmpExR.pl
+sample/Ilya.pl
+sample/res_fmt
+sample/res_info
+sample/res_oem
+sample/res_rich
+sample/res_sample
+sample/res_samplej
+sample/sample.pl
+sample/sampleOEM.pl
+sample/sample_j.pl
+sample/smpFile.pl
+sample/xls2csv.pl
+sample/iftest.pl
+sample/iftestj.pl
+sample/dmpEx_2xml.pl
+test.pl
+META.yml Module meta-data (added by MakeMaker)
Added: packages/libspreadsheet-parseexcel-perl/branches/upstream/current/META.yml
===================================================================
--- packages/libspreadsheet-parseexcel-perl/branches/upstream/current/META.yml 2005-01-25 02:10:47 UTC (rev 660)
+++ packages/libspreadsheet-parseexcel-perl/branches/upstream/current/META.yml 2005-01-25 15:06:55 UTC (rev 661)
@@ -0,0 +1,11 @@
+# http://module-build.sourceforge.net/META-spec.html
+#XXXXXXX This is a prototype!!! It will change in the future!!! XXXXX#
+name: Spreadsheet-ParseExcel
+version: 0.2603
+version_from: ParseExcel.pm
+installdirs: site
+requires:
+ OLE::Storage_Lite: 0.08
+
+distribution_type: module
+generated_by: ExtUtils::MakeMaker version 6.17
Added: packages/libspreadsheet-parseexcel-perl/branches/upstream/current/Makefile.PL
===================================================================
--- packages/libspreadsheet-parseexcel-perl/branches/upstream/current/Makefile.PL 2005-01-25 02:10:47 UTC (rev 660)
+++ packages/libspreadsheet-parseexcel-perl/branches/upstream/current/Makefile.PL 2005-01-25 15:06:55 UTC (rev 661)
@@ -0,0 +1,8 @@
+use ExtUtils::MakeMaker;
+# See lib/ExtUtils/MakeMaker.pm for details of how to influence
+# the contents of the Makefile that is written.
+WriteMakefile(
+ 'NAME' => 'Spreadsheet::ParseExcel',
+ 'VERSION_FROM' => 'ParseExcel.pm', # finds $VERSION
+ 'PREREQ_PM' => { OLE::Storage_Lite => 0.08 },
+);
Added: packages/libspreadsheet-parseexcel-perl/branches/upstream/current/ParseExcel/Dump.pm
===================================================================
--- packages/libspreadsheet-parseexcel-perl/branches/upstream/current/ParseExcel/Dump.pm 2005-01-25 02:10:47 UTC (rev 660)
+++ packages/libspreadsheet-parseexcel-perl/branches/upstream/current/ParseExcel/Dump.pm 2005-01-25 15:06:55 UTC (rev 661)
@@ -0,0 +1,186 @@
+# Spreadsheet::ParseExcel::Dump
+# by Kawai, Takanori (Hippo2000) 2001.2.2
+# This Program is ALPHA version.
+#==============================================================================
+# Spreadsheet::ParseExcel::Dump
+#==============================================================================
+package Spreadsheet::ParseExcel::Dump;
+require Exporter;
+use strict;
+use vars qw($VERSION @ISA);
+ at ISA = qw(Exporter);
+$VERSION=0.01;
+sub subDUMP($$$$);
+sub OpName($);
+my %NameTbl = (
+#P291
+ 0x0A =>'EOF', 0x0C =>'CALCCOUNT',
+ 0x0D =>'CALCMODE', 0x0E =>'PRECISION',
+ 0x0F =>'REFMODE', 0x10 =>'DELTA',
+ 0x11 =>'ITERATION', 0x12 =>'PROTECT',
+ 0x13 =>'PASSWORD', 0x14 =>'HEADER',
+
+ 0x15 =>'FOOTER', 0x16 =>'EXTERNCOUNT',
+ 0x17 =>'EXTERNSHEET', 0x19 =>'WINDOWPROTECT',
+ 0x1A =>'VERTICALPAGEBREAKS', 0x1B =>'HORIZONTALPAGEBREAKS',
+ 0x1C =>'NOTE', 0x1D =>'SELECTION',
+ 0x22 =>'1904', 0x26 =>'LEFTMARGIN',
+
+ 0x27 =>'RIGHTMARGIN', 0x28 =>'TOPMARGIN',
+ 0x29 =>'BOTTOMMARGIN', 0x2A =>'PRINTHEADERS',
+ 0x2B =>'PRINTGRIDLINES', 0x2F =>'FILEPASS',
+ 0x3C =>'COUNTINUE', 0x3D =>'WINDOW1',
+ 0x40 =>'BACKUP', 0x41 =>'PANE',
+
+ 0x42 =>'CODEPAGE', 0x4D =>'PLS',
+ 0x50 =>'DCON', 0x51 =>'DCONREF',
+#P292
+ 0x52 =>'DCONNAME', 0x55 =>'DEFCOLWIDTH',
+ 0x59 =>'XCT', 0x5A =>'CRN',
+ 0x5B =>'FILESHARING', 0x5C =>'WRITEACCES',
+ 0x5D =>'OBJ', 0x5E =>'UNCALCED',
+ 0x5F =>'SAVERECALC', 0x60 =>'TEMPLATE',
+
+ 0x63 =>'OBJPROTECT', 0x7D =>'COLINFO',
+ 0x7E =>'RK', 0x7F =>'IMDATA',
+ 0x80 =>'GUTS', 0x81 =>'WSBOOL',
+ 0x82 =>'GRIDSET', 0x83 =>'HCENTER',
+ 0x84 =>'VCENTER', 0x85 =>'BOUNDSHEET',
+
+ 0x86 =>'WRITEPROT', 0x87 =>'ADDIN',
+ 0x88 =>'EDG', 0x89 =>'PUB',
+ 0x8C =>'COUNTRY', 0x8D =>'HIDEOBJ',
+ 0x90 =>'SORT', 0x91 =>'SUB',
+ 0x92 =>'PALETTE', 0x94 =>'LHRECORD',
+
+ 0x95 =>'LHNGRAPH', 0x96 =>'SOUND',
+ 0x98 =>'LPR', 0x99 =>'STANDARDWIDTH',
+ 0x9A =>'FNGROUPNAME', 0x9B =>'FILTERMODE',
+ 0x9C =>'FNGROUPCOUNT',
+#P293
+ 0x9D =>'AUTOFILTERINFO', 0x9E =>'AUTOFILTER',
+ 0xA0 =>'SCL', 0xA1 =>'SETUP',
+ 0xA9 =>'COORDLIST', 0xAB =>'GCW',
+ 0xAE =>'SCENMAN', 0xAF =>'SCENARIO',
+ 0xB0 =>'SXVIEW', 0xB1 =>'SXVD',
+
+ 0xB2 =>'SXV', 0xB4 =>'SXIVD',
+ 0xB5 =>'SXLI', 0xB6 =>'SXPI',
+ 0xB8 =>'DOCROUTE', 0xB9 =>'RECIPNAME',
+ 0xBC =>'SHRFMLA', 0xBD =>'MULRK',
+ 0xBE =>'MULBLANK', 0xBF =>'TOOLBARHDR',
+ 0xC0 =>'TOOLBAREND', 0xC1 =>'MMS',
+
+ 0xC2 =>'ADDMENU', 0xC3 =>'DELMENU',
+ 0xC5 =>'SXDI', 0xC6 =>'SXDB',
+ 0xCD =>'SXSTRING', 0xD0 =>'SXTBL',
+ 0xD1 =>'SXTBRGIITM', 0xD2 =>'SXTBPG',
+ 0xD3 =>'OBPROJ', 0xD5 =>'SXISDTM',
+
+ 0xD6 =>'RSTRING', 0xD7 =>'DBCELL',
+ 0xDA =>'BOOKBOOL', 0xDC =>'PARAMQRY',
+ 0xDC =>'SXEXT', 0xDD =>'SCENPROTECT',
+ 0xDE =>'OLESIZE',
+#P294
+ 0xDF =>'UDDESC', 0xE0 =>'XF',
+ 0xE1 =>'INTERFACEHDR', 0xE2 =>'INTERFACEEND',
+ 0xE3 =>'SXVS', 0xEA =>'TABIDCONF',
+ 0xEB =>'MSODRAWINGGROUP', 0xEC =>'MSODRAWING',
+ 0xED =>'MSODRAWINGSELECTION', 0xEF =>'PHONETICINFO',
+ 0xF0 =>'SXRULE',
+
+ 0xF1 =>'SXEXT', 0xF2 =>'SXFILT',
+ 0xF6 =>'SXNAME', 0xF7 =>'SXSELECT',
+ 0xF8 =>'SXPAIR', 0xF9 =>'SXFMLA',
+ 0xFB =>'SXFORMAT', 0xFC =>'SST',
+ 0xFD =>'LABELSST', 0xFF =>'EXTSST',
+
+ 0x100 =>'SXVDEX', 0x103 =>'SXFORMULA',
+ 0x122 =>'SXDBEX', 0x13D =>'TABID',
+ 0x160 =>'USESELFS', 0x161 =>'DSF',
+ 0x162 =>'XL5MODIFY', 0x1A5 =>'FILESHARING2',
+ 0x1A9 =>'USERBVIEW', 0x1AA =>'USERVIEWBEGIN',
+
+ 0x1AB =>'USERSVIEWEND', 0x1AD =>'QSI',
+ 0x1AE =>'SUPBOOK', 0x1AF =>'PROT4REV',
+ 0x1B0 =>'CONDFMT', 0x1B1 =>'CF',
+ 0x1B2 =>'DVAL',
+#P295
+ 0x1B5 =>'DCONBIN', 0x1B6 =>'TXO',
+ 0x1B7 =>'REFRESHALL', 0x1B8 =>'HLINK',
+ 0x1BA =>'CODENAME', 0x1BB =>'SXFDBTYPE',
+ 0x1BC =>'PROT4REVPASS', 0x1BE =>'DV',
+ 0x200 =>'DIMENSIONS', 0x201 =>'BLANK',
+
+ 0x202 =>'Integer', #Not Documented
+ 0x203 =>'NUMBER', 0x204 =>'LABEL',
+ 0x205 =>'BOOLERR', 0x207 =>'STRING',
+ 0x208 =>'ROW', 0x20B =>'INDEX',
+ 0x218 =>'NAME', 0x221 =>'ARRAY',
+ 0x223 =>'EXTERNNAME', 0x225 =>'DEFAULTROWHEIGHT',
+
+ 0x231 =>'FONT', 0x236 =>'TABLE',
+ 0x23E =>'WINDOW2', 0x293 =>'STYLE',
+ 0x406 =>'FORMULA', 0x41E =>'FORMAT',
+
+ 0x18 =>'NAME',
+
+ 0x06 => 'FORMULA',
+
+ 0x09 => 'BOF(BIFF2)', 0x209 =>'BOF(BIFF3)',
+ 0x409 => 'BOF(BIFF4)', 0x809 =>'BOF(BIFF5-7)',
+
+ 0x31 =>'FONT', 0x27E =>'RK',
+
+ #Chart/Graph
+ 0x1001 => 'UNITS', 0x1002 => 'CHART',
+ 0x1003 => 'SERISES', 0x1006 => 'DATAFORMAT',
+ 0x1007 => 'LINEFORMAT', 0x1009 => 'MAKERFORMAT',
+ 0x100A => 'AREAFORMAT', 0x100B => 'PIEFORMAT',
+ 0x100C => 'ATTACHEDLABEL', 0x100D => 'SERIESTEXT',
+ 0x1014 => 'CHARTFORMAT', 0x1015 => 'LEGEND',
+ 0x1016 => 'SERIESLIST', 0x1017 => 'BAR',
+ 0x1018 => 'LINE', 0x1019 => 'PIE',
+ 0x101A => 'AREA', 0x101B => 'SCATTER',
+ 0x101C => 'CHARTLINE', 0x101D => 'AXIS',
+ 0x101E => 'TICK', 0x101F => 'VALUERANGE',
+ 0x1020 => 'CATSERRANGE', 0x1021 => 'AXISLINEFORMAT',
+ 0x1022 => 'CHARTFORMATLINK', 0x1024 => 'DEFAULTTEXT',
+ 0x1025 => 'TEXT', 0x1026 => 'FONTX',
+ 0x1027 => 'OBJECTLINK', 0x1032 => 'FRAME',
+ 0x1033 => 'BEGIN', 0x1034 => 'END',
+ 0x1035 => 'PLOTAREA', 0x103A => '3D',
+ 0x103C => 'PICF', 0x103D => 'DROPBAR',
+ 0x103E => 'RADAR', 0x103F => 'SURFACE',
+ 0x1040 => 'RADARAREA', 0x1041 => 'AXISPARENT',
+ 0x1043 => 'LEGENDXN', 0x1044 => 'SHTPROPS',
+ 0x1045 => 'SERTOCRT', 0x1046 => 'AXESUSED',
+ 0x1048 => 'SBASEREF', 0x104A => 'SERPARENT',
+ 0x104B => 'SERAUXTREND', 0x104E => 'IFMT',
+ 0x104F => 'POS', 0x1050 => 'ALRUNS',
+ 0x1051 => 'AI', 0x105B => 'SERAUXERRBAR',
+ 0x105D => 'SERFMT', 0x1060 => 'FBI',
+ 0x1061 => 'BOPPOP', 0x1062 => 'AXCEXT',
+ 0x1063 => 'DAT', 0x1064 => 'PLOTGROWTH',
+ 0x1065 => 'SINDEX', 0x1066 => 'GELFRAME',
+ 0x1067 => 'BPOPPOPCUSTOM',
+ );
+#------------------------------------------------------------------------------
+# subDUMP (for Spreadsheet::ParseExcel)
+#------------------------------------------------------------------------------
+sub subDUMP($$$$)
+{
+ my($oBook, $bOp, $bLen, $sWk) = @_;
+ printf "%04X:%-23s (Len:%3d) : %s\n",
+ $bOp, OpName($bOp), $bLen, unpack("H40",$sWk);
+}
+#------------------------------------------------------------------------------
+# Spreadsheet::ParseExcel->OpName
+#------------------------------------------------------------------------------
+sub OpName($) {
+ my($bOp)=@_;
+ return (defined $NameTbl{$bOp})? $NameTbl{$bOp}: 'undef';
+}
+1;
+__END__
+
Added: packages/libspreadsheet-parseexcel-perl/branches/upstream/current/ParseExcel/FmtDefault.pm
===================================================================
--- packages/libspreadsheet-parseexcel-perl/branches/upstream/current/ParseExcel/FmtDefault.pm 2005-01-25 02:10:47 UTC (rev 660)
+++ packages/libspreadsheet-parseexcel-perl/branches/upstream/current/ParseExcel/FmtDefault.pm 2005-01-25 15:06:55 UTC (rev 661)
@@ -0,0 +1,152 @@
+# Spreadsheet::ParseExcel::FmtDefault
+# by Kawai, Takanori (Hippo2000) 2001.2.2
+# This Program is ALPHA version.
+#==============================================================================
+package Spreadsheet::ParseExcel::FmtDefault;
+require Exporter;
+use strict;
+use Spreadsheet::ParseExcel::Utility qw(ExcelFmt);
+use vars qw($VERSION @ISA);
+ at ISA = qw(Exporter);
+$VERSION = '0.05'; #
+
+my %hFmtDefault = (
+ 0x00 => '@',
+ 0x01 => '0',
+ 0x02 => '0.00',
+ 0x03 => '#,##0',
+ 0x04 => '#,##0.00',
+ 0x05 => '($#,##0_);($#,##0)',
+ 0x06 => '($#,##0_);[RED]($#,##0)',
+ 0x07 => '($#,##0.00_);($#,##0.00_)',
+ 0x08 => '($#,##0.00_);[RED]($#,##0.00_)',
+ 0x09 => '0%',
+ 0x0A => '0.00%',
+ 0x0B => '0.00E+00',
+ 0x0C => '# ?/?',
+ 0x0D => '# ??/??',
+ 0x0E => 'm-d-yy',
+ 0x0F => 'd-mmm-yy',
+ 0x10 => 'd-mmm',
+ 0x11 => 'mmm-yy',
+ 0x12 => 'h:mm AM/PM',
+ 0x13 => 'h:mm:ss AM/PM',
+ 0x14 => 'h:mm',
+ 0x15 => 'h:mm:ss',
+ 0x16 => 'm-d-yy h:mm',
+#0x17-0x24 -- Differs in Natinal
+ 0x25 => '(#,##0_);(#,##0)',
+ 0x26 => '(#,##0_);[RED](#,##0)',
+ 0x27 => '(#,##0.00);(#,##0.00)',
+ 0x28 => '(#,##0.00);[RED](#,##0.00)',
+ 0x29 => '_(*#,##0_);_(*(#,##0);_(*"-"_);_(@_)',
+ 0x2A => '_($*#,##0_);_($*(#,##0);_(*"-"_);_(@_)',
+ 0x2B => '_(*#,##0.00_);_(*(#,##0.00);_(*"-"??_);_(@_)',
+ 0x2C => '_($*#,##0.00_);_($*(#,##0.00);_(*"-"??_);_(@_)',
+ 0x2D => 'mm:ss',
+ 0x2E => '[h]:mm:ss',
+ 0x2F => 'mm:ss.0',
+ 0x30 => '##0.0E+0',
+ 0x31 => '@',
+);
+#------------------------------------------------------------------------------
+# new (for Spreadsheet::ParseExcel::FmtDefault)
+#------------------------------------------------------------------------------
+sub new($;%) {
+ my($sPkg, %hKey) = @_;
+ my $oThis={
+ };
+ bless $oThis;
+ return $oThis;
+}
+#------------------------------------------------------------------------------
+# TextFmt (for Spreadsheet::ParseExcel::FmtDefault)
+#------------------------------------------------------------------------------
+sub TextFmt($$;$) {
+ my($oThis, $sTxt, $sCode) =@_;
+ return $sTxt if((! defined($sCode)) || ($sCode eq '_native_'));
+ return pack('C*', unpack('n*', $sTxt));
+}
+#------------------------------------------------------------------------------
+# FmtStringDef (for Spreadsheet::ParseExcel::FmtDefault)
+#------------------------------------------------------------------------------
+sub FmtStringDef($$$;$) {
+ my($oThis, $iFmtIdx, $oBook, $rhFmt) =@_;
+ my $sFmtStr = $oBook->{FormatStr}->{$iFmtIdx};
+
+ if(!(defined($sFmtStr)) && defined($rhFmt)) {
+ $sFmtStr = $rhFmt->{$iFmtIdx};
+ }
+ $sFmtStr = $hFmtDefault{$iFmtIdx} unless($sFmtStr);
+ return $sFmtStr;
+}
+#------------------------------------------------------------------------------
+# FmtString (for Spreadsheet::ParseExcel::FmtDefault)
+#------------------------------------------------------------------------------
+sub FmtString($$$) {
+ my($oThis, $oCell, $oBook) =@_;
+
+ my $sFmtStr = $oThis->FmtStringDef(
+ $oBook->{Format}[$oCell->{FormatNo}]->{FmtIdx}, $oBook);
+
+ unless(defined($sFmtStr)) {
+ if ($oCell->{Type} eq 'Numeric') {
+ if(int($oCell->{Val}) != $oCell->{Val}) {
+ $sFmtStr = '0.00';
+ }
+ else {
+ $sFmtStr = '0';
+ }
+ }
+ elsif($oCell->{Type} eq 'Date') {
+ if(int($oCell->{Val}) <= 0) {
+ $sFmtStr = 'h:mm:ss';
+ }
+ else {
+ $sFmtStr = 'm-d-yy';
+ }
+ }
+ else {
+ $sFmtStr = '@';
+ }
+ }
+ return $sFmtStr;
+}
+#------------------------------------------------------------------------------
+# ValFmt (for Spreadsheet::ParseExcel::FmtDefault)
+#------------------------------------------------------------------------------
+sub ValFmt($$$) {
+ my($oThis, $oCell, $oBook) =@_;
+
+ my($Dt, $iFmtIdx, $iNumeric, $Flg1904);
+
+ if ($oCell->{Type} eq 'Text') {
+ $Dt = ((defined $oCell->{Val}) && ($oCell->{Val} ne ''))?
+ $oThis->TextFmt($oCell->{Val}, $oCell->{Code}):'';
+ }
+ else {
+ $Dt = $oCell->{Val};
+ }
+ $Flg1904 = $oBook->{Flg1904};
+ my $sFmtStr = $oThis->FmtString($oCell, $oBook);
+ return ExcelFmt($sFmtStr, $Dt, $Flg1904, $oCell->{Type});
+}
+#------------------------------------------------------------------------------
+# ChkType (for Spreadsheet::ParseExcel::FmtDefault)
+#------------------------------------------------------------------------------
+sub ChkType($$$) {
+ my($oPkg, $iNumeric, $iFmtIdx) =@_;
+ if ($iNumeric) {
+ if((($iFmtIdx >= 0x0E) && ($iFmtIdx <= 0x16)) ||
+ (($iFmtIdx >= 0x2D) && ($iFmtIdx <= 0x2F))) {
+ return "Date";
+ }
+ else {
+ return "Numeric";
+ }
+ }
+ else {
+ return "Text";
+ }
+}
+1;
Added: packages/libspreadsheet-parseexcel-perl/branches/upstream/current/ParseExcel/FmtJapan.pm
===================================================================
--- packages/libspreadsheet-parseexcel-perl/branches/upstream/current/ParseExcel/FmtJapan.pm 2005-01-25 02:10:47 UTC (rev 660)
+++ packages/libspreadsheet-parseexcel-perl/branches/upstream/current/ParseExcel/FmtJapan.pm 2005-01-25 15:06:55 UTC (rev 661)
@@ -0,0 +1,155 @@
+# Spreadsheet::ParseExcel::FmtJapan
+# by Kawai, Takanori (Hippo2000) 2001.2.2
+# This Program is ALPHA version.
+#==============================================================================
+package Spreadsheet::ParseExcel::FmtJapan;
+require Exporter;
+use strict;
+use Spreadsheet::ParseExcel::FmtDefault;
+use Jcode;
+use vars qw($VERSION @ISA);
+ at ISA = qw(Spreadsheet::ParseExcel::FmtDefault Exporter);
+
+$VERSION = '0.05'; #
+my %hFmtJapan = (
+ 0x00 => '@',
+ 0x01 => '0',
+ 0x02 => '0.00',
+ 0x03 => '#,##0',
+ 0x04 => '#,##0.00',
+ 0x05 => '(\\#,##0_);(\\#,##0)',
+ 0x06 => '(\\#,##0_);[RED](\\#,##0)',
+ 0x07 => '(\\#,##0.00_);(\\#,##0.00_)',
+ 0x08 => '(\\#,##0.00_);[RED](\\#,##0.00_)',
+ 0x09 => '0%',
+ 0x0A => '0.00%',
+ 0x0B => '0.00E+00',
+ 0x0C => '# ?/?',
+ 0x0D => '# ??/??',
+# 0x0E => 'm/d/yy',
+ 0x0E => 'yyyy/m/d',
+ 0x0F => 'd-mmm-yy',
+ 0x10 => 'd-mmm',
+ 0x11 => 'mmm-yy',
+ 0x12 => 'h:mm AM/PM',
+ 0x13 => 'h:mm:ss AM/PM',
+ 0x14 => 'h:mm',
+ 0x15 => 'h:mm:ss',
+# 0x16 => 'm/d/yy h:mm',
+ 0x16 => 'yyyy/m/d h:mm',
+
+#0x17-0x24 -- Differs in Natinal
+ 0x1E => 'm/d/yy',
+ 0x1F => 'yyyy"ǯ"m"·î"d"Æü"',
+ 0x20 => 'h"»þ"mm"ʬ"',
+ 0x21 => 'h"»þ"mm"ʬ"ss"ÉÃ"',
+#0x17-0x24 -- Differs in Natinal
+ 0x25 => '(#,##0_);(#,##0)',
+ 0x26 => '(#,##0_);[RED](#,##0)',
+ 0x27 => '(#,##0.00);(#,##0.00)',
+ 0x28 => '(#,##0.00);[RED](#,##0.00)',
+ 0x29 => '_(*#,##0_);_(*(#,##0);_(*"-"_);_(@_)',
+ 0x2A => '_(\\*#,##0_);_(\\*(#,##0);_(*"-"_);_(@_)',
+ 0x2B => '_(*#,##0.00_);_(*(#,##0.00);_(*"-"??_);_(@_)',
+ 0x2C => '_(\\*#,##0.00_);_(\\*(#,##0.00);_(*"-"??_);_(@_)',
+ 0x2D => 'mm:ss',
+ 0x2E => '[h]:mm:ss',
+ 0x2F => 'mm:ss.0',
+ 0x30 => '##0.0E+0',
+ 0x31 => '@',
+
+ 0x37 => 'yyyy"ǯ"m"·î"',
+ 0x38 => 'm"·î"d"Æü"',
+ 0x39 => 'ge.m.d',
+ 0x3A => 'ggge"ǯ"m"·î"d"Æü"',
+);
+my $_Code;
+#------------------------------------------------------------------------------
+# new (for Spreadsheet::ParseExcel::FmtJapan)
+#------------------------------------------------------------------------------
+sub new($%) {
+ my($sPkg, %hKey) = @_;
+ my $oThis={
+ Code => $hKey{Code},
+ };
+ if($oThis->{Code}) {
+ foreach my $sKey (keys %hFmtJapan) {
+ $hFmtJapan{$sKey} =
+ Jcode::convert($hFmtJapan{$sKey}, $oThis->{Code}, 'euc');
+ }
+ $_Code = $oThis->{Code};
+ }
+ bless $oThis;
+ return $oThis;
+}
+#------------------------------------------------------------------------------
+# TextFmt (for Spreadsheet::ParseExcel::FmtJapan)
+#------------------------------------------------------------------------------
+sub TextFmt($$;$) {
+ my($oThis, $sTxt, $sCode) =@_;
+
+ if($oThis->{Code}) {
+ if(! defined($sCode)) {
+ $sTxt =~ s/(.)/\x00$1/sg;
+ $sCode = 'ucs2';
+ }
+ elsif($sCode eq '_native_') {
+ $sCode = 'sjis';
+ }
+ return Jcode::convert($sTxt, $oThis->{Code}, $sCode);
+ }
+ else {
+ return $sTxt;
+ }
+}
+#------------------------------------------------------------------------------
+# FmtStringDef (for Spreadsheet::ParseExcel::FmtJapan)
+#------------------------------------------------------------------------------
+sub FmtStringDef($$$) {
+ my($oThis, $iFmtIdx, $oBook) =@_;
+ return $oThis->SUPER::FmtStringDef($iFmtIdx, $oBook, \%hFmtJapan);
+}
+#------------------------------------------------------------------------------
+# ValFmt (for Spreadsheet::ParseExcel::FmtJapan)
+#------------------------------------------------------------------------------
+sub ValFmt($$$) {
+ my($oThis, $oCell, $oBook) =@_;
+ return $oThis->SUPER::ValFmt($oCell, $oBook);
+}
+#------------------------------------------------------------------------------
+# ChkType (for Spreadsheet::ParseExcel::FmtJapan)
+#------------------------------------------------------------------------------
+sub ChkType($$$) {
+ my($oPkg, $iNumeric, $iFmtIdx) =@_;
+# Is there something special for Japan?
+ return $oPkg->SUPER::ChkType($iNumeric, $iFmtIdx);
+}
+#------------------------------------------------------------------------------
+# CnvNengo (for Spreadsheet::ParseExcel::FmtJapan)
+#------------------------------------------------------------------------------
+sub CnvNengo($@) {
+ my($iKind, @aTime) = @_;
+ my $iWk = sprintf('%04d%02d%02d', $aTime[5], $aTime[4], $aTime[3]);
+ if($iWk lt '19120730') {
+ my $iY = $aTime[5] - 1867;
+ return ($iKind == 1)? "M$iY" :
+ Jcode::convert("ÌÀ¼£$iY", $_Code, 'euc');
+ }
+ elsif($iWk lt '19261225') {
+ my $iY = $aTime[5] - 1911;
+ return ($iKind == 1)? "T$iY" :
+ Jcode::convert("ÂçÀµ$iY", $_Code, 'euc');
+ }
+ elsif($iWk lt '19890108' ) {
+ my $iY = $aTime[5] - 1925;
+ return ($iKind == 1)? "S$iY" :
+ Jcode::convert("¾¼ÏÂ$iY", $_Code, 'euc');
+ }
+ else {
+ my $iY = $aTime[5] - 1988;
+ return ($iKind == 1)? "H$iY" :
+ Jcode::convert("Ê¿À®$iY", $_Code, 'euc');
+ }
+}
+
+1;
Added: packages/libspreadsheet-parseexcel-perl/branches/upstream/current/ParseExcel/FmtJapan2.pm
===================================================================
--- packages/libspreadsheet-parseexcel-perl/branches/upstream/current/ParseExcel/FmtJapan2.pm 2005-01-25 02:10:47 UTC (rev 660)
+++ packages/libspreadsheet-parseexcel-perl/branches/upstream/current/ParseExcel/FmtJapan2.pm 2005-01-25 15:06:55 UTC (rev 661)
@@ -0,0 +1,52 @@
+# Spreadsheet::ParseExcel::FmtJapan2
+# by Kawai, Takanori (Hippo2000) 2001.2.2
+# This Program is ALPHA version.
+#==============================================================================
+package Spreadsheet::ParseExcel::FmtJapan2;
+require Exporter;
+use strict;
+use Jcode;
+use Unicode::Map;
+use Spreadsheet::ParseExcel::FmtJapan;
+use vars qw($VERSION @ISA);
+ at ISA = qw(Spreadsheet::ParseExcel::FmtJapan Exporter);
+$VERSION = '0.05'; #
+
+#------------------------------------------------------------------------------
+# new (for Spreadsheet::ParseExcel::FmtJapan2)
+#------------------------------------------------------------------------------
+sub new($%) {
+ my($sPkg, %hKey) = @_;
+ my $oMap = Unicode::Map->new('CP932Excel');
+ die "NO MAP FILE CP932Excel!!"
+ unless(-r Unicode::Map->mapping("CP932Excel"));
+
+ my $oThis={
+ Code => $hKey{Code},
+ _UniMap => $oMap,
+ };
+ bless $oThis;
+ $oThis->SUPER::new(%hKey);
+ return $oThis;
+}
+#------------------------------------------------------------------------------
+# TextFmt (for Spreadsheet::ParseExcel::FmtJapan2)
+#------------------------------------------------------------------------------
+sub TextFmt($$;$) {
+ my($oThis, $sTxt, $sCode) =@_;
+# $sCode = 'sjis' if((! defined($sCode)) || ($sCode eq '_native_'));
+ if($oThis->{Code}) {
+ if(! defined($sCode)) {
+ $sTxt =~ s/(.)/\x00$1/sg;
+ $sTxt = $oThis->{_UniMap}->from_unicode($sTxt);
+ }
+ elsif($sCode eq 'ucs2') {
+ $sTxt = $oThis->{_UniMap}->from_unicode($sTxt);
+ }
+ return Jcode::convert($sTxt, $oThis->{Code}, 'sjis');
+ }
+ else {
+ return $sTxt;
+ }
+}
+1;
Added: packages/libspreadsheet-parseexcel-perl/branches/upstream/current/ParseExcel/FmtUnicode.pm
===================================================================
--- packages/libspreadsheet-parseexcel-perl/branches/upstream/current/ParseExcel/FmtUnicode.pm 2005-01-25 02:10:47 UTC (rev 660)
+++ packages/libspreadsheet-parseexcel-perl/branches/upstream/current/ParseExcel/FmtUnicode.pm 2005-01-25 15:06:55 UTC (rev 661)
@@ -0,0 +1,52 @@
+# Spreadsheet::ParseExcel::FmtUnicode
+# by Kawai, Takanori (Hippo2000) 2000.12.20
+# 2001.2.2
+# This Program is ALPHA version.
+#==============================================================================
+package Spreadsheet::ParseExcel::FmtUnicode;
+require Exporter;
+use strict;
+use Spreadsheet::ParseExcel::FmtDefault;
+use vars qw($VERSION @ISA);
+ at ISA = qw(Spreadsheet::ParseExcel::FmtDefault Exporter);
+$VERSION = '0.05'; #
+use Unicode::Map;
+#------------------------------------------------------------------------------
+# new (for Spreadsheet::ParseExcel::FmtUnicode)
+#------------------------------------------------------------------------------
+sub new($%) {
+ my($sPkg, %hKey) = @_;
+ my $sMap = $hKey{Unicode_Map};
+ my $oMap;
+ $oMap = Unicode::Map->new($sMap) if $sMap;
+ my $oThis={
+ Unicode_Map => $sMap,
+ _UniMap => $oMap,
+ };
+ bless $oThis;
+ return $oThis;
+}
+#------------------------------------------------------------------------------
+# TextFmt (for Spreadsheet::ParseExcel::FmtUnicode)
+#------------------------------------------------------------------------------
+sub TextFmt($$;$) {
+ my($oThis, $sTxt, $sCode) =@_;
+ if($oThis->{_UniMap}) {
+ if(! defined($sCode)) {
+ my $sSv = $sTxt;
+ $sTxt =~ s/(.)/\x00$1/sg;
+ $sTxt = $oThis->{_UniMap}->from_unicode($sTxt);
+ $sTxt = $sSv unless($sTxt);
+ }
+ elsif($sCode eq 'ucs2') {
+ $sTxt = $oThis->{_UniMap}->from_unicode($sTxt);
+ }
+# $sTxt = $oThis->{_UniMap}->from_unicode($sTxt)
+# if(defined($sCode) && $sCode eq 'ucs2');
+ return $sTxt;
+ }
+ else {
+ return $sTxt;
+ }
+}
+1;
Added: packages/libspreadsheet-parseexcel-perl/branches/upstream/current/ParseExcel/SaveParser.pm
===================================================================
--- packages/libspreadsheet-parseexcel-perl/branches/upstream/current/ParseExcel/SaveParser.pm 2005-01-25 02:10:47 UTC (rev 660)
+++ packages/libspreadsheet-parseexcel-perl/branches/upstream/current/ParseExcel/SaveParser.pm 2005-01-25 15:06:55 UTC (rev 661)
@@ -0,0 +1,761 @@
+# Spreadsheet::ParseExcel::SaveParser
+# by Kawai, Takanori (Hippo2000) 2001.5.1
+# This Program is ALPHA version.
+#//////////////////////////////////////////////////////////////////////////////
+# Spreadsheet::ParseExcel:.SaveParser Objects
+#//////////////////////////////////////////////////////////////////////////////
+#==============================================================================
+# Spreadsheet::ParseExcel::SaveParser::Workbook
+#==============================================================================
+package Spreadsheet::ParseExcel::SaveParser::Workbook;
+require Exporter;
+use strict;
+use vars qw($VERSION @ISA);
+ at ISA = qw(Spreadsheet::ParseExcel::Workbook Exporter);
+$VERSION = '0.06'; #
+sub new($$) {
+ my($sPkg, $oBook) = @_;
+ return undef unless(defined $oBook);
+ my %oThis = %$oBook;
+ bless \%oThis, $sPkg;
+
+ # re-bless worksheets (and set their _Book properties !!!)
+ my $sWkP = ref($sPkg) || "$sPkg";
+ $sWkP =~ s/Workbook$/Worksheet/;
+ map { bless($_, $sWkP); } @{$oThis{Worksheet}};
+ map { $_->{_Book} = \%oThis; } @{$oThis{Worksheet}};
+ return \%oThis;
+}
+#------------------------------------------------------------------------------
+# Parse (for Spreadsheet::ParseExcel::SaveParser::Workbook)
+#------------------------------------------------------------------------------
+sub Parse($$;$) {
+ my($sClass, $sFile, $oWkFmt)=@_;
+ my $oBook = Spreadsheet::ParseExcel::Workbook->Parse($sFile, $oWkFmt);
+ bless $oBook, $sClass;
+
+ # re-bless worksheets (and set their _Book properties !!!)
+ my $sWkP = ref($sClass) || "$sClass";
+ $sWkP =~ s/Workbook$/Worksheet/;
+ map { bless($_, $sWkP); } @{$oBook->{Worksheet}};
+ map { $_->{_Book} = $oBook; } @{$oBook->{Worksheet}};
+ return $oBook;
+}
+#------------------------------------------------------------------------------
+# SaveAs (for Spreadsheet::ParseExcel::SaveParser::Workbook)
+#------------------------------------------------------------------------------
+sub SaveAs($$){
+ my ($oBook, $sName)=@_;
+ # Create a new Excel workbook
+ my $oWrEx = Spreadsheet::WriteExcel->new($sName);
+ my %hFmt;
+
+ my $iNo = 0;
+ my @aAlH = ('left', 'left', 'center', 'right', 'fill', 'justify', 'merge', 'equal_space');
+ my @aAlV = ('top' , 'vcenter', 'bottom', 'vjustify', 'vequal_space');
+
+ foreach my $pFmt (@{$oBook->{Format}}) {
+ my $oFmt = $oWrEx->addformat(); # Add Formats
+ unless($pFmt->{Style}) {
+ $hFmt{$iNo} = $oFmt;
+ my $rFont = $pFmt->{Font};
+
+ $oFmt->set_font($rFont->{Name});
+ $oFmt->set_size($rFont->{Height});
+ $oFmt->set_color($rFont->{Color});
+ $oFmt->set_bold($rFont->{Bold});
+ $oFmt->set_italic($rFont->{Italic});
+ $oFmt->set_underline($rFont->{Underline});
+ $oFmt->set_font_strikeout($rFont->{Strikeout});
+ $oFmt->set_font_script($rFont->{Super});
+
+ $oFmt->set_hidden($rFont->{Hidden}); #Add
+
+ $oFmt->set_locked($pFmt->{Lock});
+
+ $oFmt->set_align($aAlH[$pFmt->{AlignH}]);
+ $oFmt->set_align($aAlV[$pFmt->{AlignV}]);
+ if($pFmt->{Rotate}==0) {
+ $oFmt->set_rotation(0);
+ }
+ elsif($pFmt->{Rotate}> 0) { # Mainly ==90
+ $oFmt->set_rotation(3);
+ }
+ elsif($pFmt->{Rotate} < 0) { # Mainly == -90
+ $oFmt->set_rotation(2);
+ }
+ $oFmt->set_num_format($oBook->{FmtClass}->FmtStringDef($pFmt->{FmtIdx}, $oBook));
+
+ $oFmt->set_text_wrap($pFmt->{Wrap});
+
+ $oFmt->set_pattern($pFmt->{Fill}->[0]);
+ $oFmt->set_fg_color($pFmt->{Fill}->[1])
+ if(($pFmt->{Fill}->[1] >= 8) && ($pFmt->{Fill}->[1] <= 63));
+ $oFmt->set_bg_color($pFmt->{Fill}->[2])
+ if(($pFmt->{Fill}->[2] >= 8) && ($pFmt->{Fill}->[2] <= 63));
+
+ $oFmt->set_left (($pFmt->{BdrStyle}->[0]>7)? 3: $pFmt->{BdrStyle}->[0]);
+ $oFmt->set_right (($pFmt->{BdrStyle}->[1]>7)? 3: $pFmt->{BdrStyle}->[1]);
+ $oFmt->set_top (($pFmt->{BdrStyle}->[2]>7)? 3: $pFmt->{BdrStyle}->[2]);
+ $oFmt->set_bottom(($pFmt->{BdrStyle}->[3]>7)? 3: $pFmt->{BdrStyle}->[3]);
+
+ $oFmt->set_left_color ($pFmt->{BdrColor}->[0])
+ if(($pFmt->{BdrColor}->[0] >= 8) && ($pFmt->{BdrColor}->[0] <= 63));
+ $oFmt->set_right_color ($pFmt->{BdrColor}->[1])
+ if(($pFmt->{BdrColor}->[1] >= 8) && ($pFmt->{BdrColor}->[1] <= 63));
+ $oFmt->set_top_color ($pFmt->{BdrColor}->[2])
+ if(($pFmt->{BdrColor}->[2] >= 8) && ($pFmt->{BdrColor}->[2] <= 63));
+ $oFmt->set_bottom_color($pFmt->{BdrColor}->[3])
+ if(($pFmt->{BdrColor}->[3] >= 8) && ($pFmt->{BdrColor}->[3] <= 63));
+ }
+ $iNo++;
+ }
+ for(my $iSheet=0; $iSheet < $oBook->{SheetCount} ; $iSheet++) {
+ my $oWkS = $oBook->{Worksheet}[$iSheet];
+ my $oWrS = $oWrEx->addworksheet($oWkS->{Name});
+ #Landscape
+ if(!$oWkS->{Landscape}) { # Landscape (0:Horizontal, 1:Vertical)
+ $oWrS->set_landscape();
+ }
+ else {
+ $oWrS->set_portrait();
+ }
+ #Protect
+ if(defined $oWkS->{Protect}) { # Protect ('':NoPassword, Password:Password)
+ if ($oWkS->{Protect} ne '') {
+ $oWrS->protect($oWkS->{Protect});
+ }
+ else {
+ $oWrS->protect();
+ }
+ }
+ if(($oWkS->{FitWidth}==1) and ($oWkS->{FitHeight}==1)) {
+ # Pages on fit with width and Heigt
+ $oWrS->fit_to_pages($oWkS->{FitWidth}, $oWkS->{FitHeight});
+ #Print Scale
+ $oWrS->set_print_scale($oWkS->{Scale});
+ }
+ else {
+ #Print Scale
+ $oWrS->set_print_scale($oWkS->{Scale});
+ # Pages on fit with width and Heigt
+ $oWrS->fit_to_pages($oWkS->{FitWidth}, $oWkS->{FitHeight});
+ }
+ # Paper Size
+ $oWrS->set_paper($oWkS->{PaperSize});
+ # Margin
+ $oWrS->set_margin_left($oWkS->{LeftMergin} / 2.55);
+ $oWrS->set_margin_right($oWkS->{RightMergin} / 2.55);
+ $oWrS->set_margin_top($oWkS->{TopMergin} / 2.55);
+ $oWrS->set_margin_bottom($oWkS->{BottomMergin} / 2.55);
+ # HCenter
+ $oWrS->center_horizontally() if($oWkS->{HCenter});
+ # VCenter
+ $oWrS->center_vertically() if($oWkS->{VCenter});
+ # Header, Footer
+ $oWrS->set_header($oWkS->{Header}, $oWkS->{HeaderMergin}/2.55);
+ $oWrS->set_footer($oWkS->{Footer}, $oWkS->{FooterMergin}/2.55);
+ # Print Area
+ if(ref($oBook->{PrintArea}[$iSheet]) eq 'ARRAY') {
+ my $raP;
+ for $raP (@{$oBook->{PrintArea}[$iSheet]}) {
+ $oWrS->print_area(@$raP);
+ }
+ }
+
+ # Print Title
+ my $raW;
+ foreach $raW (@{$oBook->{PrintTitle}[$iSheet]->{Row}}) {
+ $oWrS->repeat_rows(@$raW);
+ }
+ foreach $raW (@{$oBook->{PrintTitle}[$iSheet]->{Column}}) {
+ $oWrS->repeat_columns(@$raW);
+ }
+ # Print Gridlines
+ if($oWkS->{PrintGrid}==1) {
+ $oWrS->hide_gridlines(0);
+ }
+ else {
+ $oWrS->hide_gridlines(1);
+ }
+ # Print Headings
+ if($oWkS->{PrintHeaders}) {
+ $oWrS->print_row_col_headers();
+ }
+ # Horizontal Page Breaks
+ $oWrS->set_h_pagebreaks(@{$oWkS->{HPageBreak}});
+ # Veritical Page Breaks
+ $oWrS->set_v_pagebreaks(@{$oWkS->{VPageBreak}});
+=pod
+
+ PageStart => $oWkS->{PageStart}, # Page number for start
+ UsePage => $oWkS->{UsePage}, # Use own start page number
+ NoColor => $oWkS->{NoColor}, # Print in blcak-white
+ Draft => $oWkS->{Draft}, # Print in draft mode
+ Notes => $oWkS->{Notes}, # Print notes
+ LeftToRight => $oWkS->{LeftToRight}, # Left to Right
+=cut
+ for(my $iC = $oWkS->{MinCol} ;
+ defined $oWkS->{MaxCol} && $iC <= $oWkS->{MaxCol} ; $iC++) {
+ if(defined $oWkS->{ColWidth}[$iC]) {
+ if($oWkS->{ColWidth}[$iC]>0) {
+ $oWrS->set_column($iC, $iC, $oWkS->{ColWidth}[$iC]);#, undef, 1) ;
+ }
+ else {
+ $oWrS->set_column($iC, $iC, 0, undef, 1) ;
+ }
+ }
+ }
+ for(my $iR = $oWkS->{MinRow} ;
+ defined $oWkS->{MaxRow} && $iR <= $oWkS->{MaxRow} ; $iR++) {
+ $oWrS->set_row($iR, $oWkS->{RowHeight}[$iR]);
+ for(my $iC = $oWkS->{MinCol} ;
+ defined $oWkS->{MaxCol} && $iC <= $oWkS->{MaxCol} ; $iC++) {
+
+ my $oWkC = $oWkS->{Cells}[$iR][$iC];
+ if($oWkC) {
+ if($oWkC->{Merged}) {
+ my $oFmtN = $oWrEx->addformat();
+ $oFmtN->copy($hFmt{$oWkC->{FormatNo}});
+ $oFmtN->set_merge(1);
+ $oWrS->write($iR , $iC, $oBook->{FmtClass}->TextFmt($oWkC->{Val}, $oWkC->{Code}),
+ $oFmtN);
+ }
+ else {
+ $oWrS->write($iR , $iC, $oBook->{FmtClass}->TextFmt($oWkC->{Val}, $oWkC->{Code}),
+ $hFmt{$oWkC->{FormatNo}});
+ }
+ }
+ }
+ }
+ }
+ return $oWrEx
+}
+#------------------------------------------------------------------------------
+# AddWorksheet (for Spreadsheet::ParseExcel::SaveParser::Workbook)
+#------------------------------------------------------------------------------
+sub AddWorksheet($$%) {
+ my($oBook, $sName, %hAttr) = @_;
+ $oBook->AddFormat if($#{$oBook->{Format}}<0);
+ $hAttr{Name} ||= $sName;
+ $hAttr{LeftMergin} ||= 0;
+ $hAttr{RightMergin} ||= 0;
+ $hAttr{TopMergin} ||= 0;
+ $hAttr{BottomMergin} ||= 0;
+ $hAttr{HeaderMergin} ||= 0;
+ $hAttr{FooterMergin} ||= 0;
+ $hAttr{FitWidth} ||= 0;
+ $hAttr{FitHeight} ||= 0;
+ $hAttr{PrintGrid} ||= 0;
+ my $oWkS = Spreadsheet::ParseExcel::SaveParser::Worksheet->new(%hAttr);
+ $oWkS->{_Book} = $oBook;
+ $oWkS->{_SheetNo} = $oBook->{SheetCount};
+ $oBook->{Worksheet}[$oBook->{SheetCount}] = $oWkS;
+ $oBook->{SheetCount}++;
+ return $oWkS; #$oBook->{SheetCount} - 1;
+}
+#------------------------------------------------------------------------------
+# AddFont (for Spreadsheet::ParseExcel::SaveParser::Workbook)
+#------------------------------------------------------------------------------
+sub AddFont($%){
+ my ($oBook, %hAttr) = @_;
+ $hAttr{Name} ||= 'Arial';
+ $hAttr{Height} ||= 10;
+ $hAttr{Bold} ||= 0;
+ $hAttr{Italic} ||= 0;
+ $hAttr{Underline}||= 0;
+ $hAttr{Strikeout}||= 0;
+ $hAttr{Super} ||= 0;
+ push @{$oBook->{Font}},
+ Spreadsheet::ParseExcel::Font->new(%hAttr);
+ return $#{$oBook->{Font}};
+}
+#------------------------------------------------------------------------------
+# AddFormat (for Spreadsheet::ParseExcel::SaveParser::Workbook)
+#------------------------------------------------------------------------------
+sub AddFormat($%){
+ my ($oBook, %hAttr) = @_;
+ $hAttr{Fill} ||= [0, 0, 0];
+ $hAttr{BdrStyle} ||= [0, 0, 0, 0];
+ $hAttr{BdrColor} ||= [0, 0, 0, 0];
+ $hAttr{AlignH} ||= 0;
+ $hAttr{AlignV} ||= 0;
+ $hAttr{Rotate} ||= 0;
+ $hAttr{Landscape} ||= 0;
+ $hAttr{FmtIdx} ||= 0;
+ if(!defined($hAttr{Font})) {
+ my $oFont;
+ if(defined $hAttr{FontNo}) {
+ $oFont = $oBook->{Font}[$hAttr{FontNo}];
+ }
+ elsif(!defined $oFont) {
+ if($#{$oBook->{Font}}>=0) {
+ $oFont = $oBook->{Font}[0];
+ }
+ else {
+ my $iNo = $oBook->AddFont;
+ $oFont = $oBook->{Font}[$iNo];
+ }
+ }
+ $hAttr{Font} = $oFont;
+ }
+ push @{$oBook->{Format}},
+ Spreadsheet::ParseExcel::Format->new(%hAttr);
+ return $#{$oBook->{Format}};
+}
+#------------------------------------------------------------------------------
+# AddCell (for Spreadsheet::ParseExcel::SaveParser::Workbook)
+#------------------------------------------------------------------------------
+sub AddCell($$$$$$;$) {
+ my($oBook, $iSheet, $iR, $iC, $sVal, $oCell, $sCode)=@_;
+ my %rhKey;
+ $oCell ||= 0;
+ my $iFmt = (UNIVERSAL::isa($oCell, 'Spreadsheet::ParseExcel::Cell'))?
+ $oCell->{FormatNo} : (ref($oCell))? 0: $oCell+0;
+ $rhKey{FormatNo} = $iFmt;
+ $rhKey{Format} = $oBook->{Format}[$iFmt];
+ $rhKey{Val} = $sVal;
+ $rhKey{Code} = $sCode || '_native_';
+ $oBook->{_CurSheet} = $iSheet;
+ my $oNewCell = Spreadsheet::ParseExcel::_NewCell($oBook, $iR, $iC, %rhKey);
+ Spreadsheet::ParseExcel::_SetDimension($oBook, $iR, $iC, $iC);
+ return $oNewCell;
+}
+1;
+#==============================================================================
+# Spreadsheet::ParseExcel::SaveParser::Worksheet
+#==============================================================================
+package Spreadsheet::ParseExcel::SaveParser::Worksheet;
+require Exporter;
+use strict;
+use vars qw($VERSION @ISA);
+ at ISA = qw(Spreadsheet::ParseExcel::Worksheet Exporter);
+sub new($%) {
+ my ($sClass, %rhIni) = @_;
+ $sClass->SUPER::new(%rhIni); # returns object
+}
+#------------------------------------------------------------------------------
+# AddCell (for Spreadsheet::ParseExcel::SaveParser::Worksheet)
+#------------------------------------------------------------------------------
+sub AddCell($$$$$;$) {
+ my($oSelf, $iR, $iC, $sVal, $oCell, $sCode)=@_;
+ $oSelf->{_Book}->AddCell($oSelf->{_SheetNo}, $iR, $iC, $sVal, $oCell, $sCode);
+}
+#------------------------------------------------------------------------------
+# Protect (for Spreadsheet::ParseExcel::SaveParser::Worksheet)
+# - Password = undef -> No protect
+# - Password = '' -> Protected. No password
+# - Password = $pwd -> Protected. Password = $pwd
+#------------------------------------------------------------------------------
+sub Protect {
+ my($oSelf, $sPassword)=@_;
+ $oSelf->{Protect} = $sPassword;
+}
+
+#==============================================================================
+# Spreadsheet::ParseExcel::SaveParser
+#==============================================================================
+package Spreadsheet::ParseExcel::SaveParser;
+require Exporter;
+use strict;
+use Spreadsheet::WriteExcel;
+use Spreadsheet::ParseExcel;
+use vars qw($VERSION @ISA);
+ at ISA = qw(Spreadsheet::ParseExcel Exporter);
+$VERSION = '0.01'; #
+use constant MagicCol => 1.14;
+#------------------------------------------------------------------------------
+# new (for Spreadsheet::ParseExcel::SaveParser)
+#------------------------------------------------------------------------------
+sub new($%) {
+ my($sPkg, %hKey) = @_;
+ $sPkg->SUPER::new(%hKey);
+}
+#------------------------------------------------------------------------------
+# Create
+#------------------------------------------------------------------------------
+sub Create($;$) {
+ my($oThis, $oWkFmt)=@_;
+#0. New $oBook
+ my $oBook = Spreadsheet::ParseExcel::Workbook->new;
+ $oBook->{SheetCount} = 0;
+#2. Ready for format
+ if ($oWkFmt) {
+ $oBook->{FmtClass} = $oWkFmt;
+ }
+ else {
+ $oBook->{FmtClass} = new Spreadsheet::ParseExcel::FmtDefault;
+ }
+ return Spreadsheet::ParseExcel::SaveParser::Workbook->new($oBook);
+}
+#------------------------------------------------------------------------------
+# Parse (for Spreadsheet::ParseExcel::SaveParser)
+#------------------------------------------------------------------------------
+sub Parse($$;$) {
+ my($oThis, $sFile, $oWkFmt)=@_;
+ my $oBook = $oThis->SUPER::Parse($sFile, $oWkFmt);
+ return undef unless(defined $oBook);
+ return Spreadsheet::ParseExcel::SaveParser::Workbook->new($oBook);
+}
+#------------------------------------------------------------------------------
+# SaveAs (for Spreadsheet::ParseExcel::SaveParser)
+#------------------------------------------------------------------------------
+sub SaveAs($$$){
+ my ($oThis, $oBook, $sName)=@_;
+ $oBook->SaveAs($sName);
+}
+1;
+
+__END__
+
+=head1 NAME
+
+Spreadsheet::ParseExcel::SaveParser - Expand of Spreadsheet::ParseExcel with Spreadsheet::WriteExcel
+
+=head1 SYNOPSIS
+
+ #1. Write an Excel file with previous data
+ use strict;
+ use Spreadsheet::ParseExcel::SaveParser;
+ my $oExcel = new Spreadsheet::ParseExcel::SaveParser;
+ my $oBook = $oExcel->Parse('temp.xls');
+ #1.1.Update and Insert Cells
+ my $iFmt = $oBook->{Worksheet}[0]->{Cells}[0][0]->{FormatNo};
+ $oBook->AddCell(0, 0, 0, 'No(UPD)',
+ $oBook->{Worksheet}[0]->{Cells}[0][0]->{FormatNo});
+ $oBook->AddCell(0, 1, 0, '304', $oBook->{Worksheet}[0]->{Cells}[0][0]);
+ $oBook->AddCell(0, 1, 1, 'Kawai,Takanori', $iFmt);
+ #1.2.add new worksheet
+ my $iWkN = $oBook->AddWorksheet('Test');
+ #1.3 Save
+ $oExcel->SaveAs($oBook, 'temp.xls'); # as the same name
+ $oExcel->SaveAs($oBook, 'temp1.xls'); # another name
+
+ #2. Create new Excel file (most simple)
+ use strict;
+ use Spreadsheet::ParseExcel::SaveParser;
+ my $oEx = new Spreadsheet::ParseExcel::SaveParser;
+ my $oBook = $oEx->Create();
+ $oBook->AddFormat;
+ $oBook->AddWorksheet('NewWS');
+ $oBook->AddCell(0, 0, 1, 'New Cell');
+ $oEx->SaveAs($oBook, 'new.xls');
+
+ #3. Create new Excel file(more complex)
+ #!/usr/local/bin/perl
+ use strict;
+ use Spreadsheet::ParseExcel::SaveParser;
+ my $oEx = new Spreadsheet::ParseExcel::SaveParser;
+ my $oBook = $oEx->Create();
+ my $iF1 = $oBook->AddFont(
+ Name => 'Arial',
+ Height => 11,
+ Bold => 1, #Bold
+ Italic => 1, #Italic
+ Underline => 0,
+ Strikeout => 0,
+ Super => 0,
+ );
+ my $iFmt =
+ $oBook->AddFormat(
+ Font => $oBook->{Font}[$iF1],
+ Fill => [1, 10, 0], # Filled with Red
+ # cf. ParseExcel (@aColor)
+ BdrStyle => [0, 1, 1, 0], #Border Right, Top
+ BdrColor => [0, 11, 0, 0], # Right->Green
+ );
+ $oBook->AddWorksheet('NewWS');
+ $oBook->AddCell(0, 0, 1, 'Cell', $iFmt);
+ $oEx->SaveAs($oBook, 'new.xls');
+
+I<new interface...>
+
+ use strict;
+ use Spreadsheet::ParseExcel::SaveParser;
+ $oBook =
+ Spreadsheet::ParseExcel::SaveParser::Workbook->Parse('Excel/Test97.xls');
+ my $oWs = $oBook->AddWorksheet('TEST1');
+ $oWs->AddCell(10, 1, 'New Cell');
+ $oBook->SaveAs('iftest.xls');
+
+=head1 DESCRIPTION
+
+Spreadsheet::ParseExcel::SaveParser : Expand of Spreadsheet::ParseExcel with Spreadsheet::WriteExcel
+
+=head2 Functions
+
+=over 4
+
+=item new
+
+I<$oExcel> = new Spreadsheet::ParseExcel::SaveParser();
+
+Constructor.
+
+=item Parse
+
+I<$oWorkbook> = $oParse->Parse(I<$sFileName> [, I<$oFmt>]);
+
+return L<"Workbook"> object.
+if error occurs, returns undef.
+
+=over 4
+
+=item I<$sFileName>
+
+name of the file to parse (Same as Spreadsheet::ParseExcel)
+
+From 0.12 (with OLE::Storage_Lite v.0.06),
+scalar reference of file contents (ex. \$sBuff) or
+IO::Handle object (inclucdng IO::File etc.) are also available.
+
+=item I<$oFmt>
+
+Formatter Class to format the value of cells.
+
+=back
+
+=item Create
+
+I<$oWorkbook> = $oParse->Create([I<$oFmt>]);
+
+return new L<"Workbook"> object.
+if error occurs, returns undef.
+
+=over 4
+
+=item I<$oFmt>
+
+Formatter Class to format the value of cells.
+
+=back
+
+=item SaveAs
+
+I<$oWorkbook> = $oParse->SaveAs( $oBook, $sName);
+
+save $oBook image as an Excel file named $sName.
+
+=over 4
+
+=item I<$oBook>
+
+An Excel Workbook object to save.
+
+=back
+
+=item I<$sName>
+
+Name of new Excel file.
+
+=back
+
+=head2 Workbook
+
+I<Spreadsheet::ParseExcel::SaveParser::Workbook>
+
+Workbook is a subclass of Spreadsheet::ParseExcel::Workbook.
+And has these methods :
+
+=over 4
+
+=item AddWorksheet
+
+I<$oWorksheet> = $oBook->AddWorksheet($sName, %hProperty);
+
+Create new Worksheet(Spreadsheet::ParseExcel::Worksheet).
+
+=over 4
+
+=item I<$sName>
+
+Name of new Worksheet
+
+=item I<$hProperty>
+
+Property of new Worksheet.
+
+=back
+
+=item AddFont
+
+I<$oWorksheet> = $oBook->AddFont(%hProperty);
+
+Create new Font(Spreadsheet::ParseExcel::Font).
+
+=over 4
+
+=item I<$hProperty>
+
+Property of new Worksheet.
+
+=back
+
+=item AddFormat
+
+I<$oWorksheet> = $oBook->AddFormat(%hProperty);
+
+Create new Format(Spreadsheet::ParseExcel::Format).
+
+=over 4
+
+=item I<$hProperty>
+
+Property of new Format.
+
+=back
+
+=item AddCell
+
+I<$oWorksheet> = $oBook->AddCell($iWorksheet, $iRow, $iCol, $sVal, $iFormat [, $sCode]);
+
+Create new Cell(Spreadsheet::ParseExcel::Cell).
+
+=over 4
+
+=item I<$iWorksheet>
+
+Number of Worksheet
+
+=back
+
+=over 4
+
+=item I<$iRow>
+
+Number of row
+
+=back
+
+=over 4
+
+=item I<$sVal>
+
+Value of the cell.
+
+=back
+
+=over 4
+
+=item I<$iFormat>
+
+Number of format for use. To specify just same as another cell,
+you can set it like below:
+
+ex.
+
+ $oCell=$oWorksheet->{Cells}[0][0]; #Just a sample
+ $oBook->AddCell(0, 1, 0, 'New One', $oCell->{FormatNo});
+ #or
+ $oBook->AddCell(0, 1, 0, 'New One', $oCell);
+
+=back
+
+=over 4
+
+=item I<$sCode>
+
+ Character code
+
+=back
+
+=back
+
+=head2 Worksheet
+
+I<Spreadsheet::ParseExcel::SaveParser::Worksheet>
+
+Worksheet is a subclass of Spreadsheet::ParseExcel::Worksheet.
+And has these methods :
+
+=over 4
+
+=item AddCell
+
+I<$oWorksheet> = $oWkSheet->AddCell($iRow, $iCol, $sVal, $iFormat [, $sCode]);
+
+Create new Cell(Spreadsheet::ParseExcel::Cell).
+
+=over 4
+
+=item I<$iRow>
+
+Number of row
+
+=back
+
+=over 4
+
+=item I<$sVal>
+
+Value of the cell.
+
+=back
+
+=over 4
+
+=item I<$iFormat>
+
+Number of format for use. To specify just same as another cell,
+you can set it like below:
+
+ex.
+
+ $oCell=$oWorksheet->{Cells}[0][0]; #Just a sample
+ $oWorksheet->AddCell(1, 0, 'New One', $oCell->{FormatNo});
+ #or
+ $oWorksheet->AddCell(1, 0, 'New One', $oCell);
+
+=back
+
+=over 4
+
+=item I<$sCode>
+
+ Character code
+
+=back
+
+=back
+
+=head1 MORE INFORMATION
+
+Please visit my Wiki page.
+ I'll add sample at :
+ http://www.hippo2000.info/cgi-bin/KbWikiE/KbWiki.pl
+
+=head1 Known Problem
+
+-Only last print area will remain. (Others will be removed)
+
+=head1 AUTHOR
+
+Kawai Takanori (Hippo2000) kwitknr at cpan.org
+
+ http://member.nifty.ne.jp/hippo2000/ (Japanese)
+ http://member.nifty.ne.jp/hippo2000/index_e.htm (English)
+
+=head1 SEE ALSO
+
+XLHTML, OLE::Storage, Spreadsheet::WriteExcel, OLE::Storage_Lite
+
+This module is based on herbert within OLE::Storage and XLHTML.
+
+=head1 COPYRIGHT
+
+Copyright (c) 2000-2002 Kawai Takanori and Nippon-RAD Co. OP Division
+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.
+
+=head1 ACKNOWLEDGEMENTS
+
+First of all, I would like to acknowledge valuable program and modules :
+XHTML, OLE::Storage and Spreadsheet::WriteExcel.
+
+In no particular order: Yamaji Haruna, Simamoto Takesi, Noguchi Harumi,
+Ikezawa Kazuhiro, Suwazono Shugo, Hirofumi Morisada, Michael Edwards, Kim Namusk
+and many many people + Kawai Mikako.
+
+=cut
Added: packages/libspreadsheet-parseexcel-perl/branches/upstream/current/ParseExcel/Utility.pm
===================================================================
--- packages/libspreadsheet-parseexcel-perl/branches/upstream/current/ParseExcel/Utility.pm 2005-01-25 02:10:47 UTC (rev 660)
+++ packages/libspreadsheet-parseexcel-perl/branches/upstream/current/ParseExcel/Utility.pm 2005-01-25 15:06:55 UTC (rev 661)
@@ -0,0 +1,1147 @@
+# Spreadsheet::ParseExcel::Utility
+# by Kawai, Takanori (Hippo2000) 2001.2.2
+# This Program is ALPHA version.
+#==============================================================================
+# Spreadsheet::ParseExcel::Utility;
+#==============================================================================
+package Spreadsheet::ParseExcel::Utility;
+require Exporter;
+use strict;
+use vars qw($VERSION @ISA @EXPORT_OK);
+ at ISA = qw(Exporter);
+ at EXPORT_OK = qw(ExcelFmt LocaltimeExcel ExcelLocaltime
+ col2int int2col sheetRef xls2csv);
+$VERSION=0.06;
+#my $sNUMEXP = '^[+-]?\d+(\.\d+)?$';
+#my $sNUMEXP = '(^[+-]?\d+(\.\d+)?$)|(^[+-]?\d\.*(\d+)[eE][+-](\d+))$';
+my $sNUMEXP = '(^[+-]?\d+(\.\d+)?$)|(^[+-]?\d+\.?(\d*)[eE][+-](\d+))$';
+
+#ProtoTypes
+sub ExcelFmt($$;$$);
+sub LocaltimeExcel($$$$$$;$$);
+sub ExcelLocaltime($;$);
+sub AddComma($);
+sub MakeBun($$;$);
+sub MakeE($$);
+sub LeapYear($);
+
+#------------------------------------------------------------------------------
+# ExcelFmt (for Spreadsheet::ParseExcel::Utility)
+#------------------------------------------------------------------------------
+sub ExcelFmt($$;$$) {
+ my($sFmt, $iData, $i1904, $sType) =@_;
+ my $sCond;
+ my $sWkF ='';
+ my $sRes='';
+#1. Get Condition
+ if($sFmt=~/^\[([<>=][^\]]+)\](.*)$/) {
+ $sCond = $1;
+ $sFmt = $2;
+ }
+ $sFmt =~ s/_/ /g;
+
+ my @sFmtWk;
+ my $sFmtObj;
+ my $iFmtPos=0;
+ my $iDblQ=0;
+ my $iQ = 0;
+ foreach my $sWk (split //, $sFmt) {
+ if($iDblQ or $iQ) {
+ $sFmtWk[$iFmtPos] .=$sWk;
+ $iDblQ = 0 if($sWk eq '"');
+ $iQ = 0;
+ next;
+ }
+
+ if($sWk eq ';') {
+ $iFmtPos++;
+ next;
+ }
+ elsif($sWk eq '"') {
+ $iDblQ = 1;
+ }
+ elsif($sWk eq '!') {
+ $iQ = 1;
+ }
+ elsif($sWk eq '\\') {
+ $iQ = 1;
+# next;
+ }
+ elsif($sWk eq '(') { #Skip?
+ next;
+ }
+ elsif($sWk eq ')') { #Skip?
+ next;
+ }
+ $sFmtWk[$iFmtPos] .=$sWk;
+ }
+#Get FmtString
+ if(scalar(@sFmtWk)>1) {
+ if($sCond) {
+ $sFmtObj = $sFmtWk[((eval(qq/"$iData" $sCond/))? 0: 1)];
+ }
+ else {
+ my $iWk = ($iData =~/$sNUMEXP/)? $iData: 0;
+ # $iData = abs($iData) if($iWk !=0);
+ if(scalar(@sFmtWk)==2) {
+ $sFmtObj = $sFmtWk[(($iWk>=0)? 0: 1)];
+ }
+ elsif(scalar(@sFmtWk)==3) {
+ $sFmtObj = $sFmtWk[(($iWk>0)? 0: (($iWk<0)? 1: 2))];
+ }
+ else {
+ if($iData =~/$sNUMEXP/) {
+ $sFmtObj = $sFmtWk[(($iWk>0)? 0: (($iWk<0)? 1: 2))];
+ }
+ else {
+ $sFmtObj = $sFmtWk[ 3];
+ }
+ }
+ }
+ }
+ else {
+ $sFmtObj = $sFmtWk[0];
+ }
+
+ my $sColor;
+ if($sFmtObj =~ /^(\[[^hm\[\]]*\])/) {
+ $sColor = $1;
+ $sFmtObj = substr($sFmtObj, length($sColor));
+ chop($sColor);
+ $sColor = substr($sColor, 1);
+ }
+#print "FMT:$sFmtObj Co:$sColor\n";
+
+#3.Build Data
+ my $iFmtMode=0; #1:Number, 2:Date
+ my $i=0;
+ my $ir=0;
+ my $sFmtWk;
+ my @aRep = ();
+ my $sFmtRes='';
+
+ my $iFflg = -1;
+ my $iRpos = -1;
+ my $iCmmCnt = 0;
+ my $iBunFlg = 0;
+ my $iFugouFlg = 0;
+ my $iPer = 0;
+ my $iAm=0;
+ my $iSt;
+
+ while($i<length($sFmtObj)) {
+ $iSt = $i;
+ my $sWk = substr($sFmtObj, $i, 1);
+
+ if($sWk !~ /[#0\+\-\.\?eE\,\%]/) {
+ if($iFflg != -1) {
+ push @aRep, [substr($sFmtObj, $iFflg, $i-$iFflg),
+ $iRpos, $i-$iFflg];
+ $iFflg= -1;
+ }
+ }
+
+ if($sWk eq '"') {
+ $iDblQ = $iDblQ? 0: 1;
+ $i++;
+ next;
+ }
+ elsif($sWk eq '!') {
+ $iQ = 1;
+ $i++;
+ next;
+ }
+ elsif($sWk eq '\\') {
+ if($iQ == 1) {
+ }
+ else {
+ $iQ = 1;
+ $i++;
+ next;
+ }
+ }
+#print "WK:", ord($sWk), " $iFmtMode \n";
+#print "DEF1: $iDblQ DEF2: $iQ\n";
+ if((defined($iDblQ) and ($iDblQ)) or (defined($iQ) and ($iQ))) {
+ $iQ = 0;
+ if(($iFmtMode != 2) and
+ ((substr($sFmtObj, $i, 2) eq "\x81\xA2") ||
+ (substr($sFmtObj, $i, 2) eq "\x81\xA3") ||
+ (substr($sFmtObj, $i, 2) eq "\xA2\xA4") ||
+ (substr($sFmtObj, $i, 2) eq "\xA2\xA5"))
+ ){
+#print "PUSH:", unpack("H*", substr($sFmtObj, $i, 2)), "\n";
+ push @aRep, [substr($sFmtObj, $i, 2),
+ length($sFmtRes), 2];
+ $iFugouFlg = 1;
+ $i+=2;
+ }
+ else{
+ $i++;
+ }
+ }
+ elsif(($sWk =~ /[#0\+\.\?eE\,\%]/) ||
+ (($iFmtMode != 2) and
+ (($sWk eq '-') || ($sWk eq '(') || ($sWk eq ')')))
+ ) {
+ $iFmtMode = 1 unless($iFmtMode);
+ if(substr($sFmtObj, $i, 1) =~ /[#0]/) {
+ if(substr($sFmtObj, $i) =~ /^([#0]+)([\.]?)([0#]*)([eE])([\+\-])([0#]+)/){
+ push @aRep, [substr($sFmtObj, $i, length($&)), $i, length($&)];
+ $i +=length($&);
+ }
+ else{
+ if($iFflg==-1) {
+ $iFflg = $i;
+ $iRpos = length($sFmtRes);
+ }
+ }
+ }
+ elsif(substr($sFmtObj, $i, 1) eq '?') {
+ if($iFflg != -1) {
+ push @aRep, [substr($sFmtObj, $iFflg, $i-$iFflg+1),
+ $iRpos, $i-$iFflg+1];
+ }
+ $iFflg = $i;
+ while($i<length($sFmtObj)) {
+ if (substr($sFmtObj, $i, 1) eq '/'){
+ $iBunFlg = 1;
+ }
+ elsif (substr($sFmtObj, $i, 1) eq '?'){
+ ;
+ }
+ else {
+ if(($iBunFlg) && (substr($sFmtObj, $i, 1) =~ /[0-9]/)) {
+ ;
+ }
+ else {
+ last;
+ }
+ }
+ $i++;
+ }
+ $i--;
+ push @aRep, [substr($sFmtObj, $iFflg, $i-$iFflg+1),
+ length($sFmtRes), $i-$iFflg+1];
+ $iFflg = -1;
+ }
+ elsif(substr($sFmtObj, $i, 3) =~ /^[eE][\+\-][0#]$/) {
+ if(substr($sFmtObj, $i) =~ /([eE])([\+\-])([0#]+)/){
+ push @aRep, [substr($sFmtObj, $i, length($&)), $i, length($&)];
+ $i +=length($&);
+ }
+ $iFflg = -1;
+ }
+ else {
+ if($iFflg != -1) {
+ push @aRep, [substr($sFmtObj, $iFflg, $i-$iFflg),
+ $iRpos, $i-$iFflg];
+ $iFflg= -1;
+ }
+ if(substr($sFmtObj, $i, 1) =~ /[\+\-]/) {
+ push @aRep, [substr($sFmtObj, $i, 1),
+ length($sFmtRes), 1];
+ $iFugouFlg = 1;
+ }
+ elsif(substr($sFmtObj, $i, 1) eq '.') {
+ push @aRep, [substr($sFmtObj, $i, 1),
+ length($sFmtRes), 1];
+ }
+ elsif(substr($sFmtObj, $i, 1) eq ',') {
+ $iCmmCnt++;
+ push @aRep, [substr($sFmtObj, $i, 1),
+ length($sFmtRes), 1];
+ }
+ elsif(substr($sFmtObj, $i, 1) eq '%') {
+ $iPer = 1;
+ }
+ elsif((substr($sFmtObj, $i, 1) eq '(') ||
+ (substr($sFmtObj, $i, 1) eq ')')) {
+ push @aRep, [substr($sFmtObj, $i, 1),
+ length($sFmtRes), 1];
+ $iFugouFlg = 1;
+ }
+ }
+ $i++;
+ }
+ elsif($sWk =~ /[ymdhsapg]/) {
+ $iFmtMode = 2 unless($iFmtMode);
+ if(substr($sFmtObj, $i, 5) =~ /am\/pm/i) {
+ push @aRep, ['am/pm', length($sFmtRes), 5];
+ $iAm=1;
+ $i+=5;
+ }
+ elsif(substr($sFmtObj, $i, 3) =~ /a\/p/i) {
+ push @aRep, ['a/p', length($sFmtRes), 3];
+ $iAm=1;
+ $i+=3;
+ }
+ elsif(substr($sFmtObj, $i, 5) eq 'mmmmm') {
+ push @aRep, ['mmmmm', length($sFmtRes), 5];
+ $i+=5;
+ }
+ elsif((substr($sFmtObj, $i, 4) eq 'mmmm') ||
+ (substr($sFmtObj, $i, 4) eq 'dddd') ||
+ (substr($sFmtObj, $i, 4) eq 'yyyy') ||
+ (substr($sFmtObj, $i, 4) eq 'ggge')
+ ) {
+ push @aRep, [substr($sFmtObj, $i, 4), length($sFmtRes), 4];
+ $i+=4;
+ }
+ elsif((substr($sFmtObj, $i, 3) eq 'mmm') ||
+ (substr($sFmtObj, $i, 3) eq 'yyy')) {
+ push @aRep, [substr($sFmtObj, $i, 3), length($sFmtRes), 3];
+ $i+=3;
+ }
+ elsif((substr($sFmtObj, $i, 2) eq 'yy') ||
+ (substr($sFmtObj, $i, 2) eq 'mm') ||
+ (substr($sFmtObj, $i, 2) eq 'dd') ||
+ (substr($sFmtObj, $i, 2) eq 'hh') ||
+ (substr($sFmtObj, $i, 2) eq 'ss') ||
+ (substr($sFmtObj, $i, 2) eq 'ge')) {
+ if((substr($sFmtObj, $i, 2) eq 'mm') &&
+ ($#aRep>=0) &&
+ (($aRep[$#aRep]->[0] eq 'h') or ($aRep[$#aRep]->[0] eq 'hh'))) {
+ push @aRep, ['mm', length($sFmtRes), 2, 'min'];
+ }
+ else {
+ push @aRep, [substr($sFmtObj, $i, 2), length($sFmtRes), 2];
+ }
+ if((substr($sFmtObj, $i, 2) eq 'ss') && ($#aRep>0)) {
+ if(($aRep[$#aRep-1]->[0] eq 'm') ||
+ ($aRep[$#aRep-1]->[0] eq 'mm')) {
+ push(@{$aRep[$#aRep-1]}, 'min');
+ }
+ }
+ $i+=2;
+ }
+ elsif((substr($sFmtObj, $i, 1) eq 'm') ||
+ (substr($sFmtObj, $i, 1) eq 'd') ||
+ (substr($sFmtObj, $i, 1) eq 'h') ||
+ (substr($sFmtObj, $i, 1) eq 's')){
+ if((substr($sFmtObj, $i, 1) eq 'm') &&
+ ($#aRep>=0) &&
+ (($aRep[$#aRep]->[0] eq 'h') or ($aRep[$#aRep]->[0] eq 'hh'))) {
+ push @aRep, ['m', length($sFmtRes), 1, 'min'];
+ }
+ else {
+ push @aRep, [substr($sFmtObj, $i, 1), length($sFmtRes), 1];
+ }
+ if((substr($sFmtObj, $i, 1) eq 's') && ($#aRep>0)) {
+ if(($aRep[$#aRep-1]->[0] eq 'm') ||
+ ($aRep[$#aRep-1]->[0] eq 'mm')) {
+ push(@{$aRep[$#aRep-1]}, 'min');
+ }
+ }
+ $i+=1;
+ }
+ }
+ elsif((substr($sFmtObj, $i, 3) eq '[h]')) {
+ push @aRep, ['[h]', length($sFmtRes), 3];
+ $i+=3;
+ }
+ elsif((substr($sFmtObj, $i, 4) eq '[mm]')) {
+ push @aRep, ['[mm]', length($sFmtRes), 4];
+ $i+=4;
+ }
+ elsif($sWk eq '@') {
+ push @aRep, ['@', length($sFmtRes), 1];
+ $i++;
+ }
+ elsif($sWk eq '*') {
+ push @aRep, [substr($sFmtObj, $i, 1),
+ length($sFmtRes), 1];
+ }
+ else{
+ $i++;
+ }
+ $i++ if($i == $iSt); #No Format match
+ $sFmtRes .= substr($sFmtObj, $iSt, $i-$iSt);
+ }
+#print "FMT: $iRpos ",$sFmtRes, "\n";
+ if($iFflg != -1) {
+ push @aRep, [substr($sFmtObj, $iFflg, $i-$iFflg+1),
+ $iRpos,, $i-$iFflg+1];
+ $iFflg= 0;
+ }
+
+#For Date format
+ $iFmtMode = 0 if(defined $sType && $sType eq 'Text'); #Not Convert Non Numeric
+ if(($iFmtMode==2)&& ($iData =~/$sNUMEXP/)) {
+ my @aTime = ExcelLocaltime($iData, $i1904);
+ $aTime[4]++;
+ $aTime[5] += 1900;
+
+ my @aMonL =
+ qw (dum January February March April May June July
+ August September October November December );
+ my @aMonNm =
+ qw (dum Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec);
+ my @aWeekNm =
+ qw (Mon Tue Wed Thu Fri Sat Sun);
+ my @aWeekL =
+ qw (Monday Tuesday Wednesday Thursday Friday Saturday Sunday);
+ my $sRep;
+ for(my $iIt=$#aRep; $iIt>=0;$iIt--) {
+ my $rItem = $aRep[$iIt];
+ if((scalar @$rItem) >=4) {
+ #Min
+ if($rItem->[0] eq 'mm') {
+ $sRep = sprintf("%02d", $aTime[1]);
+ }
+ else {
+ $sRep = sprintf("%d", $aTime[1]);
+ }
+ }
+ #Year
+ elsif($rItem->[0] eq 'yyyy') {
+ $sRep = sprintf('%04d', $aTime[5]);
+ }
+ elsif($rItem->[0] eq 'yy') {
+ $sRep = sprintf('%02d', $aTime[5] % 100);
+ }
+ #Mon
+ elsif($rItem->[0] eq 'mmmmm') {
+ $sRep = substr($aMonNm[$aTime[4]], 0, 1);
+ }
+ elsif($rItem->[0] eq 'mmmm') {
+ $sRep = $aMonL[$aTime[4]];
+ }
+ elsif($rItem->[0] eq 'mmm') {
+ $sRep = $aMonNm[$aTime[4]];
+ }
+ elsif($rItem->[0] eq 'mm') {
+ $sRep = sprintf('%02d', $aTime[4]);
+ }
+ elsif($rItem->[0] eq 'm') {
+ $sRep = sprintf('%d', $aTime[4]);
+ }
+ #Day
+ elsif($rItem->[0] eq 'dddd') {
+ $sRep = $aWeekL[$aTime[7]];
+ }
+ elsif($rItem->[0] eq 'ddd') {
+ $sRep = $aWeekNm[$aTime[7]];
+ }
+ elsif($rItem->[0] eq 'dd') {
+ $sRep = sprintf('%02d', $aTime[3]);
+ }
+ elsif($rItem->[0] eq 'd') {
+ $sRep = sprintf('%d', $aTime[3]);
+ }
+ #Hour
+ elsif($rItem->[0] eq 'hh') {
+ if($iAm) {
+ $sRep = sprintf('%02d', $aTime[2]%12);
+ }
+ else {
+ $sRep = sprintf('%02d', $aTime[2]);
+ }
+ }
+ elsif($rItem->[0] eq 'h') {
+ if($iAm) {
+ $sRep = sprintf('%d', $aTime[2]%12);
+ }
+ else {
+ $sRep = sprintf('%d', $aTime[2]);
+ }
+ }
+ #SS
+ elsif($rItem->[0] eq 'ss') {
+ $sRep = sprintf('%02d', $aTime[0]);
+ }
+ elsif($rItem->[0] eq 'S') {
+ $sRep = sprintf('%d', $aTime[0]);
+ }
+ #am/pm
+ elsif($rItem->[0] eq 'am/pm') {
+ $sRep = ($aTime[4]>12)? 'pm':'am';
+ }
+ elsif($rItem->[0] eq 'a/p') {
+ $sRep = ($aTime[4]>12)? 'p':'a';
+ }
+ elsif($rItem->[0] eq '.') {
+ $sRep = '.';
+ }
+ elsif($rItem->[0] =~ /^0+$/) {
+ my $i0Len = length($&);
+#print "SEC:", $aTime[7], "\n";
+ $sRep = substr(sprintf("%.${i0Len}f", $aTime[7]/1000.0), 2, $i0Len);
+ }
+ elsif($rItem->[0] eq '[h]') {
+ $sRep = sprintf('%d', int($iData) * 24 + $aTime[2]);
+ }
+ elsif($rItem->[0] eq '[mm]') {
+ $sRep = sprintf('%d', (int($iData) * 24 + $aTime[2])*60 + $aTime[1]);
+ }
+#NENGO(Japanese)
+ elsif($rItem->[0] eq 'ge') {
+ $sRep = Spreadsheet::ParseExcel::FmtJapan::CnvNengo(1, @aTime);
+ }
+ elsif($rItem->[0] eq 'ggge') {
+ $sRep = Spreadsheet::ParseExcel::FmtJapan::CnvNengo(2, @aTime);
+ }
+ elsif($rItem->[0] eq '@') {
+ $sRep = $iData;
+ }
+
+#print "REP:$sRep ",$rItem->[0], ":", $rItem->[1], ":" ,$rItem->[2], "\n";
+ substr($sFmtRes, $rItem->[1], $rItem->[2]) = $sRep;
+ }
+ }
+ elsif(($iFmtMode==1)&& ($iData =~/$sNUMEXP/)) {
+ if($#aRep>=0) {
+ while($aRep[$#aRep]->[0] eq ',') {
+ $iCmmCnt--;
+ substr($sFmtRes, $aRep[$#aRep]->[1], $aRep[$#aRep]->[2]) = '';
+ $iData /= 1000;
+ pop @aRep;
+ }
+
+ my $sNumFmt = join('', map {$_->[0]} @aRep);
+ my $sNumRes;
+ my $iTtl=0;
+ my $iE=0;
+ my $iP=0;
+ my $iInt = 0;
+ my $iAftP=undef;
+ foreach my $sItem (split //, $sNumFmt) {
+ if($sItem eq '.') {
+ $iTtl++;
+ $iP = 1;
+ }
+ elsif(($sItem eq 'E') || ($sItem eq 'e')){
+ $iE = 1;
+ }
+ elsif($sItem eq '0') {
+ $iTtl++;
+ $iAftP++ if($iP);
+ $iInt = 1;
+ }
+ elsif($sItem eq '#') {
+ #$iTtl++;
+ $iAftP++ if($iP);
+ $iInt = 1;
+ }
+ elsif($sItem eq '?') {
+ #$iTtl++;
+ $iAftP++ if($iP);
+ }
+ }
+#print "DATA:$iData\n";
+ $iData *= 100.0 if($iPer);
+ my $iDData = ($iFugouFlg)? abs($iData) : $iData+0;
+ if($iBunFlg) {
+ $sNumRes = sprintf("%0${iTtl}d", int($iDData));
+ }
+ else {
+ if($iP) {
+# $sNumRes = sprintf("%0${iTtl}.${iAftP}f", $iDData);
+ $sNumRes = sprintf(
+ (defined($iAftP)?
+ "%0${iTtl}.${iAftP}f": "%0${iTtl}f"), $iDData);
+ }
+ else {
+ #print "DATA:", $iDData, "\n";
+ $sNumRes = sprintf("%0${iTtl}.0f", $iDData);
+ }
+ }
+#print "sNum:$sNumRes\n";
+ $sNumRes = AddComma($sNumRes) if($iCmmCnt > 0);
+#print "RES:$sNumRes\n";
+ my $iLen = length($sNumRes);
+ my $iPPos = -1;
+ my $sRep;
+
+ for(my $iIt=$#aRep; $iIt>=0;$iIt--) {
+ my $rItem = $aRep[$iIt];
+#print "Rep:", unpack("H*", $rItem->[0]), "\n";
+ if($rItem->[0] =~/([#0]*)([\.]?)([0#]*)([eE])([\+\-])([0#]+)/) {
+ substr($sFmtRes, $rItem->[1], $rItem->[2]) =
+ MakeE($rItem->[0], $iData);
+ }
+ elsif($rItem->[0] =~ /\//) {
+ substr($sFmtRes, $rItem->[1], $rItem->[2]) =
+ MakeBun($rItem->[0], $iData, $iInt);
+ }
+ elsif($rItem->[0] eq '.') {
+ $iLen--;
+ $iPPos=$iLen;
+ }
+ elsif($rItem->[0] eq '+') {
+ substr($sFmtRes, $rItem->[1], $rItem->[2]) =
+ ($iData > 0)? '+': (($iData==0)? '+':'-');
+ }
+ elsif($rItem->[0] eq '-') {
+ substr($sFmtRes, $rItem->[1], $rItem->[2]) =
+ ($iData > 0)? '': (($iData==0)? '':'-');
+ }
+ elsif($rItem->[0] eq '@') {
+ substr($sFmtRes, $rItem->[1], $rItem->[2]) = $iData;
+ }
+ elsif($rItem->[0] eq '*') {
+ substr($sFmtRes, $rItem->[1], $rItem->[2]) = ''; #REMOVE
+ }
+ elsif(($rItem->[0] eq "\xA2\xA4") or ($rItem->[0] eq "\xA2\xA5") or
+ ($rItem->[0] eq "\x81\xA2") or ($rItem->[0] eq "\x81\xA3") ){
+ substr($sFmtRes, $rItem->[1], $rItem->[2]) = $rItem->[0];
+ # ($iData > 0)? '': (($iData==0)? '':$rItem->[0]);
+ }
+ elsif(($rItem->[0] eq '(') or ($rItem->[0] eq ')')){
+ substr($sFmtRes, $rItem->[1], $rItem->[2]) = $rItem->[0];
+ # ($iData > 0)? '': (($iData==0)? '':$rItem->[0]);
+ }
+ else {
+ if($iLen>0) {
+ if($iIt <= 0) {
+ $sRep = substr($sNumRes, 0, $iLen);
+ $iLen = 0;
+ }
+ else {
+ my $iReal = length($rItem->[0]);
+ if($iPPos >= 0) {
+ my $sWkF = $rItem->[0];
+ $sWkF=~s/^#+//;
+ $iReal = length($sWkF);
+ $iReal = ($iLen <=$iReal)? $iLen:$iReal;
+ }
+ else {
+ $iReal = ($iLen <=$iReal)? $iLen:$iReal;
+ }
+ $sRep = substr($sNumRes, $iLen - $iReal, $iReal);
+ $iLen -=$iReal;
+ }
+ }
+ else {
+ $sRep = '';
+ }
+ substr($sFmtRes, $rItem->[1], $rItem->[2]) = "\x00" . $sRep;
+ }
+ }
+ $sRep = ($iLen > 0)?substr($sNumRes, 0, $iLen) : '';
+ $sFmtRes =~ s/\x00/$sRep/;
+ $sFmtRes =~ s/\x00//g;
+ }
+ }
+ else {
+ my $iAtMk = 0;
+ for(my $iIt=$#aRep; $iIt>=0;$iIt--) {
+ my $rItem = $aRep[$iIt];
+ if($rItem->[0] eq '@') {
+ substr($sFmtRes, $rItem->[1], $rItem->[2]) = $iData;
+ $iAtMk++;
+ }
+ else {
+ substr($sFmtRes, $rItem->[1], $rItem->[2]) = '';
+ }
+ }
+ $sFmtRes = $iData unless($iAtMk);
+ }
+ return wantarray()? ($sFmtRes, $sColor) : $sFmtRes;
+}
+#------------------------------------------------------------------------------
+# AddComma (for Spreadsheet::ParseExcel::Utility)
+#------------------------------------------------------------------------------
+sub AddComma($) {
+ my($sNum) = @_;
+
+ if($sNum=~ /^([^\d]*)(\d\d\d\d+)(\.*.*)$/) {
+ my($sPre, $sObj, $sAft) =($1, $2, $3);
+ for(my $i=length($sObj)-3;$i>0; $i-=3) {
+ substr($sObj, $i, 0) = ',';
+ }
+ return $sPre . $sObj . $sAft;
+ }
+ else {
+ return $sNum;
+ }
+}
+#------------------------------------------------------------------------------
+# MakeBun (for Spreadsheet::ParseExcel::Utility)
+#------------------------------------------------------------------------------
+sub MakeBun($$;$) {
+ my($sFmt, $iData, $iFlg) = @_;
+ my $iBunbo;
+ my $iShou;
+
+#1. Init
+#print "FLG: $iFlg\n";
+ if($iFlg) {
+ $iShou = $iData - int($iData);
+ return '' if($iShou == 0);
+ }
+ else {
+ $iShou = $iData;
+ }
+ $iShou = abs($iShou);
+ my $sSWk;
+
+#2.Calc BUNBO
+#2.1 BUNBO defined
+ if($sFmt =~ /\/(\d+)$/) {
+ $iBunbo = $1;
+ return sprintf("%d/%d", $iShou*$iBunbo, $iBunbo);
+ }
+ else {
+#2.2 Calc BUNBO
+ $sFmt =~ /\/(\?+)$/;
+ my $iKeta = length($1);
+ my $iSWk = 1;
+ my $sSWk = '';
+ my $iBunsi;
+ for(my $iBunbo = 2;$iBunbo<10**$iKeta;$iBunbo++) {
+ $iBunsi = int($iShou*$iBunbo + 0.5);
+ my $iCmp = abs($iShou - ($iBunsi/$iBunbo));
+ if($iCmp < $iSWk) {
+ $iSWk =$iCmp;
+ $sSWk = sprintf("%d/%d", $iBunsi, $iBunbo);
+ last if($iSWk==0);
+ }
+ }
+ return $sSWk;
+ }
+}
+#------------------------------------------------------------------------------
+# MakeE (for Spreadsheet::ParseExcel::Utility)
+#------------------------------------------------------------------------------
+sub MakeE($$) {
+ my($sFmt, $iData) = @_;
+
+ $sFmt=~/(([#0]*)[\.]?[#0]*)([eE])([\+\-][0#]+)/;
+ my($sKari, $iKeta, $sE, $sSisu) = ($1, length($2), $3, $4);
+ $iKeta = 1 if($iKeta<=0);
+
+ my $iLog10 = 0;
+ $iLog10 = ($iData == 0)? 0 : (log(abs($iData))/ log(10));
+ $iLog10 = (int($iLog10 / $iKeta) +
+ ((($iLog10 - int($iLog10 / $iKeta))<0)? -1: 0)) *$iKeta;
+
+ my $sUe = ExcelFmt($sKari, $iData*(10**($iLog10*-1)),0);
+ my $sShita = ExcelFmt($sSisu, $iLog10, 0);
+ return $sUe . $sE . $sShita;
+}
+#------------------------------------------------------------------------------
+# LeapYear (for Spreadsheet::ParseExcel::Utility)
+#------------------------------------------------------------------------------
+sub LeapYear($) {
+ my($iYear)=@_;
+ return 1 if($iYear==1900); #Special for Excel
+ return ((($iYear % 4)==0) && (($iYear % 100) || ($iYear % 400)==0))? 1: 0;
+}
+#------------------------------------------------------------------------------
+# LocaltimeExcel (for Spreadsheet::ParseExcel::Utility)
+#------------------------------------------------------------------------------
+sub LocaltimeExcel($$$$$$;$$) {
+ my($iSec, $iMin, $iHour, $iDay, $iMon, $iYear, $iMSec, $flg1904) = @_;
+
+#0. Init
+ $iMon++;
+ $iYear+=1900;
+
+#1. Calc Time
+ my $iTime;
+ $iTime =$iHour;
+ $iTime *=60;
+ $iTime +=$iMin;
+ $iTime *=60;
+ $iTime +=$iSec;
+ $iTime += $iMSec/1000.0 if(defined($iMSec)) ;
+ $iTime /= 86400.0; #3600*24(1day in seconds)
+ my $iY;
+ my $iYDays;
+
+#2. Calc Days
+ if($flg1904) {
+ $iY = 1904;
+ $iTime--; #Start from Jan 1st
+ $iYDays = 366;
+ }
+ else {
+ $iY = 1900;
+ $iYDays = 366; #In Excel 1900 is leap year (That's not TRUE!)
+ }
+ while($iY<$iYear) {
+ $iTime += $iYDays;
+ $iY++;
+ $iYDays = (LeapYear($iY))? 366: 365;
+ }
+ for(my $iM=1;$iM < $iMon; $iM++){
+ if($iM == 1 || $iM == 3 || $iM == 5 || $iM == 7 || $iM == 8
+ || $iM == 10 || $iM == 12) {
+ $iTime += 31;
+ }
+ elsif($iM == 4 || $iM == 6 || $iM == 9 || $iM == 11) {
+ $iTime += 30;
+ }
+ elsif($iM == 2) {
+ $iTime += (LeapYear($iYear))? 29: 28;
+ }
+ }
+ $iTime+=$iDay;
+ return $iTime;
+}
+#------------------------------------------------------------------------------
+# ExcelLocaltime (for Spreadsheet::ParseExcel::Utility)
+#------------------------------------------------------------------------------
+sub ExcelLocaltime($;$)
+{
+ my($dObj, $flg1904) = @_;
+ my($iSec, $iMin, $iHour, $iDay, $iMon, $iYear, $iwDay, $iMSec);
+ my($iDt, $iTime, $iYDays);
+
+ $iDt = int($dObj);
+ $iTime = $dObj - $iDt;
+
+#1. Calc Days
+ if($flg1904) {
+ $iYear = 1904;
+ $iDt++; #Start from Jan 1st
+ $iYDays = 366;
+ $iwDay = (($iDt+4) % 7);
+ }
+ else {
+ $iYear = 1900;
+ $iYDays = 366; #In Excel 1900 is leap year (That's not TRUE!)
+ $iwDay = (($iDt+6) % 7);
+ }
+ while($iDt > $iYDays) {
+ $iDt -= $iYDays;
+ $iYear++;
+ $iYDays = ((($iYear % 4)==0) &&
+ (($iYear % 100) || ($iYear % 400)==0))? 366: 365;
+ }
+ $iYear -= 1900;
+ for($iMon=1;$iMon < 12; $iMon++){
+ my $iMD;
+ if($iMon == 1 || $iMon == 3 || $iMon == 5 || $iMon == 7 || $iMon == 8
+ || $iMon == 10 || $iMon == 12) {
+ $iMD = 31;
+ }
+ elsif($iMon == 4 || $iMon == 6 || $iMon == 9 || $iMon == 11) {
+ $iMD = 30;
+ }
+ elsif($iMon == 2) {
+ $iMD = (($iYear % 4) == 0)? 29: 28;
+ }
+ last if($iDt <= $iMD);
+ $iDt -= $iMD;
+ }
+
+#2. Calc Time
+ $iDay = $iDt;
+ $iTime += (0.0005 / 86400.0);
+ $iTime*=24.0;
+ $iHour = int($iTime);
+ $iTime -= $iHour;
+ $iTime *= 60.0;
+ $iMin = int($iTime);
+ $iTime -= $iMin;
+ $iTime *= 60.0;
+ $iSec = int($iTime);
+ $iTime -= $iSec;
+ $iTime *= 1000.0;
+ $iMSec = int($iTime);
+
+ return ($iSec, $iMin, $iHour, $iDay, $iMon-1, $iYear, $iwDay, $iMSec);
+}
+# -----------------------------------------------------------------------------
+# col2int (for Spreadsheet::ParseExcel::Utility)
+#------------------------------------------------------------------------------
+# converts a excel row letter into an int for use in an array
+sub col2int {
+ my $result = 0 ;
+ my $str = shift ;
+ my $incr = 0 ;
+
+ for(my $i = length($str) ; $i > 0 ; $i--) {
+ my $char = substr( $str, $i-1) ;
+ my $curr += ord(lc($char)) - ord('a') + 1;
+ $curr *= $incr if( $incr) ;
+ $result += $curr ;
+ $incr += 26 ;
+ }
+ # this is one out as we range 0..x-1 not 1..x
+ $result-- ;
+
+ return $result ;
+}
+# -----------------------------------------------------------------------------
+# int2col (for Spreadsheet::ParseExcel::Utility)
+#------------------------------------------------------------------------------
+### int2col
+# convert a column number into column letters
+# @note this is quite a brute force coarse method
+# does not manage values over 701 (ZZ)
+# @arg number, to convert
+# @returns string, column name
+#
+sub int2col {
+ my $out = "" ;
+ my $val = shift ;
+
+ do {
+ $out .= chr(( $val % 26) + ord('A')) ;
+ $val = int( $val / 26) - 1 ;
+ } while( $val >= 0) ;
+
+ return reverse $out ;
+}
+# -----------------------------------------------------------------------------
+# sheetRef (for Spreadsheet::ParseExcel::Utility)
+#------------------------------------------------------------------------------
+# -----------------------------------------------------------------------------
+### sheetRef
+# convert an excel letter-number address into a useful array address
+# @note that also Excel uses X-Y notation, we normally use Y-X in arrays
+# @args $str, excel coord eg. A2
+# @returns an array - 2 elements - column, row, or undefined
+#
+sub sheetRef {
+ my $str = shift ;
+ my @ret ;
+
+ $str =~ m/^(\D+)(\d+)$/ ;
+
+ if( $1 && $2) {
+ push( @ret, $2 -1, col2int($1)) ;
+ }
+ if( $ret[0] < 0) {
+ undef @ret ;
+ }
+
+ return @ret ;
+}
+# -----------------------------------------------------------------------------
+# xls2csv (for Spreadsheet::ParseExcel::Utility)
+#------------------------------------------------------------------------------
+### xls2csv
+# convert a chunk of an excel file into csv text chunk
+# @args $param, sheet-colrow:colrow (1-A1:B2 or A1:B2 for sheet 1
+# @args $rotate, 0 or 1 decides if output should be rotated or not
+# @returns string containing a chunk of csv
+#
+sub xls2csv {
+ my ($filename, $regions, $rotate) = @_ ;
+ my $sheet = 0 ;
+ my $output = "" ;
+
+ # extract any sheet number from the region string
+ $regions =~ m/^(\d+)-(.*)/ ;
+
+ if( $2) {
+ $sheet = $1 - 1 ;
+ $regions = $2 ;
+ }
+
+ # now extract the start and end regions
+ $regions =~ m/(.*):(.*)/ ;
+
+ if( !$1 || !$2) {
+ print STDERR "Bad Params";
+ return "" ;
+ }
+
+ my @start = sheetRef( $1) ;
+ my @end = sheetRef( $2) ;
+ if( !@start) {
+ print STDERR "Bad coorinates - $1";
+ return "" ;
+ }
+ if( !@end) {
+ print STDERR "Bad coorinates - $2";
+ return "" ;
+ }
+
+ if( $start[1] > $end[1]) {
+ print STDERR "Bad COLUMN ordering\n";
+ print STDERR "Start column " . int2col($start[1]);
+ print STDERR " after end column " . int2col($end[1]) . "\n";
+ return "" ;
+ }
+ if( $start[0] > $end[0]) {
+ print STDERR "Bad ROW ordering\n";
+ print STDERR "Start row " . ($start[0] + 1);
+ print STDERR " after end row " . ($end[0] + 1) . "\n";
+ exit ;
+ }
+
+ # start the excel object now
+ my $oExcel = new Spreadsheet::ParseExcel ;
+ my $oBook = $oExcel->Parse( $filename) ;
+ # open the sheet
+ my $oWkS = $oBook->{Worksheet}[ $sheet] ;
+
+ # now check that the region exists in the file
+ # if not trucate to the possible region
+ # output a warning msg
+ if( $start[1] < $oWkS->{MinCol}) {
+ print STDERR int2col( $start[1]) . " < min col " . int2col( $oWkS->{MinCol}) . " Reseting\n";
+ $start[1] = $oWkS->{MinCol} ;
+ }
+ if( $end[1] > $oWkS->{MaxCol}) {
+ print STDERR int2col( $end[1]) . " > max col " . int2col( $oWkS->{MaxCol}) . " Reseting\n" ;
+ $end[1] = $oWkS->{MaxCol} ;
+ }
+ if( $start[0] < $oWkS->{MinRow}) {
+ print STDERR "" . ($start[0] + 1) . " < min row " . ($oWkS->{MinRow} + 1) . " Reseting\n";
+ $start[0] = $oWkS->{MinCol} ;
+ }
+ if( $end[0] > $oWkS->{MaxRow}) {
+ print STDERR "" . ($end[0] + 1) . " > max row " . ($oWkS->{MaxRow} + 1) . " Reseting\n";
+ $end[0] = $oWkS->{MaxRow} ;
+
+ }
+
+ my $x1 = $start[1] ;
+ my $y1 = $start[0] ;
+ my $x2 = $end[1] ;
+ my $y2 = $end[0] ;
+
+ if( !$rotate) {
+ for( my $y = $y1 ; $y <= $y2 ; $y++) {
+ for( my $x = $x1 ; $x <= $x2 ; $x++) {
+ my $cell = $oWkS->{Cells}[$y][$x] ;
+ $output .= $cell->Value if(defined $cell);
+ $output .= "," if( $x != $x2) ;
+ }
+ $output .= "\n" ;
+ }
+ } else {
+ for( my $x = $x1 ; $x <= $x2 ; $x++) {
+ for( my $y = $y1 ; $y <= $y2 ; $y++) {
+ my $cell = $oWkS->{Cells}[$y][$x] ;
+ $output .= $cell->Value if(defined $cell);
+ $output .= "," if( $y != $y2) ;
+ }
+ $output .= "\n" ;
+ }
+ }
+
+ return $output ;
+}
+
+1;
+__END__
+
+=head1 NAME
+
+Spreadsheet::ParseExcel::Utility - Utility function for Spreadsheet::ParseExcel
+
+=head1 SYNOPSIS
+
+ use strict;
+ #Declare
+ use Spreadsheet::ParseExcel::Utility qw(ExcelFmt ExcelLocaltime LocaltimeExcel);
+
+ #Convert localtime ->Excel Time
+ my $iBirth = LocaltimeExcel(11, 10, 12, 23, 2, 64);
+ # = 1964-3-23 12:10:11
+ print $iBirth, "\n"; # 23459.5070717593
+
+ #Convert Excel Time -> localtime
+ my @aBirth = ExcelLocaltime($iBirth, undef);
+ print join(":", @aBirth), "\n"; # 11:10:12:23:2:64:1:0
+
+ #Formatting
+ print ExcelFmt('yyyy-mm-dd', $iBirth), "\n"; #1964-3-23
+ print ExcelFmt('m-d-yy', $iBirth), "\n"; # 3-23-64
+ print ExcelFmt('#,##0', $iBirth), "\n"; # 23,460
+ print ExcelFmt('#,##0.00', $iBirth), "\n"; # 23,459.51
+ print ExcelFmt('"My Birthday is (m/d):" m/d', $iBirth), "\n";
+ # My Birthday is (m/d): 3/23
+
+=head1 DESCRIPTION
+
+Spreadsheet::ParseExcel::Utility exports utility functions concerned with Excel format setting.
+
+=head1 Functions
+
+This module can export 3 functions: ExcelFmt, ExcelLocaltime and LocaltimeExcel.
+
+=head2 ExcelFmt
+
+$sTxt = ExcelFmt($sFmt, $iData [, $i1904]);
+
+I<$sFmt> is a format string for Excel. I<$iData> is the target value.
+If I<$flg1904> is true, this functions assumes that epoch is 1904.
+I<$sTxt> is the result.
+
+For more detail and examples, please refer sample/chkFmt.pl in this distribution.
+
+ex.
+
+=head2 ExcelLocaltime
+
+($iSec, $iMin, $iHour, $iDay, $iMon, $iYear, $iwDay, $iMSec) =
+ ExcelLocaltime($iExTime [, $flg1904]);
+
+I<ExcelLocaltime> converts time information in Excel format into Perl localtime format.
+I<$iExTime> is a time of Excel. If I<$flg1904> is true, this functions assumes that
+epoch is 1904.
+I<$iSec>, I<$iMin>, I<$iHour>, I<$iDay>, I<$iMon>, I<$iYear>, I<$iwDay> are same as localtime.
+I<$iMSec> means 1/1,000,000 seconds(ms).
+
+
+=head2 LocaltimeExcel
+
+I<$iExTime> = LocaltimeExcel($iSec, $iMin, $iHour, $iDay, $iMon, $iYear [,$iMSec] [,$flg1904])
+
+I<LocaltimeExcel> converts time information in Perl localtime format into Excel format .
+I<$iSec>, I<$iMin>, I<$iHour>, I<$iDay>, I<$iMon>, I<$iYear> are same as localtime.
+
+If I<$flg1904> is true, this functions assumes that epoch is 1904.
+I<$iExTime> is a time of Excel.
+
+=head2 col2int
+
+I<$iInt> = col2int($sCol);
+
+converts a excel row letter into an int for use in an array
+
+This function was contributed by Kevin Mulholland.
+
+=head2 int2col
+
+I<$sCol> = int2col($iRow);
+
+convert a column number into column letters
+NOET: This is quite a brute force coarse method does not manage values over 701 (ZZ)
+
+This function was contributed by Kevin Mulholland.
+
+=head2 sheetRef
+
+(I<$iRow>, I<$iCol>) = sheetRef($sStr);
+
+convert an excel letter-number address into a useful array address
+NOTE: That also Excel uses X-Y notation, we normally use Y-X in arrays
+$sStr, excel coord (eg. A2).
+
+This function was contributed by Kevin Mulholland.
+
+=head2 xls2csv
+
+$sCsvTxt = xls2csv($sFileName, $sRegion, $iRotate);
+
+convert a chunk of an excel file into csv text chunk
+$sRegions = "sheet-colrow:colrow" (ex. '1-A1:B2' means 'A1:B2' for sheet 1)
+$iRotate = 0 or 1 (output should be rotated or not)
+
+This function was contributed by Kevin Mulholland.
+
+=head1 AUTHOR
+
+Kawai Takanori (Hippo2000) kwitknr at cpan.org
+
+ http://member.nifty.ne.jp/hippo2000/ (Japanese)
+ http://member.nifty.ne.jp/hippo2000/index_e.htm (English)
+
+=head1 SEE ALSO
+
+Spreadsheet::ParseExcel, Spreadsheet::WriteExcel
+
+=head1 COPYRIGHT
+
+This module is part of the Spreadsheet::ParseExcel distribution.
+
+=cut
Added: packages/libspreadsheet-parseexcel-perl/branches/upstream/current/ParseExcel.pm
===================================================================
--- packages/libspreadsheet-parseexcel-perl/branches/upstream/current/ParseExcel.pm 2005-01-25 02:10:47 UTC (rev 660)
+++ packages/libspreadsheet-parseexcel-perl/branches/upstream/current/ParseExcel.pm 2005-01-25 15:06:55 UTC (rev 661)
@@ -0,0 +1,2640 @@
+# Spreadsheet::ParseExcel
+# by Kawai, Takanori (Hippo2000) 2000.10.2
+# 2001. 2.2 (Ver. 0.15)
+# This Program is ALPHA version.
+#//////////////////////////////////////////////////////////////////////////////
+# Spreadsheet::ParseExcel Objects
+#//////////////////////////////////////////////////////////////////////////////
+use Spreadsheet::ParseExcel::FmtDefault;
+#==============================================================================
+# Spreadsheet::ParseExcel::Workbook
+#==============================================================================
+package Spreadsheet::ParseExcel::Workbook;
+require Exporter;
+use strict;
+use vars qw($VERSION @ISA);
+ at ISA = qw(Exporter);
+sub new($) {
+ my ($sClass) = @_;
+ my $oThis = {};
+ bless $oThis, $sClass;
+}
+#------------------------------------------------------------------------------
+# Spreadsheet::ParseExcel::Workbook->ParseAbort
+#------------------------------------------------------------------------------
+sub ParseAbort($$) {
+ my($oThis, $sVal) =@_;
+ $oThis->{_ParseAbort} = $sVal;
+}
+#------------------------------------------------------------------------------
+# Spreadsheet::ParseExcel::Workbook->Parse
+#------------------------------------------------------------------------------
+sub Parse($$;$) {
+ my($sClass, $sFile, $oFmt) =@_;
+ my $_oEx = new Spreadsheet::ParseExcel;
+ my $oBook = $_oEx->Parse($sFile, $oFmt);
+ $oBook->{_Excel} = $_oEx;
+ $oBook;
+}
+#------------------------------------------------------------------------------
+# Spreadsheet::ParseExcel::Workbook Worksheet
+#------------------------------------------------------------------------------
+sub Worksheet($$) {
+ my($oBook, $sName) =@_;
+ my $oWkS;
+ foreach $oWkS (@{$oBook->{Worksheet}}) {
+ return $oWkS if($oWkS->{Name} eq $sName);
+ }
+ if($sName =~ /^\d+$/) {
+ return $oBook->{Worksheet}->[$sName];
+ }
+ return undef;
+}
+#==============================================================================
+# Spreadsheet::ParseExcel::Worksheet
+#==============================================================================
+package Spreadsheet::ParseExcel::Worksheet;
+require Exporter;
+use strict;
+sub sheetNo($);
+use overload
+ '0+' => \&sheetNo,
+ 'fallback' => 1,
+;
+use vars qw($VERSION @ISA);
+ at ISA = qw(Exporter);
+sub new($%) {
+ my ($sClass, %rhIni) = @_;
+ my $oThis = \%rhIni;
+
+ $oThis->{Cells}=undef;
+ $oThis->{DefColWidth}=8.38;
+ bless $oThis, $sClass;
+}
+#------------------------------------------------------------------------------
+# Spreadsheet::ParseExcel::Worksheet->sheetNo
+#------------------------------------------------------------------------------
+sub sheetNo($){
+ my($oSelf) = @_;
+ return $oSelf->{_SheetNo};
+}
+#------------------------------------------------------------------------------
+# Spreadsheet::ParseExcel::Worksheet->Cell
+#------------------------------------------------------------------------------
+sub Cell($$$){
+ my($oSelf, $iR, $iC) = @_;
+
+ # return undef if no arguments are given or if no cells are defined
+ return if ((!defined($iR)) || (!defined($iC)) ||
+ (!defined($oSelf->{MaxRow})) || (!defined($oSelf->{MaxCol})));
+
+ # return undef if outside defined rectangle
+ return if (($iR < $oSelf->{MinRow}) || ($iR > $oSelf->{MaxRow}) ||
+ ($iC < $oSelf->{MinCol}) || ($iC > $oSelf->{MaxCol}));
+
+ # return the Cell object
+ return $oSelf->{Cells}[$iR][$iC];
+}
+#------------------------------------------------------------------------------
+# Spreadsheet::ParseExcel::Worksheet->RowRange
+#------------------------------------------------------------------------------
+sub RowRange($){
+ my($oSelf) = @_;
+ my $iMin = $oSelf->{MinRow} || 0;
+ my $iMax = defined($oSelf->{MaxRow}) ? $oSelf->{MaxRow} : ($iMin-1);
+
+ # return the range
+ return($iMin, $iMax);
+}
+#------------------------------------------------------------------------------
+# Spreadsheet::ParseExcel::Worksheet->ColRange
+#------------------------------------------------------------------------------
+sub ColRange($){
+ my($oSelf) = @_;
+ my $iMin = $oSelf->{MinCol} || 0;
+ my $iMax = defined($oSelf->{MaxCol}) ? $oSelf->{MaxCol} : ($iMin-1);
+
+ # return the range
+ return($iMin, $iMax);
+}
+
+#==============================================================================
+# Spreadsheet::ParseExcel::Font
+#==============================================================================
+package Spreadsheet::ParseExcel::Font;
+require Exporter;
+use strict;
+use vars qw($VERSION @ISA);
+ at ISA = qw(Exporter);
+sub new($%) {
+ my($sClass, %rhIni) = @_;
+ my $oThis = \%rhIni;
+
+ bless $oThis, $sClass;
+}
+#==============================================================================
+# Spreadsheet::ParseExcel::Format
+#==============================================================================
+package Spreadsheet::ParseExcel::Format;
+require Exporter;
+use strict;
+use vars qw($VERSION @ISA);
+ at ISA = qw(Exporter);
+sub new($%) {
+ my($sClass, %rhIni) = @_;
+ my $oThis = \%rhIni;
+
+ bless $oThis, $sClass;
+}
+#==============================================================================
+# Spreadsheet::ParseExcel::Cell
+#==============================================================================
+package Spreadsheet::ParseExcel::Cell;
+require Exporter;
+use strict;
+use vars qw($VERSION @ISA);
+ at ISA = qw(Exporter);
+
+sub new($%) {
+ my($sPkg, %rhKey)=@_;
+ my($sWk, $iLen);
+ my $oThis = \%rhKey;
+
+ bless $oThis, $sPkg;
+}
+
+sub Value($){
+ my($oThis)=@_;
+ return $oThis->{_Value};
+}
+#==============================================================================
+# Spreadsheet::ParseExcel
+#==============================================================================
+package Spreadsheet::ParseExcel;
+require Exporter;
+use strict;
+use OLE::Storage_Lite;
+use vars qw($VERSION @ISA);
+ at ISA = qw(Exporter);
+$VERSION = '0.2603'; #
+my @aColor =
+(
+ '000000', # 0x00
+ 'FFFFFF', 'FFFFFF', 'FFFFFF', 'FFFFFF',
+ 'FFFFFF', 'FFFFFF', 'FFFFFF', 'FFFFFF', #0x08 - This one's Black, too ???
+ 'FFFFFF', 'FF0000', '00FF00', '0000FF',
+ 'FFFF00', 'FF00FF', '00FFFF', '800000', # 0x10
+ '008000', '000080', '808000', '800080',
+ '008080', 'C0C0C0', '808080', '9999FF', # 0x18
+ '993366', 'FFFFCC', 'CCFFFF', '660066',
+ 'FF8080', '0066CC', 'CCCCFF', '000080', # 0x20
+ 'FF00FF', 'FFFF00', '00FFFF', '800080',
+ '800000', '008080', '0000FF', '00CCFF', # 0x28
+ 'CCFFFF', 'CCFFCC', 'FFFF99', '99CCFF',
+ 'FF99CC', 'CC99FF', 'FFCC99', '3366FF', # 0x30
+ '33CCCC', '99CC00', 'FFCC00', 'FF9900',
+ 'FF6600', '666699', '969696', '003366', # 0x38
+ '339966', '003300', '333300', '993300',
+ '993366', '333399', '333333', 'FFFFFF' # 0x40
+);
+use constant verExcel95 => 0x500;
+use constant verExcel97 =>0x600;
+use constant verBIFF2 =>0x00;
+use constant verBIFF3 =>0x02;
+use constant verBIFF4 =>0x04;
+use constant verBIFF5 =>0x08;
+use constant verBIFF8 =>0x18; #Added (Not in BOOK)
+
+my %ProcTbl =(
+#Develpers' Kit P291
+ 0x14 => \&_subHeader, # Header
+ 0x15 => \&_subFooter, # Footer
+ 0x18 => \&_subName, # NAME(?)
+ 0x1A => \&_subVPageBreak, # Veritical Page Break
+ 0x1B => \&_subHPageBreak, # Horizontal Page Break
+ 0x22 => \&_subFlg1904, # 1904 Flag
+ 0x26 => \&_subMergin, # Left Mergin
+ 0x27 => \&_subMergin, # Right Mergin
+ 0x28 => \&_subMergin, # Top Mergin
+ 0x29 => \&_subMergin, # Bottom Mergin
+ 0x2A => \&_subPrintHeaders, # Print Headers
+ 0x2B => \&_subPrintGridlines, # Print Gridlines
+ 0x3C => \&_subContinue, # Continue
+ 0x43 => \&_subXF, # ExTended Format(?)
+#Develpers' Kit P292
+ 0x55 =>\&_subDefColWidth, # Consider
+ 0x5C => \&_subWriteAccess, # WRITEACCESS
+ 0x7D => \&_subColInfo, # Colinfo
+ 0x7E => \&_subRK, # RK
+ 0x81 => \&_subWSBOOL, # WSBOOL
+ 0x83 => \&_subHcenter, # HCENTER
+ 0x84 => \&_subVcenter, # VCENTER
+ 0x85 => \&_subBoundSheet, # BoundSheet
+
+ 0x92 => \&_subPalette, # Palette, fgp
+
+ 0x99 => \&_subStandardWidth, # Standard Col
+#Develpers' Kit P293
+ 0xA1 => \&_subSETUP, # SETUP
+ 0xBD => \&_subMulRK, # MULRK
+ 0xBE => \&_subMulBlank, # MULBLANK
+ 0xD6 => \&_subRString, # RString
+#Develpers' Kit P294
+ 0xE0 => \&_subXF, # ExTended Format
+ 0xE5 => \&_subMergeArea, # MergeArea (Not Documented)
+ 0xFC => \&_subSST, # Shared String Table
+ 0xFD => \&_subLabelSST, # Label SST
+#Develpers' Kit P295
+ 0x201 => \&_subBlank, # Blank
+
+ 0x202 => \&_subInteger, # Integer(Not Documented)
+ 0x203 => \&_subNumber, # Number
+ 0x204 => \&_subLabel , # Label
+ 0x205 => \&_subBoolErr, # BoolErr
+ 0x207 => \&_subString, # STRING
+ 0x208 => \&_subRow, # RowData
+ 0x221 => \&_subArray, #Array (Consider)
+ 0x225 => \&_subDefaultRowHeight, # Consider
+
+
+ 0x31 => \&_subFont, # Font
+ 0x231 => \&_subFont, # Font
+
+ 0x27E => \&_subRK, # RK
+ 0x41E => \&_subFormat, # Format
+
+ 0x06 => \&_subFormula, # Formula
+ 0x406 => \&_subFormula, # Formula
+
+ 0x09 => \&_subBOF, # BOF(BIFF2)
+ 0x209 => \&_subBOF, # BOF(BIFF3)
+ 0x409 => \&_subBOF, # BOF(BIFF4)
+ 0x809 => \&_subBOF, # BOF(BIFF5-8)
+ );
+
+my $BIGENDIAN;
+my $PREFUNC;
+my $_CellHandler;
+my $_NotSetCell;
+my $_Object;
+#------------------------------------------------------------------------------
+# Spreadsheet::ParseExcel->new
+#------------------------------------------------------------------------------
+sub new($;%) {
+ my ($sPkg, %hParam) =@_;
+
+#0. Check ENDIAN(Little: Interl etc. BIG: Sparc etc)
+ $BIGENDIAN = (defined $hParam{Endian})? $hParam{Endian} :
+ (unpack("H08", pack("L", 2)) eq '02000000')? 0: 1;
+ my $oThis = {};
+ bless $oThis, $sPkg;
+
+#1. Set Parameter
+#1.1 Get Content
+ $oThis->{GetContent} = \&_subGetContent;
+
+#1.2 Set Event Handler
+ if($hParam{EventHandlers}) {
+ $oThis->SetEventHandlers($hParam{EventHandlers});
+ }
+ else {
+ $oThis->SetEventHandlers(\%ProcTbl);
+ }
+ if($hParam{AddHandlers}) {
+ foreach my $sKey (keys(%{$hParam{AddHandlers}})) {
+ $oThis->SetEventHandler($sKey, $hParam{AddHandlers}->{$sKey});
+ }
+ }
+#Experimental
+ $_CellHandler = $hParam{CellHandler} if($hParam{CellHandler});
+ $_NotSetCell = $hParam{NotSetCell};
+ $_Object = $hParam{Object};
+
+ return $oThis;
+}
+#------------------------------------------------------------------------------
+# Spreadsheet::ParseExcel->SetEventHandler
+#------------------------------------------------------------------------------
+sub SetEventHandler($$\&) {
+ my($oThis, $sKey, $oFunc) = @_;
+ $oThis->{FuncTbl}->{$sKey} = $oFunc;
+}
+#------------------------------------------------------------------------------
+# Spreadsheet::ParseExcel->SetEventHandlers
+#------------------------------------------------------------------------------
+sub SetEventHandlers($$) {
+ my($oThis, $rhTbl) = @_;
+ $oThis->{FuncTbl} = undef;
+ foreach my $sKey (keys %$rhTbl) {
+ $oThis->{FuncTbl}->{$sKey} = $rhTbl->{$sKey};
+ }
+}
+#------------------------------------------------------------------------------
+# Spreadsheet::ParseExcel->Parse
+#------------------------------------------------------------------------------
+sub Parse($$;$) {
+ my($oThis, $sFile, $oWkFmt)=@_;
+ my($sWk, $bLen);
+
+#0. New $oBook
+ my $oBook = Spreadsheet::ParseExcel::Workbook->new;
+ $oBook->{SheetCount} = 0;
+
+#1.Get content
+ my($sBIFF, $iLen);
+
+ if(ref($sFile) eq "SCALAR") {
+#1.1 Specified by Buffer
+ ($sBIFF, $iLen) = $oThis->{GetContent}->($sFile);
+ return undef unless($sBIFF);
+ }
+#1.2 Specified by Other Things(HASH reference etc)
+# elsif(ref($sFile)) {
+# return undef;
+# }
+#1.2 Specified by GLOB reference
+ elsif((ref($sFile) =~ /GLOB/) or
+ (ref($sFile) eq 'Fh')) { #For CGI.pm (Light FileHandle)
+ binmode($sFile);
+ my $sWk;
+ my $sBuff='';
+ while(read($sFile, $sWk, 4096)) {
+ $sBuff .= $sWk;
+ }
+ ($sBIFF, $iLen) = $oThis->{GetContent}->(\$sBuff);
+ return undef unless($sBIFF);
+ }
+ elsif(ref($sFile) eq 'ARRAY') {
+#1.3 Specified by File content
+ $oBook->{File} = undef;
+ my $sData = join('', @$sFile);
+ ($sBIFF, $iLen) = $oThis->{GetContent}->(\$sData);
+ return undef unless($sBIFF);
+ }
+ else {
+#1.4 Specified by File name
+ $oBook->{File} = $sFile;
+ return undef unless (-e $sFile);
+ ($sBIFF, $iLen) = $oThis->{GetContent}->($sFile);
+ return undef unless($sBIFF);
+ }
+
+#2. Ready for format
+ if ($oWkFmt) {
+ $oBook->{FmtClass} = $oWkFmt;
+ }
+ else {
+# require Spreadsheet::ParseExcel::FmtDefault;
+ $oBook->{FmtClass} = new Spreadsheet::ParseExcel::FmtDefault;
+ }
+
+#3. Parse content
+ my $lPos = 0;
+ $sWk = substr($sBIFF, $lPos, 4);
+ $lPos += 4;
+ my $iEfFlg = 0;
+ while($lPos<=$iLen) {
+ my($bOp, $bLen) = unpack("v2", $sWk);
+ if($bLen) {
+ $sWk = substr($sBIFF, $lPos, $bLen);
+ $lPos += $bLen;
+ }
+#printf STDERR "%4X:%s\n", $bOp, 'UNDEFIND---:' . unpack("H*", $sWk) unless($NameTbl{$bOp});
+ #Check EF, EOF
+ if($bOp == 0xEF) { #EF
+ $iEfFlg = $bOp;
+ }
+ elsif($bOp == 0x0A) { #EOF
+ undef $iEfFlg;
+ }
+ unless($iEfFlg) {
+ #1. Formula String with No String
+ if($oBook->{_PrevPos} && (defined $oThis->{FuncTbl}->{$bOp}) &&
+ ($bOp != 0x207)) {
+ my $iPos = $oBook->{_PrevPos};
+ $oBook->{_PrevPos} = undef;
+ my ($iR, $iC, $iF) = @$iPos;
+ _NewCell (
+ $oBook, $iR, $iC,
+ Kind => 'Formula String',
+ Val => '',
+ FormatNo=> $iF,
+ Format => $oBook->{Format}[$iF],
+ Numeric => 0,
+ Code => undef,
+ Book => $oBook,
+ );
+ }
+ if(defined $oThis->{FuncTbl}->{$bOp}) {
+ $oThis->{FuncTbl}->{$bOp}->($oBook, $bOp, $bLen, $sWk);
+ }
+ $PREFUNC = $bOp if ($bOp != 0x3C); #Not Continue
+ }
+ $sWk = substr($sBIFF, $lPos, 4) if(($lPos+4) <= $iLen);
+ $lPos += 4;
+ #Abort Parse
+ if(defined $oBook->{_ParseAbort}) {
+ return $oBook;
+ }
+ }
+#4.return $oBook
+ return $oBook;
+}
+#------------------------------------------------------------------------------
+# _subGetContent (for Spreadsheet::ParseExcel)
+#------------------------------------------------------------------------------
+sub _subGetContent($)
+{
+
+ my($sFile)=@_;
+
+ # warn qq{_subGetContent called; sFile:}, ref $sFile;
+
+ my $oOl = OLE::Storage_Lite->new($sFile);
+ return (undef, undef) unless($oOl);
+ my @aRes = $oOl->getPpsSearch(
+ [OLE::Storage_Lite::Asc2Ucs('Book'),
+ OLE::Storage_Lite::Asc2Ucs('Workbook')], 1, 1);
+ return (undef, undef) if($#aRes < 0);
+#Hack from Herbert
+ unless($aRes[0]->{Data}) {
+ #Same as OLE::Storage_Lite
+ my $oIo;
+ #1. $sFile is Ref of scalar
+ if(ref($sFile) eq 'SCALAR') {
+ $oIo = new IO::Scalar;
+ $oIo->open($sFile);
+ }
+ #2. $sFile is a IO::Handle object
+ elsif(UNIVERSAL::isa($sFile, 'IO::Handle')) {
+ $oIo = $sFile;
+ binmode($oIo);
+ }
+ #3. $sFile is a simple filename string
+ elsif(!ref($sFile)) {
+ $oIo = new IO::File;
+ $oIo->open("<$sFile") || return undef;
+ binmode($oIo);
+ }
+ my $sWk;
+ my $sBuff ='';
+
+ while($oIo->read($sWk, 4096)) { #4_096 has no special meanings
+ $sBuff .= $sWk;
+ }
+ $oIo->close();
+ #Not Excel file (simple method)
+ return (undef, undef) if (substr($sBuff, 0, 1) ne "\x09");
+ return ($sBuff, length($sBuff));
+ }
+ else {
+ return ($aRes[0]->{Data}, length($aRes[0]->{Data}));
+ }
+}
+#------------------------------------------------------------------------------
+# _subBOF (for Spreadsheet::ParseExcel) Developers' Kit : P303
+#------------------------------------------------------------------------------
+sub _subBOF($$$$){
+ my($oBook, $bOp, $bLen, $sWk) = @_;
+ my ($iVer, $iDt) = unpack("v2", $sWk);
+
+ #Workbook Global
+ if($iDt==0x0005) {
+ $oBook->{Version} = unpack("v", $sWk);
+ $oBook->{BIFFVersion} =
+ ($oBook->{Version}==verExcel95)? verBIFF5:verBIFF8;
+ $oBook->{_CurSheet} = undef;
+ $oBook->{_CurSheet_} = -1;
+ }
+ #Worksheeet or Dialogsheet
+ elsif($iDt != 0x0020) { #if($iDt == 0x0010) {
+ if(defined $oBook->{_CurSheet_}) {
+ $oBook->{_CurSheet} = $oBook->{_CurSheet_} + 1;
+ $oBook->{_CurSheet_}++;
+
+ ($oBook->{Worksheet}[$oBook->{_CurSheet}]->{SheetVersion},
+ $oBook->{Worksheet}[$oBook->{_CurSheet}]->{SheetType},)
+ = unpack("v2", $sWk) if(length($sWk) > 4);
+ }
+ else {
+ $oBook->{BIFFVersion} = int($bOp / 0x100);
+ if (($oBook->{BIFFVersion} == verBIFF2) ||
+ ($oBook->{BIFFVersion} == verBIFF3) ||
+ ($oBook->{BIFFVersion} == verBIFF4)) {
+ $oBook->{Version} = $oBook->{BIFFVersion};
+ $oBook->{_CurSheet} = 0;
+ $oBook->{Worksheet}[$oBook->{SheetCount}] =
+ new Spreadsheet::ParseExcel::Worksheet(
+ _Name => '',
+ Name => '',
+ _Book => $oBook,
+ _SheetNo => $oBook->{SheetCount},
+ );
+ $oBook->{SheetCount}++;
+ }
+ }
+ }
+ else {
+ ($oBook->{_CurSheet_}, $oBook->{_CurSheet}) =
+ (((defined $oBook->{_CurSheet})? $oBook->{_CurSheet}: -1),
+ undef);
+ }
+}
+#------------------------------------------------------------------------------
+# _subBlank (for Spreadsheet::ParseExcel) DK:P303
+#------------------------------------------------------------------------------
+sub _subBlank($$$$)
+{
+ my($oBook, $bOp, $bLen, $sWk) = @_;
+ my ($iR, $iC, $iF) = unpack("v3", $sWk);
+ _NewCell(
+ $oBook, $iR, $iC,
+ Kind => 'BLANK',
+ Val => '',
+ FormatNo=> $iF,
+ Format => $oBook->{Format}[$iF],
+ Numeric => 0,
+ Code => undef,
+ Book => $oBook,
+ );
+#2.MaxRow, MaxCol, MinRow, MinCol
+ _SetDimension($oBook, $iR, $iC, $iC);
+}
+#------------------------------------------------------------------------------
+# _subInteger (for Spreadsheet::ParseExcel) Not in DK
+#------------------------------------------------------------------------------
+sub _subInteger($$$$)
+{
+ my($oBook, $bOp, $bLen, $sWk) = @_;
+ my($iR, $iC, $iF, $sTxt, $sDum);
+
+ ($iR, $iC, $iF, $sDum, $sTxt) = unpack("v3cv", $sWk);
+ _NewCell (
+ $oBook, $iR, $iC,
+ Kind => 'INTEGER',
+ Val => $sTxt,
+ FormatNo=> $iF,
+ Format => $oBook->{Format}[$iF],
+ Numeric => 0,
+ Code => undef,
+ Book => $oBook,
+ );
+#2.MaxRow, MaxCol, MinRow, MinCol
+ _SetDimension($oBook, $iR, $iC, $iC);
+}
+#------------------------------------------------------------------------------
+# _subNumber (for Spreadsheet::ParseExcel) : DK: P354
+#------------------------------------------------------------------------------
+sub _subNumber($$$$)
+{
+ my($oBook, $bOp, $bLen, $sWk) = @_;
+
+ my ($iR, $iC, $iF) = unpack("v3", $sWk);
+ my $dVal = _convDval(substr($sWk, 6, 8));
+ _NewCell (
+ $oBook, $iR, $iC,
+ Kind => 'Number',
+ Val => $dVal,
+ FormatNo=> $iF,
+ Format => $oBook->{Format}[$iF],
+ Numeric => 1,
+ Code => undef,
+ Book => $oBook,
+ );
+#2.MaxRow, MaxCol, MinRow, MinCol
+ _SetDimension($oBook, $iR, $iC, $iC);
+}
+#------------------------------------------------------------------------------
+# _convDval (for Spreadsheet::ParseExcel)
+#------------------------------------------------------------------------------
+sub _convDval($) {
+ my($sWk)=@_;
+ return unpack("d", ($BIGENDIAN)?
+ pack("c8", reverse(unpack("c8", $sWk))) : $sWk);
+}
+#------------------------------------------------------------------------------
+# _subRString (for Spreadsheet::ParseExcel) DK:P405
+#------------------------------------------------------------------------------
+sub _subRString($$$$)
+{
+ my($oBook, $bOp, $bLen, $sWk) = @_;
+ my($iR, $iC, $iF, $iL, $sTxt);
+ ($iR, $iC, $iF, $iL) = unpack("v4", $sWk);
+ $sTxt = substr($sWk, 8, $iL);
+
+ #Has STRUN
+ if(length($sWk) > (8+$iL)) {
+ _NewCell (
+ $oBook, $iR, $iC,
+ Kind => 'RString',
+ Val => $sTxt,
+ FormatNo=> $iF,
+ Format => $oBook->{Format}[$iF],
+ Numeric => 0,
+ Code => '_native_', #undef,
+ Book => $oBook,
+ Rich => substr($sWk, (8+$iL)+1),
+ );
+ }
+ else {
+ _NewCell (
+ $oBook, $iR, $iC,
+ Kind => 'RString',
+ Val => $sTxt,
+ FormatNo=> $iF,
+ Format => $oBook->{Format}[$iF],
+ Numeric => 0,
+ Code => '_native_',
+ Book => $oBook,
+ );
+ }
+#2.MaxRow, MaxCol, MinRow, MinCol
+ _SetDimension($oBook, $iR, $iC, $iC);
+}
+#------------------------------------------------------------------------------
+# _subBoolErr (for Spreadsheet::ParseExcel) DK:P306
+#------------------------------------------------------------------------------
+sub _subBoolErr($$$$)
+{
+ my($oBook, $bOp, $bLen, $sWk) = @_;
+ my ($iR, $iC, $iF) = unpack("v3", $sWk);
+ my ($iVal, $iFlg) = unpack("cc", substr($sWk, 6, 2));
+ my $sTxt = DecodeBoolErr($iVal, $iFlg);
+
+ _NewCell (
+ $oBook, $iR, $iC,
+ Kind => 'BoolError',
+ Val => $sTxt,
+ FormatNo=> $iF,
+ Format => $oBook->{Format}[$iF],
+ Numeric => 0,
+ Code => undef,
+ Book => $oBook,
+ );
+#2.MaxRow, MaxCol, MinRow, MinCol
+ _SetDimension($oBook, $iR, $iC, $iC);
+}
+#------------------------------------------------------------------------------
+# _subRK (for Spreadsheet::ParseExcel) DK:P401
+#------------------------------------------------------------------------------
+sub _subRK($$$$)
+{
+ my($oBook, $bOp, $bLen, $sWk) = @_;
+ my ($iR, $iC) = unpack("v3", $sWk);
+
+ my($iF, $sTxt)= _UnpackRKRec(substr($sWk, 4, 6));
+ _NewCell (
+ $oBook, $iR, $iC,
+ Kind => 'RK',
+ Val => $sTxt,
+ FormatNo=> $iF,
+ Format => $oBook->{Format}[$iF],
+ Numeric => 1,
+ Code => undef,
+ Book => $oBook,
+ );
+#2.MaxRow, MaxCol, MinRow, MinCol
+ _SetDimension($oBook, $iR, $iC, $iC);
+}
+#------------------------------------------------------------------------------
+# _subArray (for Spreadsheet::ParseExcel) DK:P297
+#------------------------------------------------------------------------------
+sub _subArray($$$$)
+{
+ my($oBook, $bOp, $bLen, $sWk) = @_;
+ my ($iBR, $iER, $iBC, $iEC) = unpack("v2c2", $sWk);
+
+}
+#------------------------------------------------------------------------------
+# _subFormula (for Spreadsheet::ParseExcel) DK:P336
+#------------------------------------------------------------------------------
+sub _subFormula($$$$)
+{
+ my($oBook, $bOp, $bLen, $sWk) = @_;
+ my($iR, $iC, $iF) = unpack("v3", $sWk);
+
+ my ($iFlg) = unpack("v", substr($sWk,12,2));
+ if($iFlg == 0xFFFF) {
+ my($iKind) = unpack("c", substr($sWk, 6, 1));
+ my($iVal) = unpack("c", substr($sWk, 8, 1));
+
+ if(($iKind==1) or ($iKind==2)) {
+ my $sTxt = ($iKind == 1)? DecodeBoolErr($iVal, 0):DecodeBoolErr($iVal, 1);
+ _NewCell (
+ $oBook, $iR, $iC,
+ Kind => 'Formulra Bool',
+ Val => $sTxt,
+ FormatNo=> $iF,
+ Format => $oBook->{Format}[$iF],
+ Numeric => 0,
+ Code => undef,
+ Book => $oBook,
+ );
+ }
+ else { # Result (Reserve Only)
+ $oBook->{_PrevPos} = [$iR, $iC, $iF];
+ }
+ }
+ else {
+ my $dVal = _convDval(substr($sWk, 6, 8));
+ _NewCell (
+ $oBook, $iR, $iC,
+ Kind => 'Formula Number',
+ Val => $dVal,
+ FormatNo=> $iF,
+ Format => $oBook->{Format}[$iF],
+ Numeric => 1,
+ Code => undef,
+ Book => $oBook,
+ );
+ }
+#2.MaxRow, MaxCol, MinRow, MinCol
+ _SetDimension($oBook, $iR, $iC, $iC);
+}
+#------------------------------------------------------------------------------
+# _subString (for Spreadsheet::ParseExcel) DK:P414
+#------------------------------------------------------------------------------
+sub _subString($$$$)
+{
+ my($oBook, $bOp, $bLen, $sWk) = @_;
+#Position (not enough for ARRAY)
+
+ my $iPos = $oBook->{_PrevPos};
+ return undef unless($iPos);
+ $oBook->{_PrevPos} = undef;
+ my ($iR, $iC, $iF) = @$iPos;
+
+ my ($iLen, $sTxt, $sCode);
+ if($oBook->{BIFFVersion} == verBIFF8) {
+ my( $raBuff, $iLen) = _convBIFF8String($oBook, $sWk, 1);
+ $sTxt = $raBuff->[0];
+ $sCode = ($raBuff->[1])? 'ucs2': undef;
+ }
+ elsif($oBook->{BIFFVersion} == verBIFF5) {
+ $sCode = '_native_';
+ $iLen = unpack("v", $sWk);
+ $sTxt = substr($sWk, 2, $iLen);
+ }
+ else {
+ $sCode = '_native_';
+ $iLen = unpack("c", $sWk);
+ $sTxt = substr($sWk, 1, $iLen);
+ }
+ _NewCell (
+ $oBook, $iR, $iC,
+ Kind => 'String',
+ Val => $sTxt,
+ FormatNo=> $iF,
+ Format => $oBook->{Format}[$iF],
+ Numeric => 0,
+ Code => $sCode,
+ Book => $oBook,
+ );
+#2.MaxRow, MaxCol, MinRow, MinCol
+ _SetDimension($oBook, $iR, $iC, $iC);
+}
+#------------------------------------------------------------------------------
+# _subLabel (for Spreadsheet::ParseExcel) DK:P344
+#------------------------------------------------------------------------------
+sub _subLabel($$$$)
+{
+ my($oBook, $bOp, $bLen, $sWk) = @_;
+ my($iR, $iC, $iF) = unpack("v3", $sWk);
+ my ($sLbl, $sCode);
+ #BIFF8
+ if($oBook->{BIFFVersion} >= verBIFF8) {
+ my ( $raBuff, $iLen, $iStPos, $iLenS) =
+ _convBIFF8String($oBook, substr($sWk,6), 1);
+ $sLbl = $raBuff->[0];
+ $sCode = ($raBuff->[1])? 'ucs2': undef;
+ }
+ #Before BIFF8
+ else {
+ $sLbl = substr($sWk,8);
+ $sCode = '_native_';
+ }
+ _NewCell (
+ $oBook, $iR, $iC,
+ Kind => 'Label',
+ Val => $sLbl,
+ FormatNo=> $iF,
+ Format => $oBook->{Format}[$iF],
+ Numeric => 0,
+ Code => $sCode,
+ Book => $oBook,
+ );
+#2.MaxRow, MaxCol, MinRow, MinCol
+ _SetDimension($oBook, $iR, $iC, $iC);
+}
+#------------------------------------------------------------------------------
+# _subMulRK (for Spreadsheet::ParseExcel) DK:P349
+#------------------------------------------------------------------------------
+sub _subMulRK($$$$)
+{
+ my($oBook, $bOp, $bLen, $sWk) = @_;
+ return if ($oBook->{SheetCount}<=0);
+
+ my ($iR, $iSc) = unpack("v2", $sWk);
+ my $iEc = unpack("v", substr($sWk, length($sWk) -2, 2));
+
+ my $iPos = 4;
+ for(my $iC=$iSc; $iC<=$iEc; $iC++) {
+ my($iF, $lVal) = _UnpackRKRec(substr($sWk, $iPos, 6), $iR, $iC);
+ _NewCell (
+ $oBook, $iR, $iC,
+ Kind => 'MulRK',
+ Val => $lVal,
+ FormatNo=> $iF,
+ Format => $oBook->{Format}[$iF],
+ Numeric => 1,
+ Code => undef,
+ Book => $oBook,
+ );
+ $iPos += 6;
+ }
+#2.MaxRow, MaxCol, MinRow, MinCol
+ _SetDimension($oBook, $iR, $iSc, $iEc);
+}
+#------------------------------------------------------------------------------
+# _subMulBlank (for Spreadsheet::ParseExcel) DK:P349
+#------------------------------------------------------------------------------
+sub _subMulBlank($$$$)
+{
+ my($oBook, $bOp, $bLen, $sWk) = @_;
+ my ($iR, $iSc) = unpack("v2", $sWk);
+ my $iEc = unpack("v", substr($sWk, length($sWk)-2, 2));
+ my $iPos = 4;
+ for(my $iC=$iSc; $iC<=$iEc; $iC++) {
+ my $iF = unpack('v', substr($sWk, $iPos, 2));
+ _NewCell (
+ $oBook, $iR, $iC,
+ Kind => 'MulBlank',
+ Val => '',
+ FormatNo=> $iF,
+ Format => $oBook->{Format}[$iF],
+ Numeric => 0,
+ Code => undef,
+ Book => $oBook,
+ );
+ $iPos+=2;
+ }
+#2.MaxRow, MaxCol, MinRow, MinCol
+ _SetDimension($oBook, $iR, $iSc, $iEc);
+}
+#------------------------------------------------------------------------------
+# _subLabelSST (for Spreadsheet::ParseExcel) DK: P345
+#------------------------------------------------------------------------------
+sub _subLabelSST($$$$)
+{
+ my($oBook, $bOp, $bLen, $sWk) = @_;
+ my ($iR, $iC, $iF, $iIdx) = unpack('v3V', $sWk);
+
+ _NewCell (
+ $oBook, $iR, $iC,
+ Kind => 'PackedIdx',
+ Val => $oBook->{PkgStr}[$iIdx]->{Text},
+ FormatNo=> $iF,
+ Format => $oBook->{Format}[$iF],
+ Numeric => 0,
+ Code => ($oBook->{PkgStr}[$iIdx]->{Unicode})? 'ucs2': undef,
+ Book => $oBook,
+ Rich => $oBook->{PkgStr}[$iIdx]->{Rich},
+ );
+
+#2.MaxRow, MaxCol, MinRow, MinCol
+ _SetDimension($oBook, $iR, $iC, $iC);
+}
+#------------------------------------------------------------------------------
+# _subFlg1904 (for Spreadsheet::ParseExcel) DK:P296
+#------------------------------------------------------------------------------
+sub _subFlg1904($$$$)
+{
+ my($oBook, $bOp, $bLen, $sWk) = @_;
+ $oBook->{Flg1904} = unpack("v", $sWk);
+}
+#------------------------------------------------------------------------------
+# _subRow (for Spreadsheet::ParseExcel) DK:P403
+#------------------------------------------------------------------------------
+sub _subRow($$$$)
+{
+ my($oBook, $bOp, $bLen, $sWk) = @_;
+ return undef unless(defined $oBook->{_CurSheet});
+
+#0. Get Worksheet info (MaxRow, MaxCol, MinRow, MinCol)
+ my($iR, $iSc, $iEc, $iHght, $undef1, $undef2, $iGr, $iXf) = unpack("v8", $sWk);
+ $iEc--;
+
+#1. RowHeight
+ if($iGr & 0x20) { #Height = 0
+ $oBook->{Worksheet}[$oBook->{_CurSheet}]->{RowHeight}[$iR] = 0;
+ }
+ else {
+ $oBook->{Worksheet}[$oBook->{_CurSheet}]->{RowHeight}[$iR] = $iHght/20.0;
+ }
+
+#2.MaxRow, MaxCol, MinRow, MinCol
+ _SetDimension($oBook, $iR, $iSc, $iEc);
+}
+#------------------------------------------------------------------------------
+# _SetDimension (for Spreadsheet::ParseExcel)
+#------------------------------------------------------------------------------
+sub _SetDimension($$$$)
+{
+ my($oBook, $iR, $iSc, $iEc)=@_;
+ return undef unless(defined $oBook->{_CurSheet});
+
+#2.MaxRow, MaxCol, MinRow, MinCol
+#2.1 MinRow
+ $oBook->{Worksheet}[$oBook->{_CurSheet}]->{MinRow} = $iR
+ unless (defined $oBook->{Worksheet}[$oBook->{_CurSheet}]->{MinRow}) and
+ ($oBook->{Worksheet}[$oBook->{_CurSheet}]->{MinRow} <= $iR);
+
+#2.2 MaxRow
+ $oBook->{Worksheet}[$oBook->{_CurSheet}]->{MaxRow} = $iR
+ unless (defined $oBook->{Worksheet}[$oBook->{_CurSheet}]->{MaxRow}) and
+ ($oBook->{Worksheet}[$oBook->{_CurSheet}]->{MaxRow} > $iR);
+#2.3 MinCol
+ $oBook->{Worksheet}[$oBook->{_CurSheet}]->{MinCol} = $iSc
+ unless (defined $oBook->{Worksheet}[$oBook->{_CurSheet}]->{MinCol}) and
+ ($oBook->{Worksheet}[$oBook->{_CurSheet}]->{MinCol} <= $iSc);
+#2.4 MaxCol
+ $oBook->{Worksheet}[$oBook->{_CurSheet}]->{MaxCol} = $iEc
+ unless (defined $oBook->{Worksheet}[$oBook->{_CurSheet}]->{MaxCol}) and
+ ($oBook->{Worksheet}[$oBook->{_CurSheet}]->{MaxCol} > $iEc);
+
+}
+#------------------------------------------------------------------------------
+# _subDefaultRowHeight (for Spreadsheet::ParseExcel) DK: P318
+#------------------------------------------------------------------------------
+sub _subDefaultRowHeight($$$$)
+{
+ my($oBook, $bOp, $bLen, $sWk) = @_;
+ return undef unless(defined $oBook->{_CurSheet});
+#1. RowHeight
+ my($iDum, $iHght) = unpack("v2", $sWk);
+ $oBook->{Worksheet}[$oBook->{_CurSheet}]->{DefRowHeight} = $iHght/20;
+
+}
+#------------------------------------------------------------------------------
+# _subStandardWidth(for Spreadsheet::ParseExcel) DK:P413
+#------------------------------------------------------------------------------
+sub _subStandardWidth($$$$)
+{
+ my($oBook, $bOp, $bLen, $sWk) = @_;
+ my $iW = unpack("v", $sWk);
+ $oBook->{StandardWidth}= _adjustColWidth($oBook, $iW);
+}
+#------------------------------------------------------------------------------
+# _subDefColWidth(for Spreadsheet::ParseExcel) DK:P319
+#------------------------------------------------------------------------------
+sub _subDefColWidth($$$$)
+{
+ my($oBook, $bOp, $bLen, $sWk) = @_;
+ return undef unless(defined $oBook->{_CurSheet});
+ my $iW = unpack("v", $sWk);
+ $oBook->{Worksheet}[$oBook->{_CurSheet}]->{DefColWidth}= _adjustColWidth($oBook, $iW);
+}
+#------------------------------------------------------------------------------
+# _adjustColWidth (for Spreadsheet::ParseExcel)
+#------------------------------------------------------------------------------
+sub _adjustColWidth($$) {
+ my($oBook, $iW)=@_;
+ return (($iW -0xA0)/256);
+# ($oBook->{Worksheet}[$oBook->{_CurSheet}]->{SheetVersion} == verExcel97)?
+# (($iW -0xA0)/256) : $iW;
+}
+#------------------------------------------------------------------------------
+# _subColInfo (for Spreadsheet::ParseExcel) DK:P309
+#------------------------------------------------------------------------------
+sub _subColInfo($$$$)
+{
+ my($oBook, $bOp, $bLen, $sWk) = @_;
+ return undef unless(defined $oBook->{_CurSheet});
+ my($iSc, $iEc, $iW, $iXF, $iGr) = unpack("v5", $sWk);
+ for(my $i= $iSc; $i<=$iEc; $i++) {
+ $oBook->{Worksheet}[$oBook->{_CurSheet}]->{ColWidth}[$i] =
+ ($iGr & 0x01)? 0: _adjustColWidth($oBook, $iW);
+ #0x01 means HIDDEN
+ $oBook->{Worksheet}[$oBook->{_CurSheet}]->{ColFmtNo}[$i] = $iXF;
+ # $oBook->{Worksheet}[$oBook->{_CurSheet}]->{ColCr}[$i] = $iGr; #Not Implemented
+ }
+}
+#------------------------------------------------------------------------------
+# _subSST (for Spreadsheet::ParseExcel) DK:P413
+#------------------------------------------------------------------------------
+sub _subSST($$$$)
+{
+ my($oBook, $bOp, $bLen, $sWk) = @_;
+ _subStrWk($oBook, substr($sWk, 8));
+}
+#------------------------------------------------------------------------------
+# _subContinue (for Spreadsheet::ParseExcel) DK:P311
+#------------------------------------------------------------------------------
+sub _subContinue($$$$)
+{
+ my($oBook, $bOp, $bLen, $sWk) = @_;
+=cmmt
+ if(defined $oThis->{FuncTbl}->{$bOp}) {
+ $oThis->{FuncTbl}->{$PREFUNC}->($oBook, $bOp, $bLen, $sWk);
+ }
+=cut
+ _subStrWk($oBook, $sWk, 1) if($PREFUNC == 0xFC);
+}
+#------------------------------------------------------------------------------
+# _subWriteAccess (for Spreadsheet::ParseExcel) DK:P451
+#------------------------------------------------------------------------------
+sub _subWriteAccess($$$$)
+{
+ my($oBook, $bOp, $bLen, $sWk) = @_;
+ return if (defined $oBook->{_Author});
+
+ #BIFF8
+ if($oBook->{BIFFVersion} >= verBIFF8) {
+ $oBook->{Author} = _convBIFF8String($oBook, $sWk);
+ }
+ #Before BIFF8
+ else {
+ my($iLen) = unpack("c", $sWk);
+ $oBook->{Author} = $oBook->{FmtClass}->TextFmt(substr($sWk, 1, $iLen), '_native_');
+ }
+}
+#------------------------------------------------------------------------------
+# _convBIFF8String (for Spreadsheet::ParseExcel)
+#------------------------------------------------------------------------------
+sub _convBIFF8String($$;$){
+ my($oBook, $sWk, $iCnvFlg) = @_;
+ my($iLen, $iFlg) = unpack("vc", $sWk);
+ my($iHigh, $iExt, $iRich) = ($iFlg & 0x01, $iFlg & 0x04, $iFlg & 0x08);
+ my($iStPos, $iExtCnt, $iRichCnt, $sStr);
+#2. Rich and Ext
+ if($iRich && $iExt) {
+ $iStPos = 9;
+ ($iRichCnt, $iExtCnt) = unpack('vV', substr($sWk, 3, 6));
+ }
+ elsif($iRich) { #Only Rich
+ $iStPos = 5;
+ $iRichCnt = unpack('v', substr($sWk, 3, 2));
+ $iExtCnt = 0;
+ }
+ elsif($iExt) { #Only Ext
+ $iStPos = 7;
+ $iRichCnt = 0;
+ $iExtCnt = unpack('V', substr($sWk, 3, 4));
+ }
+ else { #Nothing Special
+ $iStPos = 3;
+ $iExtCnt = 0;
+ $iRichCnt = 0;
+ }
+#3.Get String
+ if($iHigh) { #Compressed
+ $iLen *= 2;
+ $sStr = substr($sWk, $iStPos, $iLen);
+ _SwapForUnicode(\$sStr);
+ $sStr = $oBook->{FmtClass}->TextFmt($sStr, 'ucs2') unless($iCnvFlg);
+ }
+ else { #Not Compressed
+ $sStr = substr($sWk, $iStPos, $iLen);
+ $sStr = $oBook->{FmtClass}->TextFmt($sStr, undef) unless($iCnvFlg);
+ }
+
+#4. return
+ if(wantarray) {
+ #4.1 Get Rich and Ext
+ if(length($sWk) < $iStPos + $iLen+ $iRichCnt*4+$iExtCnt) {
+ return ([undef, $iHigh, undef, undef],
+ $iStPos + $iLen+ $iRichCnt*4+$iExtCnt, $iStPos, $iLen);
+ }
+ else {
+ return ([$sStr, $iHigh,
+ substr($sWk, $iStPos + $iLen, $iRichCnt*4),
+ substr($sWk, $iStPos + $iLen+ $iRichCnt*4, $iExtCnt)],
+ $iStPos + $iLen+ $iRichCnt*4+$iExtCnt, $iStPos, $iLen);
+ }
+ }
+ else {
+ return $sStr;
+ }
+}
+#------------------------------------------------------------------------------
+# _subXF (for Spreadsheet::ParseExcel) DK:P453
+#------------------------------------------------------------------------------
+sub _subXF($$$$)
+{
+ my($oBook, $bOp, $bLen, $sWk) = @_;
+
+ my ($iFnt, $iIdx);
+ my($iLock, $iHidden, $iStyle, $i123, $iAlH, $iWrap, $iAlV, $iJustL, $iRotate,
+ $iInd, $iShrink, $iMerge, $iReadDir, $iBdrD,
+ $iBdrSL, $iBdrSR, $iBdrST, $iBdrSB, $iBdrSD,
+ $iBdrCL, $iBdrCR, $iBdrCT, $iBdrCB, $iBdrCD,
+ $iFillP, $iFillCF, $iFillCB);
+
+ if($oBook->{BIFFVersion} == verBIFF8) {
+ my ($iGen, $iAlign, $iGen2, $iBdr1, $iBdr2, $iBdr3, $iPtn );
+
+ ($iFnt, $iIdx, $iGen, $iAlign, $iGen2, $iBdr1, $iBdr2, $iBdr3, $iPtn )
+ = unpack("v7Vv", $sWk);
+ $iLock = ($iGen & 0x01)? 1:0;
+ $iHidden = ($iGen & 0x02)? 1:0;
+ $iStyle = ($iGen & 0x04)? 1:0;
+ $i123 = ($iGen & 0x08)? 1:0;
+ $iAlH = ($iAlign & 0x07);
+ $iWrap = ($iAlign & 0x08)? 1:0;
+ $iAlV = ($iAlign & 0x70) / 0x10;
+ $iJustL = ($iAlign & 0x80)? 1:0;
+
+ $iRotate = (($iAlign & 0xFF00) / 0x100) & 0x00FF;
+ $iRotate = 90 if($iRotate == 255);
+ $iRotate = 90 - $iRotate if($iRotate > 90);
+
+ $iInd = ($iGen2 & 0x0F);
+ $iShrink = ($iGen2 & 0x10)? 1:0;
+ $iMerge = ($iGen2 & 0x20)? 1:0;
+ $iReadDir = (($iGen2 & 0xC0) / 0x40) & 0x03;
+ $iBdrSL = $iBdr1 & 0x0F;
+ $iBdrSR = (($iBdr1 & 0xF0) / 0x10) & 0x0F;
+ $iBdrST = (($iBdr1 & 0xF00) / 0x100) & 0x0F;
+ $iBdrSB = (($iBdr1 & 0xF000) / 0x1000) & 0x0F;
+
+ $iBdrCL = (($iBdr2 & 0x7F)) & 0x7F;
+ $iBdrCR = (($iBdr2 & 0x3F80) / 0x80) & 0x7F;
+ $iBdrD = (($iBdr2 & 0xC000) / 0x4000) & 0x3;
+
+ $iBdrCT = (($iBdr3 & 0x7F)) & 0x7F;
+ $iBdrCB = (($iBdr3 & 0x3F80) / 0x80) & 0x7F;
+ $iBdrCD = (($iBdr3 & 0x1FC000) / 0x4000) & 0x7F;
+ $iBdrSD = (($iBdr3 & 0x1E00000) / 0x200000) & 0xF;
+ $iFillP = (($iBdr3 & 0xFC000000) / 0x4000000) & 0x3F;
+
+ $iFillCF = ($iPtn & 0x7F);
+ $iFillCB = (($iPtn & 0x3F80) / 0x80) & 0x7F;
+ }
+ else {
+ my ($iGen, $iAlign, $iPtn, $iPtn2, $iBdr1, $iBdr2);
+
+ ($iFnt, $iIdx, $iGen, $iAlign, $iPtn, $iPtn2, $iBdr1, $iBdr2)
+ = unpack("v8", $sWk);
+ $iLock = ($iGen & 0x01)? 1:0;
+ $iHidden = ($iGen & 0x02)? 1:0;
+ $iStyle = ($iGen & 0x04)? 1:0;
+ $i123 = ($iGen & 0x08)? 1:0;
+
+ $iAlH = ($iAlign & 0x07);
+ $iWrap = ($iAlign & 0x08)? 1:0;
+ $iAlV = ($iAlign & 0x70) / 0x10;
+ $iJustL = ($iAlign & 0x80)? 1:0;
+
+ $iRotate = (($iAlign & 0x300) / 0x100) & 0x3;
+
+ $iFillCF = ($iPtn & 0x7F);
+ $iFillCB = (($iPtn & 0x1F80) / 0x80) & 0x7F;
+
+ $iFillP = ($iPtn2 & 0x3F);
+ $iBdrSB = (($iPtn2 & 0x1C0) / 0x40) & 0x7;
+ $iBdrCB = (($iPtn2 & 0xFE00) / 0x200) & 0x7F;
+
+ $iBdrST = ($iBdr1 & 0x07);
+ $iBdrSL = (($iBdr1 & 0x38) / 0x8) & 0x07;
+ $iBdrSR = (($iBdr1 & 0x1C0) / 0x40) & 0x07;
+ $iBdrCT = (($iBdr1 & 0xFE00) / 0x200) & 0x7F;
+
+ $iBdrCL = ($iBdr2 & 0x7F) & 0x7F;
+ $iBdrCR = (($iBdr2 & 0x3F80) / 0x80) & 0x7F;
+ }
+
+ push @{$oBook->{Format}} ,
+ Spreadsheet::ParseExcel::Format->new (
+ FontNo => $iFnt,
+ Font => $oBook->{Font}[$iFnt],
+ FmtIdx => $iIdx,
+
+ Lock => $iLock,
+ Hidden => $iHidden,
+ Style => $iStyle,
+ Key123 => $i123,
+ AlignH => $iAlH,
+ Wrap => $iWrap,
+ AlignV => $iAlV,
+ JustLast => $iJustL,
+ Rotate => $iRotate,
+
+ Indent => $iInd,
+ Shrink => $iShrink,
+ Merge => $iMerge,
+ ReadDir => $iReadDir,
+
+ BdrStyle => [$iBdrSL, $iBdrSR, $iBdrST, $iBdrSB],
+ BdrColor => [$iBdrCL, $iBdrCR, $iBdrCT, $iBdrCB],
+ BdrDiag => [$iBdrD, $iBdrSD, $iBdrCD],
+ Fill => [$iFillP, $iFillCF, $iFillCB],
+ );
+}
+#------------------------------------------------------------------------------
+# _subFormat (for Spreadsheet::ParseExcel) DK: P336
+#------------------------------------------------------------------------------
+sub _subFormat($$$$)
+{
+ my($oBook, $bOp, $bLen, $sWk) = @_;
+ my $sFmt;
+ if (($oBook->{BIFFVersion} == verBIFF2) ||
+ ($oBook->{BIFFVersion} == verBIFF3) ||
+ ($oBook->{BIFFVersion} == verBIFF4) ||
+ ($oBook->{BIFFVersion} == verBIFF5) ) {
+ $sFmt = substr($sWk, 3, unpack('c', substr($sWk, 2, 1)));
+ $sFmt = $oBook->{FmtClass}->TextFmt($sFmt, '_native_');
+ }
+ else {
+ $sFmt = _convBIFF8String($oBook, substr($sWk, 2));
+ }
+ $oBook->{FormatStr}->{unpack('v', substr($sWk, 0, 2))} = $sFmt;
+}
+#------------------------------------------------------------------------------
+# _subPalette (for Spreadsheet::ParseExcel) DK: P393
+#------------------------------------------------------------------------------
+sub _subPalette($$$$)
+{
+ my($oBook, $bOp, $bLen, $sWk) = @_;
+ for(my $i=0;$i<unpack('v', $sWk);$i++) {
+# push @aColor, unpack('H6', substr($sWk, $i*4+2));
+ $aColor[$i+8] = unpack('H6', substr($sWk, $i*4+2));
+ }
+}
+#------------------------------------------------------------------------------
+# _subFont (for Spreadsheet::ParseExcel) DK:P333
+#------------------------------------------------------------------------------
+sub _subFont($$$$)
+{
+ my($oBook, $bOp, $bLen, $sWk) = @_;
+ my($iHeight, $iAttr, $iCIdx, $iBold, $iSuper, $iUnderline, $sFntName);
+ my($bBold, $bItalic, $bUnderline, $bStrikeout);
+
+ if($oBook->{BIFFVersion} == verBIFF8) {
+ ($iHeight, $iAttr, $iCIdx, $iBold, $iSuper, $iUnderline) =
+ unpack("v5c", $sWk);
+ my($iSize, $iHigh) = unpack('cc', substr($sWk, 14, 2));
+ if($iHigh) {
+ $sFntName = substr($sWk, 16, $iSize*2);
+ _SwapForUnicode(\$sFntName);
+ $sFntName = $oBook->{FmtClass}->TextFmt($sFntName, 'ucs2');
+ }
+ else {
+ $sFntName = substr($sWk, 16, $iSize);
+ $sFntName = $oBook->{FmtClass}->TextFmt($sFntName, '_native_');
+ }
+ $bBold = ($iBold >= 0x2BC)? 1: 0;
+ $bItalic = ($iAttr & 0x02)? 1: 0;
+ $bStrikeout = ($iAttr & 0x08)? 1: 0;
+ $bUnderline = ($iUnderline)? 1: 0;
+ }
+ elsif($oBook->{BIFFVersion} == verBIFF5) {
+ ($iHeight, $iAttr, $iCIdx, $iBold, $iSuper, $iUnderline) =
+ unpack("v5c", $sWk);
+ $sFntName = $oBook->{FmtClass}->TextFmt(
+ substr($sWk, 15, unpack("c", substr($sWk, 14, 1))),
+ '_native_');
+ $bBold = ($iBold >= 0x2BC)? 1: 0;
+ $bItalic = ($iAttr & 0x02)? 1: 0;
+ $bStrikeout = ($iAttr & 0x08)? 1: 0;
+ $bUnderline = ($iUnderline)? 1: 0;
+ }
+ else {
+ ($iHeight, $iAttr) = unpack("v2", $sWk);
+ $iCIdx = undef;
+ $iSuper = 0;
+
+ $bBold = ($iAttr & 0x01)? 1: 0;
+ $bItalic = ($iAttr & 0x02)? 1: 0;
+ $bUnderline = ($iAttr & 0x04)? 1: 0;
+ $bStrikeout = ($iAttr & 0x08)? 1: 0;
+
+ $sFntName = substr($sWk, 5, unpack("c", substr($sWk, 4, 1)));
+ }
+ push @{$oBook->{Font}},
+ Spreadsheet::ParseExcel::Font->new(
+ Height => $iHeight / 20.0,
+ Attr => $iAttr,
+ Color => $iCIdx,
+ Super => $iSuper,
+ UnderlineStyle => $iUnderline,
+ Name => $sFntName,
+
+ Bold => $bBold,
+ Italic => $bItalic,
+ Underline => $bUnderline,
+ Strikeout => $bStrikeout,
+ );
+ #Skip Font[4]
+ push @{$oBook->{Font}}, {} if(scalar(@{$oBook->{Font}}) == 4);
+
+}
+#------------------------------------------------------------------------------
+# _subBoundSheet (for Spreadsheet::ParseExcel): DK: P307
+#------------------------------------------------------------------------------
+sub _subBoundSheet($$$$)
+{
+ my($oBook, $bOp, $bLen, $sWk) = @_;
+ my($iPos, $iGr, $iKind) = unpack("Lc2", $sWk);
+ $iKind &= 0x0F;
+ return if(($iKind != 0x00) && ($iKind != 0x01));
+
+ if($oBook->{BIFFVersion} >= verBIFF8) {
+ my($iSize, $iUni) = unpack("cc", substr($sWk, 6, 2));
+ my $sWsName = substr($sWk, 8);
+ if($iUni & 0x01) {
+ _SwapForUnicode(\$sWsName);
+ $sWsName = $oBook->{FmtClass}->TextFmt($sWsName, 'ucs2');
+ }
+ $oBook->{Worksheet}[$oBook->{SheetCount}] =
+ new Spreadsheet::ParseExcel::Worksheet(
+ Name => $sWsName,
+ Kind => $iKind,
+ _Pos => $iPos,
+ _Book => $oBook,
+ _SheetNo => $oBook->{SheetCount},
+ );
+ }
+ else {
+ $oBook->{Worksheet}[$oBook->{SheetCount}] =
+ new Spreadsheet::ParseExcel::Worksheet(
+ Name => $oBook->{FmtClass}->TextFmt(substr($sWk, 7), '_native_'),
+ Kind => $iKind,
+ _Pos => $iPos,
+ _Book => $oBook,
+ _SheetNo => $oBook->{SheetCount},
+ );
+ }
+ $oBook->{SheetCount}++;
+}
+#------------------------------------------------------------------------------
+# _subHeader (for Spreadsheet::ParseExcel) DK: P340
+#------------------------------------------------------------------------------
+sub _subHeader($$$$)
+{
+ my($oBook, $bOp, $bLen, $sWk) = @_;
+ return undef unless(defined $oBook->{_CurSheet});
+ my $sW;
+ #BIFF8
+ if($oBook->{BIFFVersion} >= verBIFF8) {
+ $sW = _convBIFF8String($oBook, $sWk);
+ $oBook->{Worksheet}[$oBook->{_CurSheet}]->{Header} =
+ ($sW eq "\x00")? undef : $sW;
+ }
+ #Before BIFF8
+ else {
+ my($iLen) = unpack("c", $sWk);
+ $sW = $oBook->{FmtClass}->TextFmt(substr($sWk, 1, $iLen), '_native_');
+ $oBook->{Worksheet}[$oBook->{_CurSheet}]->{Header} =
+ ($sW eq "\x00\x00\x00")? undef : $sW;
+ }
+}
+#------------------------------------------------------------------------------
+# _subFooter (for Spreadsheet::ParseExcel) DK: P335
+#------------------------------------------------------------------------------
+sub _subFooter($$$$)
+{
+ my($oBook, $bOp, $bLen, $sWk) = @_;
+ return undef unless(defined $oBook->{_CurSheet});
+ my $sW;
+ #BIFF8
+ if($oBook->{BIFFVersion} >= verBIFF8) {
+ $sW = _convBIFF8String($oBook, $sWk);
+ $oBook->{Worksheet}[$oBook->{_CurSheet}]->{Footer} =
+ ($sW eq "\x00")? undef : $sW;
+ }
+ #Before BIFF8
+ else {
+ my($iLen) = unpack("c", $sWk);
+ $sW = $oBook->{FmtClass}->TextFmt(substr($sWk, 1, $iLen), '_native_');
+ $oBook->{Worksheet}[$oBook->{_CurSheet}]->{Footer} =
+ ($sW eq "\x00\x00\x00")? undef : $sW;
+ }
+}
+#------------------------------------------------------------------------------
+# _subHPageBreak (for Spreadsheet::ParseExcel) DK: P341
+#------------------------------------------------------------------------------
+sub _subHPageBreak($$$$)
+{
+ my($oBook, $bOp, $bLen, $sWk) = @_;
+ my @aBreak;
+ my $iCnt = unpack("v", $sWk);
+
+ return undef unless(defined $oBook->{_CurSheet});
+ #BIFF8
+ if($oBook->{BIFFVersion} >= verBIFF8) {
+ for(my $i=0;$i<$iCnt;$i++) {
+ my($iRow, $iColB, $iColE) =
+ unpack('v3', substr($sWk, 2 + $i*6, 6));
+# push @aBreak, [$iRow, $iColB, $iColE];
+ push @aBreak, $iRow;
+ }
+ }
+ #Before BIFF8
+ else {
+ for(my $i=0;$i<$iCnt;$i++) {
+ my($iRow) =
+ unpack('v', substr($sWk, 2 + $i*2, 2));
+ push @aBreak, $iRow;
+# push @aBreak, [$iRow, 0, 255];
+ }
+ }
+ @aBreak = sort {$a <=> $b} @aBreak;
+ $oBook->{Worksheet}[$oBook->{_CurSheet}]->{HPageBreak} = \@aBreak;
+}
+#------------------------------------------------------------------------------
+# _subVPageBreak (for Spreadsheet::ParseExcel) DK: P447
+#------------------------------------------------------------------------------
+sub _subVPageBreak($$$$)
+{
+ my($oBook, $bOp, $bLen, $sWk) = @_;
+ return undef unless(defined $oBook->{_CurSheet});
+
+ my @aBreak;
+ my $iCnt = unpack("v", $sWk);
+ #BIFF8
+ if($oBook->{BIFFVersion} >= verBIFF8) {
+ for(my $i=0;$i<$iCnt;$i++) {
+ my($iCol, $iRowB, $iRowE) =
+ unpack('v3', substr($sWk, 2 + $i*6, 6));
+ push @aBreak, $iCol;
+# push @aBreak, [$iCol, $iRowB, $iRowE];
+ }
+ }
+ #Before BIFF8
+ else {
+ for(my $i=0;$i<$iCnt;$i++) {
+ my($iCol) =
+ unpack('v', substr($sWk, 2 + $i*2, 2));
+ push @aBreak, $iCol;
+# push @aBreak, [$iCol, 0, 65535];
+ }
+ }
+ @aBreak = sort {$a <=> $b} @aBreak;
+ $oBook->{Worksheet}[$oBook->{_CurSheet}]->{VPageBreak} = \@aBreak;
+}
+#------------------------------------------------------------------------------
+# _subMergin (for Spreadsheet::ParseExcel) DK: P306, 345, 400, 440
+#------------------------------------------------------------------------------
+sub _subMergin($$$$)
+{
+ my($oBook, $bOp, $bLen, $sWk) = @_;
+ return undef unless(defined $oBook->{_CurSheet});
+
+ my $dWk = _convDval(substr($sWk, 0, 8)) * 127 / 50;
+ if($bOp == 0x26) {
+ $oBook->{Worksheet}[$oBook->{_CurSheet}]->{LeftMergin} = $dWk;
+ }
+ elsif($bOp == 0x27) {
+ $oBook->{Worksheet}[$oBook->{_CurSheet}]->{RightMergin} = $dWk;
+ }
+ elsif($bOp == 0x28) {
+ $oBook->{Worksheet}[$oBook->{_CurSheet}]->{TopMergin} = $dWk;
+ }
+ elsif($bOp == 0x29) {
+ $oBook->{Worksheet}[$oBook->{_CurSheet}]->{BottomMergin} = $dWk;
+ }
+}
+#------------------------------------------------------------------------------
+# _subHcenter (for Spreadsheet::ParseExcel) DK: P340
+#------------------------------------------------------------------------------
+sub _subHcenter($$$$)
+{
+ my($oBook, $bOp, $bLen, $sWk) = @_;
+ return undef unless(defined $oBook->{_CurSheet});
+
+ my $iWk = unpack("v", $sWk);
+ $oBook->{Worksheet}[$oBook->{_CurSheet}]->{HCenter} = $iWk;
+
+}
+#------------------------------------------------------------------------------
+# _subVcenter (for Spreadsheet::ParseExcel) DK: P447
+#------------------------------------------------------------------------------
+sub _subVcenter($$$$)
+{
+ my($oBook, $bOp, $bLen, $sWk) = @_;
+ return undef unless(defined $oBook->{_CurSheet});
+
+ my $iWk = unpack("v", $sWk);
+ $oBook->{Worksheet}[$oBook->{_CurSheet}]->{VCenter} = $iWk;
+}
+#------------------------------------------------------------------------------
+# _subPrintGridlines (for Spreadsheet::ParseExcel) DK: P397
+#------------------------------------------------------------------------------
+sub _subPrintGridlines($$$$)
+{
+ my($oBook, $bOp, $bLen, $sWk) = @_;
+ return undef unless(defined $oBook->{_CurSheet});
+
+ my $iWk = unpack("v", $sWk);
+ $oBook->{Worksheet}[$oBook->{_CurSheet}]->{PrintGrid} = $iWk;
+
+}
+#------------------------------------------------------------------------------
+# _subPrintHeaders (for Spreadsheet::ParseExcel) DK: P397
+#------------------------------------------------------------------------------
+sub _subPrintHeaders($$$$)
+{
+ my($oBook, $bOp, $bLen, $sWk) = @_;
+ return undef unless(defined $oBook->{_CurSheet});
+
+ my $iWk = unpack("v", $sWk);
+ $oBook->{Worksheet}[$oBook->{_CurSheet}]->{PrintHeaders} = $iWk;
+}
+#------------------------------------------------------------------------------
+# _subSETUP (for Spreadsheet::ParseExcel) DK: P409
+#------------------------------------------------------------------------------
+sub _subSETUP($$$$)
+{
+ my($oBook, $bOp, $bLen, $sWk) = @_;
+ return undef unless(defined $oBook->{_CurSheet});
+
+ my $oWkS = $oBook->{Worksheet}[$oBook->{_CurSheet}];
+ my $iGrBit;
+
+ ($oWkS->{PaperSize},
+ $oWkS->{Scale} ,
+ $oWkS->{PageStart},
+ $oWkS->{FitWidth} ,
+ $oWkS->{FitHeight},
+ $iGrBit,
+ $oWkS->{Res},
+ $oWkS->{VRes},) = unpack('v8', $sWk);
+
+ $oWkS->{HeaderMergin} = _convDval(substr($sWk, 16, 8)) * 127 / 50;
+ $oWkS->{FooterMergin} = _convDval(substr($sWk, 24, 8)) * 127 / 50;
+ $oWkS->{Copis}= unpack('v2', substr($sWk, 32, 2));
+ $oWkS->{LeftToRight}= (($iGrBit & 0x01)? 1: 0);
+ $oWkS->{Landscape} = (($iGrBit & 0x02)? 1: 0);
+ $oWkS->{NoPls} = (($iGrBit & 0x04)? 1: 0);
+ $oWkS->{NoColor} = (($iGrBit & 0x08)? 1: 0);
+ $oWkS->{Draft} = (($iGrBit & 0x10)? 1: 0);
+ $oWkS->{Notes} = (($iGrBit & 0x20)? 1: 0);
+ $oWkS->{NoOrient} = (($iGrBit & 0x40)? 1: 0);
+ $oWkS->{UsePage} = (($iGrBit & 0x80)? 1: 0);
+}
+#------------------------------------------------------------------------------
+# _subName (for Spreadsheet::ParseExcel) DK: P350
+#------------------------------------------------------------------------------
+sub _subName($$$$)
+{
+ my($oBook, $bOp, $bLen, $sWk) = @_;
+ my($iGrBit,
+ $cKey, $cCh,
+ $iCce, $ixAls, $iTab,
+ $cchCust, $cchDsc, $cchHep, $cchStatus) = unpack('vc2v3c4', $sWk);
+#Builtin Name + Length == 1
+ if(($iGrBit & 0x20) && ($cCh == 1)) {
+ #BIFF8
+ if($oBook->{BIFFVersion} >= verBIFF8) {
+ my $iName = unpack('n', substr($sWk, 14 ));
+ my $iSheet = unpack('v', substr($sWk, 8 )) - 1;
+ if($iName == 6) { #PrintArea
+ my($iSheetW, $raArea) = _ParseNameArea(substr($sWk, 16));
+ $oBook->{PrintArea}[$iSheet] = $raArea;
+ }
+ elsif($iName == 7) { #Title
+ my($iSheetW, $raArea) = _ParseNameArea(substr($sWk, 16));
+ my @aTtlR = ();
+ my @aTtlC = ();
+ foreach my $raI (@$raArea) {
+ if($raI->[3] == 0xFF) { #Row Title
+ push @aTtlR, [$raI->[0], $raI->[2] ];
+ }
+ else { #Col Title
+ push @aTtlC, [$raI->[1], $raI->[3] ];
+ }
+ }
+ $oBook->{PrintTitle}[$iSheet] = {Row => \@aTtlR, Column => \@aTtlC};
+ }
+ }
+ else {
+ my $iName = unpack('c', substr($sWk, 14 ));
+ if($iName == 6) { #PrintArea
+ my($iSheet, $raArea) = _ParseNameArea95(substr($sWk, 15));
+ $oBook->{PrintArea}[$iSheet] = $raArea;
+ }
+ elsif($iName == 7) { #Title
+ my($iSheet, $raArea) = _ParseNameArea95(substr($sWk, 15));
+ my @aTtlR = ();
+ my @aTtlC = ();
+ foreach my $raI (@$raArea) {
+ if($raI->[3] == 0xFF) { #Row Title
+ push @aTtlR, [$raI->[0], $raI->[2] ];
+ }
+ else { #Col Title
+ push @aTtlC, [$raI->[1], $raI->[3] ];
+ }
+ }
+ $oBook->{PrintTitle}[$iSheet] = {Row => \@aTtlR, Column => \@aTtlC};
+ }
+ }
+ }
+}
+#------------------------------------------------------------------------------
+# ParseNameArea (for Spreadsheet::ParseExcel) DK: 494 (ptgAread3d)
+#------------------------------------------------------------------------------
+sub _ParseNameArea($) {
+ my ($sObj) =@_;
+ my ($iOp);
+ my @aRes = ();
+ $iOp = unpack('C', $sObj);
+ my $iSheet;
+ if($iOp == 0x3b) {
+ my($iWkS, $iRs, $iRe, $iCs, $iCe) =
+ unpack('v5', substr($sObj, 1));
+ $iSheet = $iWkS;
+ push @aRes, [$iRs, $iCs, $iRe, $iCe];
+ }
+ elsif($iOp == 0x29) {
+ my $iLen = unpack('v', substr($sObj, 1, 2));
+ my $iSt = 0;
+ while($iSt < $iLen) {
+ my($iOpW, $iWkS, $iRs, $iRe, $iCs, $iCe) =
+ unpack('cv5', substr($sObj, $iSt+3, 11));
+
+ if($iOpW == 0x3b) {
+ $iSheet = $iWkS;
+ push @aRes, [$iRs, $iCs, $iRe, $iCe];
+ }
+
+ if($iSt==0) {
+ $iSt += 11;
+ }
+ else {
+ $iSt += 12; #Skip 1 byte;
+ }
+ }
+ }
+ return ($iSheet, \@aRes);
+}
+#------------------------------------------------------------------------------
+# ParseNameArea95 (for Spreadsheet::ParseExcel) DK: 494 (ptgAread3d)
+#------------------------------------------------------------------------------
+sub _ParseNameArea95($) {
+ my ($sObj) =@_;
+ my ($iOp);
+ my @aRes = ();
+ $iOp = unpack('C', $sObj);
+ my $iSheet;
+ if($iOp == 0x3b) {
+ $iSheet = unpack('v', substr($sObj, 11, 2));
+ my($iRs, $iRe, $iCs, $iCe) =
+ unpack('v2C2', substr($sObj, 15, 6));
+ push @aRes, [$iRs, $iCs, $iRe, $iCe];
+ }
+ elsif($iOp == 0x29) {
+ my $iLen = unpack('v', substr($sObj, 1, 2));
+ my $iSt = 0;
+ while($iSt < $iLen) {
+ my $iOpW = unpack('c', substr($sObj, $iSt+3, 6));
+ $iSheet = unpack('v', substr($sObj, $iSt+14, 2));
+ my($iRs, $iRe, $iCs, $iCe) =
+ unpack('v2C2', substr($sObj, $iSt+18, 6));
+ push @aRes, [$iRs, $iCs, $iRe, $iCe] if($iOpW == 0x3b);
+
+ if($iSt==0) {
+ $iSt += 21;
+ }
+ else {
+ $iSt += 22; #Skip 1 byte;
+ }
+ }
+ }
+ return ($iSheet, \@aRes);
+}
+#------------------------------------------------------------------------------
+# _subBOOL (for Spreadsheet::ParseExcel) DK: P452
+#------------------------------------------------------------------------------
+sub _subWSBOOL($$$$)
+{
+ my($oBook, $bOp, $bLen, $sWk) = @_;
+ return undef unless(defined $oBook->{_CurSheet});
+
+ $oBook->{Worksheet}[$oBook->{_CurSheet}]->{PageFit} =
+ ((unpack('v', $sWk) & 0x100)? 1: 0);
+}
+#------------------------------------------------------------------------------
+# _subMergeArea (for Spreadsheet::ParseExcel) DK: (Not)
+#------------------------------------------------------------------------------
+sub _subMergeArea($$$$)
+{
+ my($oBook, $bOp, $bLen, $sWk) = @_;
+ return undef unless(defined $oBook->{_CurSheet});
+
+ my $iCnt = unpack("v", $sWk);
+ my $oWkS = $oBook->{Worksheet}[$oBook->{_CurSheet}];
+ $oWkS->{MergedArea} = [] unless(defined $oWkS->{MergedArea});
+ for(my $i=0; $i < $iCnt; $i++) {
+ my($iRs, $iRe, $iCs, $iCe) = unpack('v4', substr($sWk, $i*8 + 2, 8));
+ for(my $iR=$iRs;$iR<=$iRe;$iR++) {
+ for(my $iC=$iCs;$iC<=$iCe;$iC++) {
+ $oWkS->{Cells}[$iR][$iC] ->{Merged} = 1
+ if(defined $oWkS->{Cells}[$iR][$iC] );
+ }
+ }
+ push @{$oWkS->{MergedArea}}, [$iRs, $iCs, $iRe, $iCe];
+ }
+}
+#------------------------------------------------------------------------------
+# DecodeBoolErr (for Spreadsheet::ParseExcel) DK: P306
+#------------------------------------------------------------------------------
+sub DecodeBoolErr($$)
+{
+ my($iVal, $iFlg) = @_;
+ if($iFlg) { # ERROR
+ if($iVal == 0x00) {
+ return "#NULL!";
+ }
+ elsif($iVal == 0x07) {
+ return "#DIV/0!";
+ }
+ elsif($iVal == 0x0F) {
+ return "#VALUE!";
+ }
+ elsif($iVal == 0x17) {
+ return "#REF!";
+ }
+ elsif($iVal == 0x1D) {
+ return "#NAME?";
+ }
+ elsif($iVal == 0x24) {
+ return "#NUM!";
+ }
+ elsif($iVal == 0x2A) {
+ return "#N/A!";
+ }
+ else {
+ return "#ERR";
+ }
+ }
+ else {
+ return ($iVal)? "TRUE" : "FALSE";
+ }
+}
+#------------------------------------------------------------------------------
+# _UnpackRKRec (for Spreadsheet::ParseExcel) DK:P 401
+#------------------------------------------------------------------------------
+sub _UnpackRKRec($) {
+ my($sArg) = @_;
+
+ my $iF = unpack('v', substr($sArg, 0, 2));
+
+ my $lWk = substr($sArg, 2, 4);
+ my $sWk = pack("c4", reverse(unpack("c4", $lWk)));
+ my $iPtn = unpack("c",substr($sWk, 3, 1)) & 0x03;
+ if($iPtn == 0) {
+ return ($iF, unpack("d", ($BIGENDIAN)? $sWk . "\0\0\0\0": "\0\0\0\0". $lWk));
+ }
+ elsif($iPtn == 1) {
+ substr($sWk, 3, 1) &= pack('c', unpack("c",substr($sWk, 3, 1)) & 0xFC);
+ substr($lWk, 0, 1) &= pack('c', unpack("c",substr($lWk, 0, 1)) & 0xFC);
+ return ($iF, unpack("d", ($BIGENDIAN)? $sWk . "\0\0\0\0": "\0\0\0\0". $lWk)/ 100);
+ }
+ elsif($iPtn == 2) {
+ my $sUB = unpack("B32", $sWk);
+ my $sWkLB = pack("B32", (substr($sUB, 0, 1) x 2) .
+ substr($sUB, 0, 30));
+ my $sWkL = ($BIGENDIAN)? $sWkLB: pack("c4", reverse(unpack("c4", $sWkLB)));
+ return ($iF, unpack("i", $sWkL));
+ }
+ else {
+ my $sUB = unpack("B32", $sWk);
+ my $sWkLB = pack("B32", (substr($sUB, 0, 1) x 2) .
+ substr($sUB, 0, 30));
+ my $sWkL = ($BIGENDIAN)? $sWkLB: pack("c4", reverse(unpack("c4", $sWkLB)));
+ return ($iF, unpack("i", $sWkL) / 100);
+ }
+}
+#------------------------------------------------------------------------------
+# _subStrWk (for Spreadsheet::ParseExcel) DK:P280 ..
+#------------------------------------------------------------------------------
+sub _subStrWk($$;$)
+{
+ my($oBook, $sWk, $fCnt) = @_;
+
+ #1. Continue
+ if(defined($fCnt)) {
+ #1.1 Before No Data No
+ if($oBook->{StrBuff} eq '') { #
+#print "CONT NO DATA\n";
+#print "DATA:", unpack('H30', $oBook->{StrBuff}), " PRE:$oBook->{_PrevCond}\n";
+ $oBook->{StrBuff} .= $sWk;
+ }
+ #1.1 No PrevCond
+ elsif(!(defined($oBook->{_PrevCond}))) {
+#print "NO PREVCOND\n";
+ $oBook->{StrBuff} .= substr($sWk, 1);
+ }
+ else {
+#print "CONT\n";
+ my $iCnt1st = ord($sWk); # 1st byte of Continue may be a GR byte
+ my($iStP, $iLenS) = @{$oBook->{_PrevInfo}};
+ my $iLenB = length($oBook->{StrBuff});
+
+ #1.1 Not in String
+ if($iLenB >= ($iStP + $iLenS)) {
+#print "NOT STR\n";
+ $oBook->{StrBuff} .= $sWk;
+# $oBook->{StrBuff} .= substr($sWk, 1);
+ }
+ #1.2 Same code (Unicode or ASCII)
+ elsif(($oBook->{_PrevCond} & 0x01) == ($iCnt1st & 0x01)) {
+#print "SAME\n";
+ $oBook->{StrBuff} .= substr($sWk, 1);
+ }
+ else {
+ #1.3 Diff code (Unicode or ASCII)
+ my $iDiff = ($iStP + $iLenS) - $iLenB;
+ if($iCnt1st & 0x01) {
+#print "DIFF ASC $iStP $iLenS $iLenB DIFF:$iDiff\n";
+#print "BEF:", unpack("H6", $oBook->{StrBuff}), "\n";
+ my ($iDum, $iGr) =unpack('vc', $oBook->{StrBuff});
+ substr($oBook->{StrBuff}, 2, 1) = pack('c', $iGr | 0x01);
+#print "AFT:", unpack("H6", $oBook->{StrBuff}), "\n";
+ for(my $i = ($iLenB-$iStP); $i >=1; $i--) {
+ substr($oBook->{StrBuff}, $iStP+$i, 0) = "\x00";
+ }
+ }
+ else {
+#print "DIFF UNI:", $oBook->{_PrevCond}, ":", $iCnt1st, " DIFF:$iDiff\n";
+ for(my $i = ($iDiff/2); $i>=1;$i--) {
+ substr($sWk, $i+1, 0) = "\x00";
+ }
+ }
+ $oBook->{StrBuff} .= substr($sWk, 1);
+ }
+ }
+ }
+ else {
+ #2. Saisho
+ $oBook->{StrBuff} .= $sWk;
+ }
+#print " AFT2:", unpack("H60", $oBook->{StrBuff}), "\n";
+
+ $oBook->{_PrevCond} = undef;
+ $oBook->{_PrevInfo} = undef;
+
+ while(length($oBook->{StrBuff}) >= 4) {
+ my ( $raBuff, $iLen, $iStPos, $iLenS) = _convBIFF8String($oBook, $oBook->{StrBuff}, 1);
+ #No Code Convert
+ if(defined($raBuff->[0])) {
+ push @{$oBook->{PkgStr}},
+ {
+ Text => $raBuff->[0],
+ Unicode => $raBuff->[1],
+ Rich => $raBuff->[2],
+ Ext => $raBuff->[3],
+ };
+ $oBook->{StrBuff} = substr($oBook->{StrBuff}, $iLen);
+ }
+ else {
+ $oBook->{_PrevCond} = $raBuff->[1];
+ $oBook->{_PrevInfo} = [$iStPos, $iLenS];
+ last;
+ }
+ }
+}
+#------------------------------------------------------------------------------
+# _SwapForUnicode (for Spreadsheet::ParseExcel)
+#------------------------------------------------------------------------------
+sub _SwapForUnicode(\$)
+{
+ my($sObj) = @_;
+# for(my $i = 0; $i<length($$sObj); $i+=2){
+ for(my $i = 0; $i<(int (length($$sObj) / 2) * 2); $i+=2) {
+ my $sIt = substr($$sObj, $i, 1);
+ substr($$sObj, $i, 1) = substr($$sObj, $i+1, 1);
+ substr($$sObj, $i+1, 1) = $sIt;
+ }
+}
+#------------------------------------------------------------------------------
+# _NewCell (for Spreadsheet::ParseExcel)
+#------------------------------------------------------------------------------
+sub _NewCell($$$%)
+{
+ my($oBook, $iR, $iC, %rhKey)=@_;
+ my($sWk, $iLen);
+ return undef unless(defined $oBook->{_CurSheet});
+
+ my $oCell =
+ Spreadsheet::ParseExcel::Cell->new(
+ Val => $rhKey{Val},
+ FormatNo=> $rhKey{FormatNo},
+ Format => $rhKey{Format},
+ Code => $rhKey{Code},
+ Type => $oBook->{FmtClass}->ChkType(
+ $rhKey{Numeric},
+ $rhKey{Format}->{FmtIdx}),
+ );
+ $oCell->{_Kind} = $rhKey{Kind};
+ $oCell->{_Value} = $oBook->{FmtClass}->ValFmt($oCell, $oBook);
+ if($rhKey{Rich}) {
+ my @aRich = ();
+ my $sRich = $rhKey{Rich};
+ for(my $iWk=0;$iWk<length($sRich); $iWk+=4) {
+ my($iPos, $iFnt) = unpack('v2', substr($sRich, $iWk));
+ push @aRich, [$iPos, $oBook->{Font}[$iFnt]];
+ }
+ $oCell->{Rich} = \@aRich;
+ }
+
+ if(defined $_CellHandler) {
+ if(defined $_Object){
+ no strict;
+ ref($_CellHandler) eq "CODE" ?
+ $_CellHandler->($_Object, $oBook, $oBook->{_CurSheet}, $iR, $iC, $oCell) :
+ $_CellHandler->callback($_Object, $oBook, $oBook->{_CurSheet}, $iR, $iC, $oCell);
+ }
+ else{
+ $_CellHandler->($oBook, $oBook->{_CurSheet}, $iR, $iC, $oCell);
+ }
+ }
+ unless($_NotSetCell) {
+ $oBook->{Worksheet}[$oBook->{_CurSheet}]->{Cells}[$iR][$iC]
+ = $oCell;
+ }
+ return $oCell;
+}
+#------------------------------------------------------------------------------
+# ColorIdxToRGB (for Spreadsheet::ParseExcel)
+#------------------------------------------------------------------------------
+sub ColorIdxToRGB($$){
+ my($sPkg, $iIdx) = @_;
+ return ((defined $aColor[$iIdx])? $aColor[$iIdx] : $aColor[0]);
+}
+1;
+__END__
+
+=head1 NAME
+
+Spreadsheet::ParseExcel - Get information from Excel file
+
+=head1 SYNOPSIS
+
+ use strict;
+ use Spreadsheet::ParseExcel;
+ my $oExcel = new Spreadsheet::ParseExcel;
+
+ #1.1 Normal Excel97
+ my $oBook = $oExcel->Parse('Excel/Test97.xls');
+ my($iR, $iC, $oWkS, $oWkC);
+ print "FILE :", $oBook->{File} , "\n";
+ print "COUNT :", $oBook->{SheetCount} , "\n";
+ print "AUTHOR:", $oBook->{Author} , "\n";
+ for(my $iSheet=0; $iSheet < $oBook->{SheetCount} ; $iSheet++) {
+ $oWkS = $oBook->{Worksheet}[$iSheet];
+ print "--------- SHEET:", $oWkS->{Name}, "\n";
+ for(my $iR = $oWkS->{MinRow} ;
+ defined $oWkS->{MaxRow} && $iR <= $oWkS->{MaxRow} ; $iR++) {
+ for(my $iC = $oWkS->{MinCol} ;
+ defined $oWkS->{MaxCol} && $iC <= $oWkS->{MaxCol} ; $iC++) {
+ $oWkC = $oWkS->{Cells}[$iR][$iC];
+ print "( $iR , $iC ) =>", $oWkC->Value, "\n" if($oWkC); # Formatted Value
+ print "( $iR , $iC ) =>", $oWkC->{Val}, "\n" if($oWkC); # Original Value
+ }
+ }
+ }
+
+I<new interface>
+
+ use strict;
+ use Spreadsheet::ParseExcel;
+ my $oBook =
+ Spreadsheet::ParseExcel::Workbook->Parse('Excel/Test97.xls');
+ my($iR, $iC, $oWkS, $oWkC);
+ foreach my $oWkS (@{$oBook->{Worksheet}}) {
+ print "--------- SHEET:", $oWkS->{Name}, "\n";
+ for(my $iR = $oWkS->{MinRow} ;
+ defined $oWkS->{MaxRow} && $iR <= $oWkS->{MaxRow} ; $iR++) {
+ for(my $iC = $oWkS->{MinCol} ;
+ defined $oWkS->{MaxCol} && $iC <= $oWkS->{MaxCol} ; $iC++) {
+ $oWkC = $oWkS->{Cells}[$iR][$iC];
+ print "( $iR , $iC ) =>", $oWkC->Value, "\n" if($oWkC);
+ }
+ }
+ }
+
+=head1 DESCRIPTION
+
+Spreadsheet::ParseExcel makes you to get information from Excel95, Excel97, Excel2000 file.
+
+=head2 Functions
+
+=over 4
+
+=item new
+
+I<$oExcel> = new Spreadsheet::ParseExcel(
+ [ I<CellHandler> => \&subCellHandler,
+ I<NotSetCell> => undef | 1,
+ ]);
+
+Constructor.
+
+
+=over 4
+
+=item CellHandler I<(experimental)>
+
+specify callback function when a cell is detected.
+
+I<subCellHandler> gets arguments like below:
+
+sub subCellHandler (I<$oBook>, I<$iSheet>, I<$iRow>, I<$iCol>, I<$oCell>);
+
+B<CAUTION> : The atributes of Workbook may not be complete.
+This function will be called almost order by rows and columns.
+Take care B<almost>, I<not perfectly>.
+
+=item NotSetCell I<(experimental)>
+
+specify set or not cell values to Workbook object.
+
+=back
+
+=item Parse
+
+I<$oWorkbook> = $oParse->Parse(I<$sFileName> [, I<$oFmt>]);
+
+return L<"Workbook"> object.
+if error occurs, returns undef.
+
+=over 4
+
+=item I<$sFileName>
+
+name of the file to parse
+
+From 0.12 (with OLE::Storage_Lite v.0.06),
+scalar reference of file contents (ex. \$sBuff) or
+IO::Handle object (inclucdng IO::File etc.) are also available.
+
+=item I<$oFmt>
+
+L<"Formatter Class"> to format the value of cells.
+
+=back
+
+=item ColorIdxToRGB
+
+I<$sRGB> = $oParse->ColorIdxToRGB(I<$iColorIdx>);
+
+I<ColorIdxToRGB> returns RGB string corresponding to specified color index.
+RGB string has 6 charcters, representing RGB hex value. (ex. red = 'FF0000')
+
+=back
+
+=head2 Workbook
+
+I<Spreadsheet::ParseExcel::Workbook>
+
+Workbook class has these methods :
+
+=over 4
+
+=item Parse
+
+(class method) : same as Spreadsheet::ParseExcel
+
+=back
+
+=over 4
+
+=item Worksheet
+
+I<$oWorksheet> = $oBook->Worksheet(I<$sName>);
+
+I<Worksheet> returns a Worksheet object with I<$sName> or undef.
+If there is no worksheet with I<$sName> and I<$sName> contains only digits,
+it returns a Worksheet object at that position.
+
+=back
+
+Workbook class has these properties :
+
+=over 4
+
+=item File
+
+Name of the file
+
+=item Author
+
+Author of the file
+
+=item Flag1904
+
+If this flag is on, date of the file count from 1904.
+
+=item Version
+
+Version of the file
+
+=item SheetCount
+
+Numbers of L<"Worksheet"> s in that Workbook
+
+=item Worksheet[SheetNo]
+
+Array of L<"Worksheet">s class
+
+=item PrintArea[SheetNo]
+
+Array of PrintArea array refs.
+
+Each PrintArea is : [ I<StartRow>, I<StartColumn>, I<EndRow>, I<EndColumn>]
+
+=item PrintTitle[SheetNo]
+
+Array of PrintTitle hash refs.
+
+Each PrintTitle is :
+ { Row => [I<StartRow>, I<EndRow>],
+ Column => [I<StartColumn>, I<EndColumn>]}
+
+=back
+
+=head2 Worksheet
+
+I<Spreadsheet::ParseExcel::Worksheet>
+
+Worksheet class has these methods:
+
+=over 4
+
+=item Cell ( ROW, COL )
+
+Return the Cell iobject at row ROW and column COL if
+it is defined. Otherwise return undef.
+
+=item RowRange ()
+
+Return a two-element list (MIN, MAX) containing the
+minimum and maximum of defined rows in the worksheet
+If there is no row defined MAX is smaller than MIN.
+
+=item ColRange ()
+
+Return a two-element list (MIN, MAX) containing the
+minimum and maximum of defined columns in the worksheet
+If there is no row defined MAX is smaller than MIN.
+
+=back
+
+Worksheet class has these properties:
+
+=over 4
+
+=item Name
+
+Name of that Worksheet
+
+=item DefRowHeight
+
+Default height of rows
+
+=item DefColWidth
+
+Default width of columns
+
+=item RowHeight[Row]
+
+Array of row height
+
+=item ColWidth[Col]
+
+Array of column width (undef means DefColWidth)
+
+=item Cells[Row][Col]
+
+Array of L<"Cell">s infomation in the worksheet
+
+=item Landscape
+
+Print in horizontal(0) or vertical (1).
+
+=item Scale
+
+Print scale.
+
+=item FitWidth
+
+Number of pages with fit in width.
+
+=item FitHeight
+
+Number of pages with fit in height.
+
+=item PageFit
+
+Print with fit (or not).
+
+=item PaperSize
+
+Papar size. The value is like below:
+
+ Letter 1, LetterSmall 2, Tabloid 3 ,
+ Ledger 4, Legal 5, Statement 6 ,
+ Executive 7, A3 8, A4 9 ,
+ A4Small 10, A5 11, B4 12 ,
+ B5 13, Folio 14, Quarto 15 ,
+ 10x14 16, 11x17 17, Note 18 ,
+ Envelope9 19, Envelope10 20, Envelope11 21 ,
+ Envelope12 22, Envelope14 23, Csheet 24 ,
+ Dsheet 25, Esheet 26, EnvelopeDL 27 ,
+ EnvelopeC5 28, EnvelopeC3 29, EnvelopeC4 30 ,
+ EnvelopeC6 31, EnvelopeC65 32, EnvelopeB4 33 ,
+ EnvelopeB5 34, EnvelopeB6 35, EnvelopeItaly 36 ,
+ EnvelopeMonarch 37, EnvelopePersonal 38, FanfoldUS 39 ,
+ FanfoldStdGerman 40, FanfoldLegalGerman 41, User 256
+
+=item PageStart
+
+Start page number.
+
+=item UsePage
+
+Use own start page number (or not).
+
+=item LeftMergin, RightMergin, TopMergin, BottomMergin, HeaderMergin, FooterMergin
+
+Mergins for left, right, top, bottom, header and footer.
+
+=item HCenter
+
+Print in horizontal center (or not)
+
+=item VCenter
+
+Print in vertical center (or not)
+
+=item Header
+
+Content of print header.
+Please refer Excel Help.
+
+=item Footer
+
+Content of print footer.
+Please refer Excel Help.
+
+=item PrintGrid
+
+Print with Gridlines (or not)
+
+=item PrintHeaders
+
+Print with headings (or not)
+
+=item NoColor
+
+Print in black-white (or not).
+
+=item Draft
+
+Print in draft mode (or not).
+
+=item Notes
+
+Print with notes (or not).
+
+=item LeftToRight
+
+Print left to right(0) or top to down(1).
+
+=item HPageBreak
+
+Array ref of horizontal page breaks.
+
+=item VPageBreak
+
+Array ref of vertical page breaks.
+
+=item MergedArea
+
+Array ref of merged areas.
+Each merged area is : [ I<StartRow>, I<StartColumn>, I<EndRow>, I<EndColumn>]
+
+=back
+
+=head2 Cell
+
+I<Spreadsheet::ParseExcel::Cell>
+
+Cell class has these properties:
+
+=over 4
+
+=item Value
+
+I<Method>
+Formatted value of that cell
+
+=item Val
+
+Original Value of that cell
+
+=item Type
+
+Kind of that cell ('Text', 'Numeric', 'Date')
+
+=item Code
+
+Character code of that cell (undef, 'ucs2', '_native_')
+undef tells that cell seems to be ascii.
+'_native_' tells that cell seems to be 'sjis' or something like that.
+
+=item Format
+
+L<"Format"> for that cell.
+
+=item Merged
+
+That cells is merged (or not).
+
+=item Rich
+
+Array ref of font informations about each characters.
+
+Each entry has : [ I<Start Position>, I<Font Object>]
+
+For more information please refer sample/dmpExR.pl
+
+=back
+
+=head2 Format
+
+I<Spreadsheet::ParseExcel::Format>
+
+Format class has these properties:
+
+=over 4
+
+=item Font
+
+L<"Font"> object for that Format.
+
+=item AlignH
+
+Horizontal Alignment.
+
+ 0: (standard), 1: left, 2: center, 3: right,
+ 4: fill , 5: justify, 7:equal_space
+
+B<Notice:> 6 may be I<merge> but it seems not to work.
+
+=item AlignV
+
+Vertical Alignment.
+
+ 0: top, 1: vcenter, 2: bottom, 3: vjustify, 4: vequal_space
+
+=item Indent
+
+Number of indent
+
+=item Wrap
+
+Wrap (or not).
+
+=item Shrink
+
+Display in shrinking (or not)
+
+=item Rotate
+
+In Excel97, 2000 : degrees of string rotation.
+In Excel95 or earlier : 0: No rotation, 1: Top down, 2: 90 degrees anti-clockwise,
+ 3: 90 clockwise
+
+=item JustLast
+
+JustLast (or not).
+I<I have never seen this attribute.>
+
+=item ReadDir
+
+Direction for read.
+
+=item BdrStyle
+
+Array ref of boder styles : [I<Left>, I<Right>, I<Top>, I<Bottom>]
+
+=item BdrColor
+
+Array ref of boder color indexes : [I<Left>, I<Right>, I<Top>, I<Bottom>]
+
+=item BdrDiag
+
+Array ref of diag boder kind, style and color index : [I<Kind>, I<Style>, I<Color>]
+ Kind : 0: None, 1: Right-Down, 2:Right-Up, 3:Both
+
+=item Fill
+
+Array ref of fill pattern and color indexes : [I<Pattern>, I<Front Color>, I<Back Color>]
+
+=item Lock
+
+Locked (or not).
+
+=item Hidden
+
+Hiddedn (or not).
+
+=item Style
+
+Style format (or Cell format)
+
+=back
+
+=head2 Font
+
+I<Spreadsheet::ParseExcel::Font>
+
+Format class has these properties:
+
+=over 4
+
+=item Name
+
+Name of that font.
+
+=item Bold
+
+Bold (or not).
+
+=item Italic
+
+Italic (or not).
+
+=item Height
+
+Size (height) of that font.
+
+=item Underline
+
+Underline (or not).
+
+=item UnderlineStyle
+
+0: None, 1: Single, 2: Double, 0x21: Single(Account), 0x22: Double(Account)
+
+=item Color
+
+Color index for that font.
+
+=item Strikeout
+
+Strikeout (or not).
+
+=item Super
+
+0: None, 1: Upper, 2: Lower
+
+=back
+
+=head1 Formatter class
+
+I<Spreadsheet::ParseExcel::Fmt*>
+
+Formatter class will convert cell data.
+
+Spreadsheet::ParseExcel includes 2 formatter classes: FmtDefault and FmtJapanese.
+You can create your own FmtClass as you like.
+
+Formatter class(Spreadsheet::ParseExcel::Fmt*) should provide these functions:
+
+=over 4
+
+=item ChkType($oSelf, $iNumeric, $iFmtIdx)
+
+tells type of the cell that has specified value.
+
+=over 8
+
+=item $oSelf
+
+Formatter itself
+
+=item $iNumeric
+
+If on, the value seems to be number
+
+=item $iFmtIdx
+
+Format index number of that cell
+
+=back
+
+=item TextFmt($oSelf, $sText, $sCode)
+
+converts original text into applicatable for Value.
+
+=over 8
+
+=item $oSelf
+
+Formatter itself
+
+=item $sText
+
+Original text
+
+=item $sCode
+
+Character code of Original text
+
+=back
+
+=item ValFmt($oSelf, $oCell, $oBook)
+
+converts original value into applicatable for Value.
+
+=over 8
+
+=item $oSelf
+
+Formatter itself
+
+=item $oCell
+
+Cell object
+
+=item $oBook
+
+Workbook object
+
+=back
+
+=item FmtString($oSelf, $oCell, $oBook)
+
+get format string for the I<$oCell>.
+
+=over 8
+
+=item $oSelf
+
+Formatter itself
+
+=item $oCell
+
+Cell object
+
+=item $oBook
+
+WorkBook object contains that cell
+
+=back
+
+=back
+
+=head1 KNOWN PROBLEM
+
+This module can not get the values of fomulas in
+Excel files made with Spreadsheet::WriteExcel.
+Normaly (ie. By Excel application), formula has the result with it.
+But Spreadsheet::WriteExcel writes formula with no result.
+If you set your Excel application "Auto Calculation" off.
+(maybe [Tool]-[Option]-[Calculation] or something)
+You will see the same result.
+
+=head1 AUTHOR
+
+Kawai Takanori (Hippo2000) kwitknr at cpan.org
+
+ http://member.nifty.ne.jp/hippo2000/ (Japanese)
+ http://member.nifty.ne.jp/hippo2000/index_e.htm (English)
+
+=head1 SEE ALSO
+
+XLHTML, OLE::Storage, Spreadsheet::WriteExcel, OLE::Storage_Lite
+
+This module is based on herbert within OLE::Storage and XLHTML.
+
+=head1 TODO
+
+- Spreadsheet::ParseExcel :
+ Password protected data, Formulas support, HyperLink support,
+ Named Range support
+
+- Spreadsheet::ParseExcel::SaveParser :
+ Catch up Spreadsheet::WriteExce feature, Create new Excel fle
+
+=head1 COPYRIGHT
+
+Copyright (c) 2000-2004 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.
+
+=head1 ACKNOWLEDGEMENTS
+
+First of all, I would like to acknowledge valuable program and modules :
+XHTML, OLE::Storage and Spreadsheet::WriteExcel.
+
+In no particular order: Yamaji Haruna, Simamoto Takesi, Noguchi Harumi,
+Ikezawa Kazuhiro, Suwazono Shugo, Hirofumi Morisada, Michael Edwards, Kim Namusk
+and many many people + Kawai Mikako.
+
+=cut
Added: packages/libspreadsheet-parseexcel-perl/branches/upstream/current/README
===================================================================
--- packages/libspreadsheet-parseexcel-perl/branches/upstream/current/README 2005-01-25 02:10:47 UTC (rev 660)
+++ packages/libspreadsheet-parseexcel-perl/branches/upstream/current/README 2005-01-25 15:06:55 UTC (rev 661)
@@ -0,0 +1,63 @@
+
+NAME
+ Spreadsheet::ParseExcel - Get information from Excel file
+
+DESCRIPTION
+ This module allows you to get information from Excel file.
+
+ This module can handle files of Excel95, 97 and 2000.
+ (and now supports Excel4)
+
+ The module will work on the majority of Windows, UNIX and
+ Macintosh platforms.
+
+REQUIREMENT
+ This module requires these modules:
+ OLE::Storage_Lite
+ Jcode.pm (if you are using FmtJapan, or FmtJapan2)
+ Unicode::Map (if you are using FmtJapan2 or FmtUnicode)
+
+INSTALLATION
+ The module can be installed using the standard Perl procedure:
+
+ perl Makefile.PL
+ make
+ make test
+ make install # You may need to be root
+ make clean # or make realclean
+
+ Windows users without a working "make" can get nmake from:
+ ftp://ftp.microsoft.com/Softlib/MSLFILES/nmake15.exe
+
+For FmtJapan2
+ If you use FmtJapan2, you must do following actions:
+
+ (1) Copy "CP932Excel.map" included with this distribution to an
+ applicatable directry.
+
+ (2) To add "CP932Excel" as map name, append following lines to
+ REGISTRY in the Unicode::Map hierarchy
+ (changing map directy to applicatable directry):
+
+name: CP932Excel
+srcURL: $SrcUnicode/VENDORS/MICSFT/WINDOWS/CP932.TXT
+src: $DestUnicode/VENDORS/MICSFT/WINDOWS/CP932.TXT
+map: (which you copied directry)/CP932Excel.map
+# Don't remove this line
+
+
+VERSION
+ This document refers to version 0.2602 of Spreadsheet::ParseExcel,
+ released Jul 15, 2002.
+
+AUTHOR
+ Kawai Takanori (kwitknr at cpan.org)
+
+SUPPORT
+ Of course, I'll welcome e-mails.
+ And now, I have a Wiki-clone. If you have a question or suggestion,
+ please let me know with Wiki.
+
+ KbWiki
+ http://www.hippo2000.info/cgi-bin/KbWikiE/KbWiki.pl (English)
+ http://www.hippo2000.info/cgi-bin/KbWiki/KbWiki.pl (Japanese)
Added: packages/libspreadsheet-parseexcel-perl/branches/upstream/current/README_Japan.htm
===================================================================
--- packages/libspreadsheet-parseexcel-perl/branches/upstream/current/README_Japan.htm 2005-01-25 02:10:47 UTC (rev 660)
+++ packages/libspreadsheet-parseexcel-perl/branches/upstream/current/README_Japan.htm 2005-01-25 15:06:55 UTC (rev 661)
@@ -0,0 +1,156 @@
+<html>
+
+<head>
+<meta http-equiv="Content-Type"
+content="text/html; charset=x-euc-jp">
+<title></title>
+</head>
+
+<body bgcolor="#00FFFF">
+
+<pre>Speadsheet::ParseExcel.pm - 0.2405
+
+ by Àî¹ç¹§Åµ (Hippo2000)
+
+¹¹¿·ÍúÎò¤ÏChanges¤ò¤´Í÷¤¯¤À¤µ¤¤
+
+³µÍ×
+ ¤³¤Î¥â¥¸¥å¡¼¥ë¤Ï¡¢¤Þ¤À¦Á¥Ð¡¼¥¸¥ç¥ó¤Ç¤¹¡£
+
+ Microsoft¼Ò¤ÎExcel¥Õ¥¡¥¤¥ë¤òWindows°Ê³°¤Î¥×¥é¥Ã¥È¥Õ¥©¡¼¥à¤Ç¤â¾ðÊó¤ò¼è¤ê
+ ½Ð¤¹¤è¤¦¤Ë¤¹¤ë¥â¥¸¥å¡¼¥ë¤Ç¤¹¡£
+
+Æ°ºî³Îǧ
+ DOS/V WindowsNT ver.4.0 Perl5.005
+ DOS/V TurboLinux ver.6.0 Perl5.005
+ Sun Sparc Solaris 2.6 Perl5.005
+ DOS/V Vine Linux 2.0 Perl5.005
+ Macintosh JPerl¡¢FreeBSD¤Ç¤âÆ°¤¤¤Æ¤¤¤ë¤È¤¤¤¦¥ì¥Ý¡¼¥È¤ò¤¤¤¿¤À¤¤¤Æ¤¤¤Þ¤¹
+
+ ¤½¤Î¾¤Î´Ä¶¤Ç¼Â¹Ô¤µ¤ì¤¿Êý¤Ï¡¢¶µ¤¨¤Æ¤¯¤À¤µ¤¤¡£
+ Æ°¤¤¤Æ¤âÆ°¤«¤Ê¤¯¤Æ¤â¡¢¤´¶¨ÎϤè¤í¤·¤¯¤ª´ê¤¤¤·¤Þ¤¹¡£ <(__)>
+
+´Êñ¤Ê³Îǧ(test¥Ç¥£¥ì¥¯¥È¥ê¡Ë
+ sample¥Ç¥£¥ì¥¯¥È¥ê¤Ë°Ê²¼¤Î¥Õ¥¡¥¤¥ë¤¬Æþ¤Ã¤Æ¤¤¤Þ¤¹¡§
+
+ sample.pl ¡§´Êñ¤Ê¥Æ¥¹¥È¥¹¥¯¥ê¥×¥È¡ÊSpreadsheet::ParseExcel::FmtDefault¤ò»ÈÍÑ¡Ë
+ sample_j.pl ¡§´Êñ¤Ê¥Æ¥¹¥È¥¹¥¯¥ê¥×¥È¡ÊSpreadsheet::ParseExcel::FmtJapan¤ò»ÈÍÑ¡¢¥³¡¼¥É¤ò»ØÄꤷ¤Æ½ÐÎÏ¡Ë
+ res_sample ¡§sample.pl¤Î¼Â¹Ô·ë²Ì
+ res_sample_j¡§sample_j.pl¤Î¼Â¹Ô·ë²Ì(euc)
+
+ dmpEx.pl : Excel¥Õ¥¡¥¤¥ë¤ÎÆâÍƤòɽ¼¨¤¹¤ë¡ÊSpreadsheet::ParseExcel::FmtDefault¤ò»ÈÍÑ¡Ë
+ dmpExj.pl : Excel¥Õ¥¡¥¤¥ë¤ÎÆâÍƤòɽ¼¨¤¹¤ë¡ÊSpreadsheet::ParseExcel::FmtJapan¤ò»ÈÍÑ¡Ë
+
+ ´Êñ¤Ë¤³¤Î¥â¥¸¥å¡¼¥ë¤ÎÆ°¤¤ò³Îǧ¤·¤¿¤¤¤À¤±¤Ç¤¢¤ì¤Ð¡¢dmpExj.pl¤Ë¤è¤Ã¤Æ
+ »ØÄꤷ¤¿Excel¥Õ¥¡¥¤¥ë¤ÎÆâÍƤòɽ¼¨¤µ¤»¤ë¤³¤È¤¬¤Ç¤¤Þ¤¹¡£
+
+ ex.
+ # perl -I.. dmpExj.pl Excel/Test97.xls euc
+
+ ¡Ö-I..¡×¤Ï¡¢¿Æ¥Ç¥£¥ì¥¯¥È¥ê¤Ë¤¢¤ëSpreadsheet::ParseExcel.pm¤òÍøÍѤ¹¤ë¤¿¤á¤Ë»ØÄꤷ¤Þ¤¹¡£
+ ¡ÖExcel/Test97.xls¡×¤ÏÂоݤȤʤë¥Õ¥¡¥¤¥ë̾¡£
+ ¡Öeuc¡×¤Ï´Á»ú¤ò½ÐÎϤ¹¤ë¤È¤¤Îʸ»ú¥³¡¼¥É¤Ç¤¹¡£euc¡¢sjis¡¢jis¤Ê¤É
+ Jcode.pm¤ÈƱ¤¸¤Ç¤¹¡£
+
+¥¤¥ó¥¹¥È¡¼¥ë
+ OLE::Storage_Lite¤¬¥¤¥ó¥¹¥È¡¼¥ë¤µ¤ì¤Æ¤¤¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£
+¡¡Spreadsheet::ParseExcel::FmtJapan¤ò»ÈÍѤ¹¤ë¾ì¹ç¡¢Jcode.pm¤òɬÍפȤ·¤Þ¤¹¡£¡Ê¾¤Î¥â¥¸¥å¡¼¥ë¤òɬÍפȤ·¤Þ¤»¤ó¡£¡Ë
+¡¡Spreadsheet::ParseExcel::FmtJapan2¤ò»ÈÍѤ¹¤ë¾ì¹ç¡¢Jcode.pm¡¢Unicode::Map¤òɬÍפȤ·¤Þ¤¹¡£
+¡¡Perl¤Îɸ½àŪ¤Ê¥¤¥ó¥¹¥È¡¼¥ë¤Ë¤Ê¤ê¤Þ¤·¤¿¡£¤³¤Î¥â¥¸¥å¡¼¥ë¼«ÂΤÏPerl¤Î¤ß¤ÇºîÀ®¤µ¤ì¤Æ¤¤¤ë¤Î¤Ç¡¢¥³¥Ô¡¼¤¹¤ë¤À¤±¤Ç¤âÆ°¤¤Þ¤¹¡£</pre>
+
+<pre> perl Makefile.PL
+ make
+ make test
+ make install (root¤Ë¤Ê¤Ã¤Æ¡Ë
+</pre>
+
+<pre>FmtJapan2¤Î¤¿¤á¤Ë</pre>
+
+<pre> µ¡¼ï°Í¸ʸ»ú¤ËÂбþ¤¹¤ë¤¿¤á¤ÎFmtJapan2¤ò0.09¤«¤éƱº¤·¤Þ¤¹¡£
+ ÍøÍѤ¹¤ë¤¿¤á¤Ë¤ÏUnicode::Map¤ò¥¤¥ó¥¹¥È¡¼¥ë¤¹¤ë¤Û¤«¡¢°Ê²¼¤Î¼ê½ç¤¬É¬Íפˤʤê¤Þ¤¹¡§</pre>
+
+<pre> (1) Ʊº¤µ¤ì¤ë"CP932Excel.map"¤òŬÀڤʥǥ£¥ì¥¯¥È¥ê¤Ë¥³¥Ô¡¼¤·¤Þ¤¹¡£</pre>
+
+<pre> (2) "CP932Excel"¤ò¥Þ¥Ã¥×̾¤È¤·¤ÆÄɲ乤뤿¤á¤Ë¡¢Unicode::Map³¬Áؤˤ¢¤ëREGISTRY¤Ë°Ê²¼¤Î¹Ô¤òÄɲä·¤Þ¤¹¡£
+ ¡Êmap¤Î¥Ç¥£¥ì¥¯¥È¥ê̾¤ÏŬÀڤʥǥ£¥ì¥¯¥È¥ê̾¤Ë¤·¤Æ¤¯¤À¤µ¤¤¡Ë</pre>
+
+<pre>name: CP932Excel
+srcURL: $SrcUnicode/VENDORS/MICSFT/WINDOWS/CP932.TXT
+src: $DestUnicode/VENDORS/MICSFT/WINDOWS/CP932.TXT
+map: (¥³¥Ô¡¼Àè¤Î¥Ç¥£¥ì¥¯¥È¥ê)/CP932Excel.map
+# Don't remove this line</pre>
+
+<pre>»È¤¤Êý
+ use strict;
+ use Spreadsheet::ParseExcel;
+ my $oExcel = new Spreadsheet::ParseExcel;
+ my $oBook = $oExcel->Parse('Excel/Test97.xls');
+
+ #¤Þ¤¿¤ÏÆüËܸìÂбþ¤Ç¤Ï
+ use strict;
+ use Spreadsheet::ParseExcel;
+ use Spreadsheet::ParseExcel::FmtJapan;
+ my $oExcel = new Spreadsheet::ParseExcel;
+ my $oFmtJ = Spreadsheet::ParseExcel::FmtJapan->new(Code => 'euc'); #sjis¡¢jis¤Ê¤É¤Î¥³¡¼¥É
+ my $oBook = $oExcel->Parse('Excel/Test97.xls', $oFmtJ);
+</pre>
+
+<pre> #¾ðÊó¤Î¼è¤ê½Ð¤·Îã
+ my($iR, $iC, $oWkS, $oWkC);
+
+ print "FILE :", $oBook->{File} , "\n";
+ print "COUNT :", $oBook->{SheetCount} , "\n";
+ print "AUTHOR:", $oBook->{Author} , "\n";
+ for(my $iSheet=0; $iSheet < $oBook->{SheetCount} ; $iSheet++) {
+ $oWkS = $oBook->{Worksheet}[$iSheet];
+ print "--------- SHEET:", $oWkS->{Name}, "\n";
+ for(my $iR = $oWkS->{MinRow} ;
+ defined $oWkS->{MaxRow} && $iR <= $oWkS->{MaxRow} ; $iR++) {
+ for(my $iC = $oWkS->{MinCol} ;
+ defined $oWkS->{MaxCol} && $iC <= $oWkS->{MaxCol} ; $iC++) {
+ $oWkC = $oWkS->{Cells}[$iR][$iC];
+ print "( $iR , $iC ) =>", $oWkC->Value, "\n" if($oWkC);
+ }
+ }
+ }
+
+ÌäÂêÅÀ¡¦¥Ð¥°</pre>
+
+<pre>ºÇÂç¤ÎÌäÂêÅÀ¤Ç¤¢¤Ã¤¿¡ÖExce97 ¥Ç¥Ù¥í¥Ã¥Ñ¡¼¥º ¥¥Ã¥È¡×¤¬¼ê¤ËÆþ¤ê¤Þ¤·¤¿¡£
+ ¤¿¤À¤¿¤ÀHirofumi Morisada¤µ¤ó¤Ë´¶¼Õ¡¢´¶¼Õ¤Ç¤¹¡£
+</pre>
+
+<pre> Excel97/2000¤ÇÊݸ¤·¤¿¾ì¹ç¡¢FmtJapan¤Ç¤Ïµ¡¼ï°Í¸ʸ»ú¡Ê(³ô)¤ä¥í¡¼¥Þ¿ô»ú¤ÎI¤Ê¤É¡Ë¤¬¢®¤Ë¤Ê¤Ã¤Æ¤·¤Þ¤¤¤Þ¤¹¡£
+ FmtJapan2¤Ç¤Ï°ì±þÂбþ¤·¤Æ¤¤¤ë¤Ä¤â¤ê¤Ç¤¹¡£</pre>
+
+<pre> ¤Þ¤À¥Æ¥¹¥È¤â¤Á¤ã¤ó¤È¤Ç¤¤Æ¤¤¤Þ¤»¤ó¡£¤È¤ê¤¢¤¨¤º¤ÏÆ°¤¯¤Ç¤·¤ç¤¦¡£ <(__)>
+ TurboLinux Version 6¤ÇºîÀ®¤·¤Æ¤¤¤ë¤Î¤Ç¡¢Â¾¤Î´Ä¶¤Ç¤É¤¦¤Ê¤ë¤Î¤«¤È¤Æ¤âµ¤¤Ë
+ ¤Ê¤ê¤Þ¤¹¡£
+ Solaris¤Ç¤ÏÆ°ºî³Îǧ¤ò¤·¤Æ¤â¤é¤¤¤Þ¤·¤¿¡£¡Ê¤Þ¤ÀÉÔ¶ñ¹ç¤¬¤¢¤ê¤½¤¦¤Ç¤¹¤¬¡Ë
+
+ ¥³¥á¥ó¥È¡¢¥Ð¥°¥ì¥Ý¡¼¥È¤ò¤ªÂÔ¤Á¤·¤Æ¤¤¤Þ¤¹ Àî¹ç¹§Åµ¡§kwitknr at cpn.org
+
+¤ä¤é¤Ê¤¤ã¤¤¤±¤Ê¤¤¤³¤È¡§
+ ¥Æ¥¹¥È¡ª
+ ¥É¥¥å¥á¥ó¥È¤ÎÀ°È÷
+ ½ÐÎϤؤÎÂбþ (^_^) Spreadsheet::WriteExcel¤ò»È¤Ã¤Æ¤¤¤¿¤À¤¯¤Î¤¬°ìÈÖ
+
+ ¤À¤ì¤«¤Þ¤ë¤´¤È°ú¤¤Ä¤¤¤Æ¤¯¤ì¤ë¿Í¤Ï¤¤¤Þ¤»¤ó¤«¡©(^^)
+
+¼Õ¼¡§
+ ¤³¤ó¤ÊȾü¤Ê¾õÂ֤Ǽռ¤â¤¢¤Ã¤¿¤â¤Î¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¤¬¡¢°Ê²¼¤Î¥×¥í¥°¥é¥à¡¢
+ ¥â¥¸¥å¡¼¥ë¤ò»²¹Í¤Ë¤µ¤»¤Æ¤¤¤¿¤À¤¤Þ¤·¤¿¡£
+
+ xlHtml
+ OLE::Storage
+ herbert (OLE::Storage¤ËƱº¤µ¤ì¤ë¥Ä¡¼¥ë¡Ë
+ Spreadsheet::WriteExcel
+
+ Solaris¤Î¥Ç¥Ð¥Ã¥°¤ÏÅçËÜÉð»á¤È»³Ï©½ÕÆव¤ó¤¬¤¤¤Ê¤±¤ì¤Ð¡¢À®Î©¤·¤Þ¤»¤ó¤Ç¤·¤¿¡£(cloudy¤Ë´¶¼Õ¡Ë
+¡¡ Ǹ¸ýÀ²Èþ¤µ¤ó¤Ë¤ÏExcel2000¤Î¥Õ¥¡¥¤¥ë¤ò¤¤¤¿¤À¤¤Þ¤·¤¿¡£
+ Hirofumi Morisada¤µ¤ó¤«¤é¤Î¾ðÊó¤Çʸ»úÎó¤Î¥Ð¥°¤òȯ¸«¡¢½¤Àµ¤¹¤ë¤³¤È¤¬¤Ç¤¤Þ¤·¤¿¡£
+ ¤½¤·¤Æ¡ÖExcel97¥Ç¥Ù¥í¥Ã¥Ñ¡¼¥º¥¥Ã¥È¡×¤ò¤É¤¦¤â¤¢¤ê¤¬¤È¤¦¤´¤¶¤¤¤Þ¤·¤¿¡£
+
+ ¤½¤Î¾¡¢¤¿¤¯¤µ¤ó¤ÎÊý¤«¤é¤ÎÆ°ºîÊó¹ð¤ä¥Ð¥°¥ì¥Ý¡¼¥È¤ò¤¤¤¿¤À¤´¶¼Õ¡¢´¶¼Õ¤Ç¤¹¡£</pre>
+</body>
+</html>
Added: packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/Excel/AuthorK.xls
===================================================================
(Binary files differ)
Property changes on: packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/Excel/AuthorK.xls
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/Excel/AuthorK95.xls
===================================================================
(Binary files differ)
Property changes on: packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/Excel/AuthorK95.xls
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/Excel/FmtTest.xls
===================================================================
(Binary files differ)
Property changes on: packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/Excel/FmtTest.xls
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/Excel/Rich.xls
===================================================================
(Binary files differ)
Property changes on: packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/Excel/Rich.xls
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/Excel/Test1904.xls
===================================================================
(Binary files differ)
Property changes on: packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/Excel/Test1904.xls
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/Excel/Test1904_95.xls
===================================================================
(Binary files differ)
Property changes on: packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/Excel/Test1904_95.xls
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/Excel/Test95.xls
===================================================================
(Binary files differ)
Property changes on: packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/Excel/Test95.xls
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/Excel/Test95J.xls
===================================================================
(Binary files differ)
Property changes on: packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/Excel/Test95J.xls
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/Excel/Test97.xls
===================================================================
(Binary files differ)
Property changes on: packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/Excel/Test97.xls
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/Excel/Test97J.xls
===================================================================
(Binary files differ)
Property changes on: packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/Excel/Test97J.xls
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/Excel/oem.xls
===================================================================
(Binary files differ)
Property changes on: packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/Excel/oem.xls
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/Ilya.pl
===================================================================
--- packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/Ilya.pl 2005-01-25 02:10:47 UTC (rev 660)
+++ packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/Ilya.pl 2005-01-25 15:06:55 UTC (rev 661)
@@ -0,0 +1,24 @@
+use strict;
+use Spreadsheet::ParseExcel;
+package IlyaPackage; #:-)
+sub new($){
+ my $self = shift;
+ my $obj = {};
+ bless $obj, $self;
+}
+sub cb_routine($@) {
+ my($self, $oBook, $iSheet, $iRow, $iCol, $oCell) = @_;
+ print "( $iRow , $iCol ) =>", $oCell->Value, "\n";
+}
+sub parse($$){
+ my($self, $sFile) = @_;
+ my $oEx =
+ Spreadsheet::ParseExcel->new(
+ CellHandler => \&cb_routine,
+ Object => $self,
+ NotSetCell => 1);
+ $oEx->Parse($sFile);
+}
+1;
+my $oIlya =IlyaPackage->new;
+$oIlya->parse($ARGV[0]);
Added: packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/README
===================================================================
--- packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/README 2005-01-25 02:10:47 UTC (rev 660)
+++ packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/README 2005-01-25 15:06:55 UTC (rev 661)
@@ -0,0 +1,36 @@
+chkFmt.pl : Sample Script for formatting
+res_fmt : result of chkFmt.pl
+
+chkInfo.pl : Sample Script for get information about format
+res_info : result of chkInfo.pl with Excel/FmtTest.xls
+
+sample.pl :Simple Script (using SpreadSheet::ParseExcel::FmtDefault)
+sample_j.pl :Simple Script using Japanese character
+ (using SpreadSheet::ParseExcel::FmtJapan)
+res_sample :result of sample.pl
+res_sample_j:result of sample_j.pl (in euc)
+
+dmpEx.pl : print out content of Excel file
+ (using SpreadSheet::ParseExcel::FmtDefault)
+dmpExJ.pl : print out content of Excel file
+ (using SpreadSheet::ParseExcel::FmtJapan)
+dmpExU.pl : print out content of Excel file
+ (using SpreadSheet::ParseExcel::FmtUnicode)
+
+dmpExH.pl : print out content of Excel file
+ (using SpreadSheet::ParseExcel::FmtDefault + event handler)
+
+sampleOEM.pl: Displys difference between FmtJapan and FmtJapan2
+res_oem : result of samplOEM.pl
+
+dmpExR.pl : Sample Script for get information about each characters.
+res_rich : result of dmpExR.pl with Excel/Rich.xls
+
+Ilya.pl : Sample script for Object Oriented callback
+
+smpFile.pl : Sample scripr for parsing perl variable
+
+xls2csv.pl : Sample script for xls2csv
+
+iftest.pl : Sample script for new interface
+iftestj.pl : Sample script for new interface with FmtJapan
Added: packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/chkFmt.pl
===================================================================
--- packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/chkFmt.pl 2005-01-25 02:10:47 UTC (rev 660)
+++ packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/chkFmt.pl 2005-01-25 15:06:55 UTC (rev 661)
@@ -0,0 +1,52 @@
+use strict;
+use Spreadsheet::ParseExcel::Utility;
+my $sWk;
+my @aData = (-2, 0, 1234, -1234, 34323.23232, -233232.3233,
+ Spreadsheet::ParseExcel::Utility::LocaltimeExcel(13, 11, 12, 23, 2, 64, undef, 238));
+my %hFmtTest = (
+ 0x00 => '@',
+ 0x01 => '0',
+ 0x02 => '0.00',
+ 0x03 => '#,##0',
+ 0x04 => '#,##0.00',
+ 0x05 => '(\\\\#,##0_);(\\\\#,##0)',
+ 0x06 => '(\\\\#,##0_);[RED](\\\\#,##0)',
+ 0x07 => '(\\\\#,##0.00_);(\\\\#,##0.00_)',
+ 0x08 => '(\\\\#,##0.00_);[RED](\\\\#,##0.00_)',
+ 0x09 => '0%',
+ 0x0A => '0.00%',
+ 0x0B => '0.00E+00',
+ 0x0C => '# ?/?',
+ 0x0D => '# ??/??',
+ 0x0E => 'm/d/yy',
+ 0x0F => 'd-mmm-yy',
+ 0x10 => 'd-mmm',
+ 0x11 => 'mmm-yy',
+ 0x12 => 'h:mm AM/PM',
+ 0x13 => 'h:mm:ss AM/PM',
+ 0x14 => 'h:mm',
+ 0x15 => 'h:mm:ss',
+ 0x16 => 'm/d/yy h:mm',
+#0x17-0x24 -- Differs in Natinal
+ 0x25 => '(#,##0_);(#,##0)',
+ 0x26 => '(#,##0_);[RED](#,##0)',
+ 0x27 => '(#,##0.00);(#,##0.00)',
+ 0x28 => '(#,##0.00);[RED](#,##0.00)',
+ 0x29 => '_(*#,##0_);_(*(#,##0);_(*"-"_);_(@_)',
+ 0x2A => '_(\\\\*#,##0_);_(\\\\*(#,##0);_(*"-"_);_(@_)',
+ 0x2B => '_(*#,##0.00_);_(*(#,##0.00);_(*"-"??_);_(@_)',
+ 0x2C => '_(\\\\*#,##0.00_);_(\\\\*(#,##0.00);_(*"-"??_);_(@_)',
+ 0x2D => 'mm:ss',
+ 0x2E => '[h]:mm:ss',
+ 0x2F => 'mm:ss.0',
+ 0x30 => '##0.0E+0',
+ 0x31 => '@',
+);
+foreach my $sKey (sort {$a <=> $b} keys(%hFmtTest)) {
+ my $sVal = $hFmtTest{$sKey};
+ printf "============ %02x \n", $sKey;
+ foreach my $sDt (@aData) {
+ $sWk = Spreadsheet::ParseExcel::Utility::ExcelFmt($sVal, $sDt);
+ printf "Fmt: %-20s : %-10s: Data: %s\n", $sVal, "$sDt", $sWk;
+ }
+}
Added: packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/chkInfo.pl
===================================================================
--- packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/chkInfo.pl 2005-01-25 02:10:47 UTC (rev 660)
+++ packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/chkInfo.pl 2005-01-25 15:06:55 UTC (rev 661)
@@ -0,0 +1,123 @@
+use strict;
+use Spreadsheet::ParseExcel;
+my $oExcel = new Spreadsheet::ParseExcel;
+
+#=Default
+use Spreadsheet::ParseExcel::FmtDefault;
+my $oFmt = Spreadsheet::ParseExcel::FmtDefault->new;
+my $oBook = $oExcel->Parse('Excel/FmtTest.xls');
+#=cut
+=Japan
+use Spreadsheet::ParseExcel::FmtJapan2;
+my $oFmt = Spreadsheet::ParseExcel::FmtJapan2->new(Code=>'sjis');
+my $oBook = $oExcel->Parse('Excel/FmtTest.xls', $oFmt);
+=cut
+=Other Countries (ex. Russia (CP1251))
+use Spreadsheet::ParseExcel::FmtUnicode;
+my $oFmt = Spreadsheet::ParseExcel::FmtUnicode->new(Unicode_Map => 'CP1251');
+my $oBook = $oExcel->Parse('Excel/FmtTest.xls', $oFmt);
+=cut
+
+
+my($iR, $iC, $oWkS, $oWkC);
+print "=========================================\n";
+print 'FILE :', $oBook->{File} , "\n",
+ 'COUNT :', $oBook->{SheetCount} , "\n",
+ 'AUTHOR :', $oBook->{Author} , "\n";
+
+for(my $iSheet=0; $iSheet < $oBook->{SheetCount} ; $iSheet++) {
+ $oWkS = $oBook->{Worksheet}[$iSheet];
+ print "--------- SHEET:", $oWkS->{Name}, "\n";
+
+ print ">> Print Setting\n",
+ 'Landscape :', $oWkS->{Landscape} , "\n",
+ 'Scale :', $oWkS->{Scale} , "\n",
+ 'FitWidth :', $oWkS->{FitWidth} , "\n",
+ 'FitHeight :', $oWkS->{FitHeight} , "\n",
+ 'PageFit :', $oWkS->{PageFit} , "\n",
+ 'PaperSize :', $oWkS->{PaperSize} , "\n",
+ 'PageStart :', $oWkS->{PageStart} , "\n",
+ 'UsePage :', $oWkS->{UsePage} , "\n";
+
+ print ">> Format\n",
+ 'Mergin Left :', $oWkS->{LeftMergin} , "\n",
+ ' Right :', $oWkS->{RightMergin} , "\n",
+ ' Top :', $oWkS->{TopMergin} , "\n",
+ ' Bottom :', $oWkS->{BottomMergin} , "\n",
+ ' Header :', $oWkS->{HeaderMergin} , "\n",
+ ' Footer :', $oWkS->{FooterMergin} , "\n",
+ 'Horizontal Center:', $oWkS->{HCenter} , "\n",
+ 'Vertical Center :', $oWkS->{VCenter} , "\n",
+ 'Header :', $oWkS->{Header} , "\n",
+ 'Footer :', $oWkS->{Footer} , "\n";
+ print "Print Area :\n";
+ foreach my $raA (@{$oBook->{PrintArea}[$iSheet]}) {
+ print ' Area :', join(",", @$raA), "\n";
+ }
+ my $rhA = $oBook->{PrintTitle}[$iSheet];
+ print "Print Title :\n";
+ print " Row :\n";
+ foreach my $raTr (@{$rhA->{Row}}) {
+ print '>> :', join(",", @$raTr) , "\n";
+ }
+ print " Column :\n";
+ foreach my $raTr (@{$rhA->{Column}}) {
+ print '>> :', join(",", @$raTr) , "\n";
+ }
+
+ print 'Print Gridlines :', $oWkS->{PrintGrid} , "\n",
+ 'Print Headings :', $oWkS->{PrintHeaders} , "\n",
+ 'NoColor :', $oWkS->{NoColor} , "\n",
+ 'Draft :', $oWkS->{Draft} , "\n",
+ 'Notes :', $oWkS->{Notes} , "\n",
+ 'LeftToRight :', $oWkS->{LeftToRight} , "\n";
+
+ foreach my $raA (@{$oWkS->{MergedArea}}) {
+ print "Merged Area:", join(",", @$raA), "\n";
+ }
+ print 'Horizontal PageBreak :', join(',', @{$oWkS->{HPageBreak}}), "\n"
+ if($oWkS->{HPageBreak});
+ print 'Vertical PageBreak :', join(',', @{$oWkS->{VPageBreak}}), "\n"
+ if($oWkS->{VPageBreak});
+
+ for(my $iR = $oWkS->{MinRow} ;
+ defined $oWkS->{MaxRow} && $iR <= $oWkS->{MaxRow} ; $iR++) {
+ for(my $iC = $oWkS->{MinCol} ;
+ defined $oWkS->{MaxCol} && $iC <= $oWkS->{MaxCol} ; $iC++) {
+ $oWkC = $oWkS->{Cells}[$iR][$iC];
+ if($oWkC) {
+ print "------------------------------------------------------\n",
+ "( $iR , $iC ) =>", $oWkC->Value, "\n";
+ print 'Format :', $oFmt->FmtString($oWkC, $oBook), "\n",
+ 'AlignH :', $oWkC->{Format}->{AlignH}, "\n",
+ 'AlignV :', $oWkC->{Format}->{AlignV}, "\n",
+ 'Indent :', $oWkC->{Format}->{Indent}, "\n",
+ 'Wrap :', $oWkC->{Format}->{Wrap}, "\n",
+ 'Shrink :', $oWkC->{Format}->{Shrink}, "\n",
+ 'Merged :', (defined($oWkC->{Merged})?
+ $oWkC->{Merged}: 'No'), "\n",
+ 'Rotate :', $oWkC->{Format}->{Rotate}, "\n";
+# 'JustLast :', $oWkC->{Format}->{JustLast}, "\n",
+# 'ReadDir :', $oWkC->{Format}->{ReadDir}, "\n",
+
+ my $oFont = $oWkC->{Format}->{Font};
+ print 'Name :', $oFont->{Name}, "\n",
+ 'Bold :', $oFont->{Bold}, "\n",
+ 'Italic :', $oFont->{Italic}, "\n",
+ 'Height :', $oFont->{Height}, "\n",
+ 'Underline :', $oFont->{Underline}, "\n",
+ 'UnderlineStyle :', sprintf("%02x", $oFont->{UnderlineStyle}), "\n",
+ 'Color :', $oFont->{Color}, "\n",
+ 'Color RGB :', Spreadsheet::ParseExcel->ColorIdxToRGB($oFont->{Color}), "\n",
+ 'Strikeout :', $oFont->{Strikeout}, "\n",
+ 'Super :', $oFont->{Super}, "\n",
+ 'BdrStyle :', join(',', @{$oWkC->{Format}->{BdrStyle}}), "\n",
+ 'BdrColor :', join(',', @{$oWkC->{Format}->{BdrColor}}), "\n",
+ 'BdrDiag :', join(',', @{$oWkC->{Format}->{BdrDiag}}), "\n",
+ 'Pattern :', join(',', @{$oWkC->{Format}->{Fill}}), "\n",
+ 'Lock :', $oWkC->{Format}->{Lock}, "\n",
+ 'Hidden :', $oWkC->{Format}->{Hidden}, "\n";
+ }
+ }
+ }
+}
Added: packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/dmpEx.pl
===================================================================
--- packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/dmpEx.pl 2005-01-25 02:10:47 UTC (rev 660)
+++ packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/dmpEx.pl 2005-01-25 15:06:55 UTC (rev 661)
@@ -0,0 +1,30 @@
+use strict;
+if(!(defined $ARGV[0])) {
+ print<<EOF;
+Usage: $0 Excel_File
+EOF
+ exit;
+}
+use Spreadsheet::ParseExcel;
+my $oExcel = new Spreadsheet::ParseExcel;
+my $oBook = $oExcel->Parse($ARGV[0]);
+
+my($iR, $iC, $oWkS, $oWkC);
+print "=========================================\n";
+print "FILE :", $oBook->{File} , "\n";
+print "COUNT :", $oBook->{SheetCount} , "\n";
+print "AUTHOR:", $oBook->{Author} , "\n";
+#for(my $iSheet=0; $iSheet < $oBook->{SheetCount} ; $iSheet++) {
+# $oWkS = $oBook->{Worksheet}[$iSheet];
+foreach my $oWkS (@{$oBook->{Worksheet}}) {
+ print "--------- SHEET:", $oWkS->{Name}, "\n";
+ for(my $iR = $oWkS->{MinRow} ;
+ defined $oWkS->{MaxRow} && $iR <= $oWkS->{MaxRow} ; $iR++) {
+ for(my $iC = $oWkS->{MinCol} ;
+ defined $oWkS->{MaxCol} && $iC <= $oWkS->{MaxCol} ; $iC++) {
+ $oWkC = $oWkS->{Cells}[$iR][$iC];
+ print "( $iR , $iC ) =>", $oWkC->Value, "\n" if($oWkC);
+print $oWkC->{_Kind}, "\n";
+ }
+ }
+}
Added: packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/dmpExH.pl
===================================================================
--- packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/dmpExH.pl 2005-01-25 02:10:47 UTC (rev 660)
+++ packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/dmpExH.pl 2005-01-25 15:06:55 UTC (rev 661)
@@ -0,0 +1,29 @@
+use strict;
+use Spreadsheet::ParseExcel;
+if(!(defined $ARGV[0])) {
+ print<<EOF;
+Usage: $0 Excel_File
+EOF
+ exit;
+}
+my $iPreSheet=-1;
+sub subCellHandler($$$$$) {
+ my ($oBook, $iSheet, $iRow, $iCol, $oCell) = @_;
+ if($iPreSheet<0) {
+ print "=========================================\n";
+ print "FILE :", $oBook->{File} , "\n";
+ print "COUNT :", $oBook->{SheetCount} , "\n";
+ print "AUTHOR:", $oBook->{Author} , "\n";
+ }
+ if($iPreSheet != $iSheet) {
+ print "--------- SHEET:",
+ $oBook->{Worksheet}[$iSheet]->{Name}, "\n" ;
+ $iPreSheet = $iSheet;
+ }
+ print "( $iRow , $iCol ) =>", $oCell->Value, "\n";
+# $oBook->ParseAbort('Exceed Data') if($iRow >= 1);
+}
+my $oExcel = new Spreadsheet::ParseExcel
+ ( CellHandler => \&subCellHandler, NotSetCell => 1);
+my $oBook = $oExcel->Parse($ARGV[0]);
+print "ABORTED:", $oBook->{_ParseAbort} if($oBook->{_ParseAbort});
Added: packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/dmpExHJ.pl
===================================================================
--- packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/dmpExHJ.pl 2005-01-25 02:10:47 UTC (rev 660)
+++ packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/dmpExHJ.pl 2005-01-25 15:06:55 UTC (rev 661)
@@ -0,0 +1,36 @@
+use strict;
+use Spreadsheet::ParseExcel;
+use Spreadsheet::ParseExcel::FmtJapan2;
+if(!(defined $ARGV[0])) {
+ print<<EOF;
+Usage: $0 Excel_File
+EOF
+ exit;
+}
+my $iPreSheet=-1;
+sub subCellHandler($$$$$) {
+ my ($oBook, $iSheet, $iRow, $iCol, $oCell) = @_;
+ if($iPreSheet<0) {
+ print "=========================================\n";
+ print "FILE :", $oBook->{File} , "\n";
+ print "COUNT :", $oBook->{SheetCount} , "\n";
+ print "AUTHOR:", $oBook->{Author} , "\n";
+ }
+ if($iPreSheet != $iSheet) {
+ print "--------- SHEET:",
+ $oBook->{Worksheet}[$iSheet]->{Name}, "\n" ;
+ $iPreSheet = $iSheet;
+ }
+ print "( $iRow , $iCol ) =>", $oCell->Value, "\n";
+# $oBook->ParseAbort('Exceed Data') if($iRow >= 1);
+}
+my $oExcel = new Spreadsheet::ParseExcel
+ ( CellHandler => \&subCellHandler, NotSetCell => 1);
+my $oFmtJ = Spreadsheet::ParseExcel::FmtJapan2->new(Code => $ARGV[1]);
+my $oBook = $oExcel->Parse($ARGV[0], $oFmtJ);
+for(my $i=0;$i<$oBook->{SheetCount};$i++) {
+ print "LAST:\n";
+ print "Row:", $oBook->{Worksheet}[$i]->{MaxRow}, "\n";
+ print "Col:", $oBook->{Worksheet}[$i]->{MaxCol}, "\n";
+}
+print "ABORTED:", $oBook->{_ParseAbort} if($oBook->{_ParseAbort});
Added: packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/dmpExJ.pl
===================================================================
--- packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/dmpExJ.pl 2005-01-25 02:10:47 UTC (rev 660)
+++ packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/dmpExJ.pl 2005-01-25 15:06:55 UTC (rev 661)
@@ -0,0 +1,33 @@
+use strict;
+if(!(defined $ARGV[0])) {
+ print<<EOF;
+Usage: $0 Excel_File [Code]
+ Code: euc, sjis, jis, ... (same as Jcode.pm)
+EOF
+ exit;
+}
+use Spreadsheet::ParseExcel;
+use Spreadsheet::ParseExcel::FmtJapan;
+my $oExcel = new Spreadsheet::ParseExcel;
+my $oFmtJ = Spreadsheet::ParseExcel::FmtJapan->new(Code => $ARGV[1]);
+my $oBook = $oExcel->Parse($ARGV[0], $oFmtJ);
+
+my($iR, $iC, $oWkS, $oWkC);
+print "=========================================\n";
+print "FILE :", $oBook->{File} , "\n";
+print "COUNT :", $oBook->{SheetCount} , "\n";
+print "AUTHOR:", $oBook->{Author} , "\n";
+#for(my $iSheet=0; $iSheet < $oBook->{SheetCount} ; $iSheet++) {
+# $oWkS = $oBook->{Worksheet}[$iSheet];
+for my $oWkS (@{$oBook->{Worksheet}}) {
+ print "--------- SHEET:", $oWkS->{Name}, "\n";
+ for(my $iR = $oWkS->{MinRow} ;
+ defined $oWkS->{MaxRow} && $iR <= $oWkS->{MaxRow} ; $iR++) {
+ print "ROW HEIGHT:", $oWkS->{RowHeight}[$iR], "\n";
+ for(my $iC = $oWkS->{MinCol} ;
+ defined $oWkS->{MaxCol} && $iC <= $oWkS->{MaxCol} ; $iC++) {
+ $oWkC = $oWkS->{Cells}[$iR][$iC];
+ print "( $iR , $iC ) =>", $oWkC->Value, "\n" if($oWkC);
+ }
+ }
+}
Added: packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/dmpExR.pl
===================================================================
--- packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/dmpExR.pl 2005-01-25 02:10:47 UTC (rev 660)
+++ packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/dmpExR.pl 2005-01-25 15:06:55 UTC (rev 661)
@@ -0,0 +1,48 @@
+use strict;
+if(!(defined $ARGV[0])) {
+ print<<EOF;
+Usage: $0 Excel_File
+EOF
+ exit;
+}
+use Spreadsheet::ParseExcel;
+my $oExcel = new Spreadsheet::ParseExcel;
+my $oBook = $oExcel->Parse($ARGV[0]);
+
+my($iR, $iC, $oWkS, $oWkC);
+print "=========================================\n";
+print "FILE :", $oBook->{File} , "\n";
+print "COUNT :", $oBook->{SheetCount} , "\n";
+print "AUTHOR:", $oBook->{Author} , "\n";
+for(my $iSheet=0; $iSheet < $oBook->{SheetCount} ; $iSheet++) {
+ $oWkS = $oBook->{Worksheet}[$iSheet];
+ print "--------- SHEET:", $oWkS->{Name}, "\n";
+ for(my $iR = $oWkS->{MinRow} ;
+ defined $oWkS->{MaxRow} && $iR <= $oWkS->{MaxRow} ; $iR++) {
+ for(my $iC = $oWkS->{MinCol} ;
+ defined $oWkS->{MaxCol} && $iC <= $oWkS->{MaxCol} ; $iC++) {
+ $oWkC = $oWkS->{Cells}[$iR][$iC];
+ print "( $iR , $iC ) =>", $oWkC->Value, "\n" if($oWkC);
+ if($oWkC) {
+ if($oWkC->{Rich}) {
+ foreach my $raR (@{$oWkC->{Rich}}) {
+ my $oFont = $raR->[1];
+ print
+ "--------------------------------------------\n",
+ 'POS :', $raR->[0], "\n",
+ 'Name :', $oFont->{Name}, "\n",
+ 'Bold :', $oFont->{Bold}, "\n",
+ 'Italic :', $oFont->{Italic}, "\n",
+ 'Height :', $oFont->{Height}, "\n",
+ 'Underline :', $oFont->{Underline}, "\n",
+ 'UnderlineStyle :', sprintf("%02x", $oFont->{UnderlineStyle}), "\n",
+ 'Color :', $oFont->{Color}, "\n",
+ 'Color RGB :', Spreadsheet::ParseExcel->ColorIdxToRGB($oFont->{Color}), "\n",
+ 'Strikeout :', $oFont->{Strikeout}, "\n",
+ 'Super :', $oFont->{Super}, "\n",
+ }
+ }
+ }
+ }
+ }
+}
Added: packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/dmpExU.pl
===================================================================
--- packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/dmpExU.pl 2005-01-25 02:10:47 UTC (rev 660)
+++ packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/dmpExU.pl 2005-01-25 15:06:55 UTC (rev 661)
@@ -0,0 +1,36 @@
+# This script requieres Unicode::Map
+use strict;
+if($#ARGV < 1) {
+ print<<EOF;
+Usage: $0 Excel_File [Code]
+ Code: CP932, CP1251, ... (same as Unicode::Map)
+EOF
+ exit;
+}
+use Spreadsheet::ParseExcel;
+use Spreadsheet::ParseExcel::FmtUnicode;
+my $oExcel = new Spreadsheet::ParseExcel;
+my $oFmtJ = Spreadsheet::ParseExcel::FmtUnicode->new(Unicode_Map => $ARGV[1]);
+my $oBook = $oExcel->Parse($ARGV[0], $oFmtJ);
+
+my($iR, $iC, $oWkS, $oWkC);
+print "=========================================\n";
+print "FILE :", $oBook->{File} , "\n";
+print "COUNT :", $oBook->{SheetCount} , "\n";
+print "AUTHOR:", $oBook->{Author} , "\n";
+
+my $table = [];
+
+for(my $iSheet=0; $iSheet < $oBook->{SheetCount} ; $iSheet++) {
+ $oWkS = $oBook->{Worksheet}[$iSheet];
+ print "--------- SHEET:", $oWkS->{Name}, "\n";
+ for(my $iR = $oWkS->{MinRow} ;
+ defined $oWkS->{MaxRow} && $iR <= $oWkS->{MaxRow} ; $iR++) {
+# print "ROW HEIGHT:", $oWkS->{RowHeight}[$iR], "\n";
+ for(my $iC = $oWkS->{MinCol} ;
+ defined $oWkS->{MaxCol} && $iC <= $oWkS->{MaxCol} ; $iC++) {
+ $oWkC = $oWkS->{Cells}[$iR][$iC];
+ print "( $iR , $iC ) =>", $oWkC->Value, "\n" if($oWkC);
+ }
+ }
+}
Added: packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/dmpEx_2xml.pl
===================================================================
--- packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/dmpEx_2xml.pl 2005-01-25 02:10:47 UTC (rev 660)
+++ packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/dmpEx_2xml.pl 2005-01-25 15:06:55 UTC (rev 661)
@@ -0,0 +1,44 @@
+#Khalid EZZARAOUI khalid at yromem.com
+use strict;
+if(!(defined $ARGV[0])) {
+ print<<EOF;
+Usage: $0 Excel_File
+EOF
+ exit;
+}
+use Spreadsheet::ParseExcel;
+my $oExcel = new Spreadsheet::ParseExcel;
+my $oBook = $oExcel->Parse($ARGV[0]);
+
+my($iR, $iC, $oWkS, $oWkC);
+print '<?xml version="1.0" encoding="ISO-8859-1"?>', "\n";
+print "<document>", "\n";
+
+print "\t", "<meta>", "\n";
+print "\t\t", "<file>", $oBook->{File} , "</file>", "\n";
+print "\t\t", "<sheetcount>", $oBook->{SheetCount} , "</sheetcount>", "\n";
+print "\t\t", "<author>", $oBook->{Author} , "</author>", "\n";
+print "\t", "</meta>", "\n";
+
+print "\t", "<sheets>", "\n";
+#for(my $iSheet=0; $iSheet < $oBook->{SheetCount} ; $iSheet++) {
+# $oWkS = $oBook->{Worksheet}[$iSheet];
+foreach my $oWkS (@{$oBook->{Worksheet}}) {
+ print "\t\t", "<sheet " ;
+ print "name=\"", $oWkS->{Name}, "\" >", "\n";
+ for(my $iR = $oWkS->{MinRow} ; defined $oWkS->{MaxRow} && $iR <= $oWkS->{MaxRow} ; $iR++) {
+ print "\t\t\t", "<row num=\"", $iR, "\">", "\n" ;
+ for(my $iC = $oWkS->{MinCol} ; defined $oWkS->{MaxCol} && $iC <= $oWkS->{MaxCol} ; $iC++) {
+ $oWkC = $oWkS->{Cells}[$iR][$iC];
+ print "\t\t\t\t", "<col num=\"", $iC, "\"", ">", $oWkC->Value, "</col>", "\n" if($oWkC);
+ # print $oWkC->{_Kind}, "\n";
+ }
+ print "\t\t\t", "</row>", "\n" ;
+ }
+ print "\t\t", "</sheet>\n" ;
+}
+
+print "\t", "</sheets>", "\n";
+
+print "</document>", "\n";
+
Added: packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/iftest.pl
===================================================================
--- packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/iftest.pl 2005-01-25 02:10:47 UTC (rev 660)
+++ packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/iftest.pl 2005-01-25 15:06:55 UTC (rev 661)
@@ -0,0 +1,29 @@
+use strict;
+use Spreadsheet::ParseExcel;
+my $oBook =
+ Spreadsheet::ParseExcel::Workbook->Parse('Excel/Test97.xls');
+my($iR, $iC, $oWkS, $oWkC);
+foreach my $oWkS (@{$oBook->{Worksheet}}) {
+ print "--------- SHEET:", $oWkS->{Name}, "\n";
+ for(my $iR = $oWkS->{MinRow} ;
+ defined $oWkS->{MaxRow} && $iR <= $oWkS->{MaxRow} ; $iR++) {
+ for(my $iC = $oWkS->{MinCol} ;
+ defined $oWkS->{MaxCol} && $iC <= $oWkS->{MaxCol} ; $iC++) {
+ $oWkC = $oWkS->{Cells}[$iR][$iC];
+ print "( $iR , $iC ) =>", $oWkC->Value, "\n" if($oWkC);
+ }
+ }
+}
+#Sheet Name
+print $oBook->Worksheet('Sheet1-ASC')->{Cells}[0][1]->Value, "\n";
+#Sheet No
+print $oBook->Worksheet(0)->{Cells}[0][1]->Value, "\n";
+#Sheet Not found
+print (($oBook->Worksheet('SHEET1'))? 'Exists' : 'Not Exists'), "\n";
+
+use Spreadsheet::ParseExcel::SaveParser;
+$oBook =
+ Spreadsheet::ParseExcel::SaveParser::Workbook->Parse('Excel/Test97.xls');
+my $oWs = $oBook->AddWorksheet('TEST1');
+$oWs->AddCell(10, 1, 'New Cell');
+$oBook->SaveAs('iftest.xls');
Added: packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/iftestj.pl
===================================================================
--- packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/iftestj.pl 2005-01-25 02:10:47 UTC (rev 660)
+++ packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/iftestj.pl 2005-01-25 15:06:55 UTC (rev 661)
@@ -0,0 +1,27 @@
+use strict;
+use Spreadsheet::ParseExcel;
+use Spreadsheet::ParseExcel::FmtJapan;
+my $oBook =
+ Spreadsheet::ParseExcel::Workbook->Parse(
+ 'Excel/Test97J.xls',
+ Spreadsheet::ParseExcel::FmtJapan->new (Code => 'sjis'));
+
+my($iR, $iC, $oWkS, $oWkC);
+print "=========================================\n";
+print "FILE :", $oBook->{File} , "\n";
+print "COUNT :", $oBook->{SheetCount} , "\n";
+print "AUTHOR:", $oBook->{Author} , "\n";
+#for(my $iSheet=0; $iSheet < $oBook->{SheetCount} ; $iSheet++) {
+# $oWkS = $oBook->{Worksheet}[$iSheet];
+foreach my $oWkS (@{$oBook->{Worksheet}}) {
+ print "--------- SHEET:", $oWkS->{Name}, "\n";
+ for(my $iR = $oWkS->{MinRow} ;
+ defined $oWkS->{MaxRow} && $iR <= $oWkS->{MaxRow} ; $iR++) {
+ for(my $iC = $oWkS->{MinCol} ;
+ defined $oWkS->{MaxCol} && $iC <= $oWkS->{MaxCol} ; $iC++) {
+ $oWkC = $oWkS->{Cells}[$iR][$iC];
+ print "( $iR , $iC ) =>", $oWkC->Value, "\n" if($oWkC);
+print $oWkC->{_Kind}, "\n";
+ }
+ }
+}
Added: packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/res_fmt
===================================================================
--- packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/res_fmt 2005-01-25 02:10:47 UTC (rev 660)
+++ packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/res_fmt 2005-01-25 15:06:55 UTC (rev 661)
@@ -0,0 +1,288 @@
+============ 00
+Fmt: @ : -2 : Data: -2
+Fmt: @ : 0 : Data: 0
+Fmt: @ : 1234 : Data: 1234
+Fmt: @ : -1234 : Data: -1234
+Fmt: @ : 34323.23232: Data: 34323.23232
+Fmt: @ : -233232.3233: Data: -233232.3233
+Fmt: @ : 21997.5077893519: Data: 21997.5077893519
+============ 01
+Fmt: 0 : -2 : Data: -2
+Fmt: 0 : 0 : Data: 0
+Fmt: 0 : 1234 : Data: 1234
+Fmt: 0 : -1234 : Data: -1234
+Fmt: 0 : 34323.23232: Data: 34323
+Fmt: 0 : -233232.3233: Data: -233232
+Fmt: 0 : 21997.5077893519: Data: 21998
+============ 02
+Fmt: 0.00 : -2 : Data: -2.00
+Fmt: 0.00 : 0 : Data: 0.00
+Fmt: 0.00 : 1234 : Data: 1234.00
+Fmt: 0.00 : -1234 : Data: -1234.00
+Fmt: 0.00 : 34323.23232: Data: 34323.23
+Fmt: 0.00 : -233232.3233: Data: -233232.32
+Fmt: 0.00 : 21997.5077893519: Data: 21997.51
+============ 03
+Fmt: #,##0 : -2 : Data: -2
+Fmt: #,##0 : 0 : Data: 0
+Fmt: #,##0 : 1234 : Data: 1,234
+Fmt: #,##0 : -1234 : Data: -1,234
+Fmt: #,##0 : 34323.23232: Data: 34,323
+Fmt: #,##0 : -233232.3233: Data: -233,232
+Fmt: #,##0 : 21997.5077893519: Data: 21,998
+============ 04
+Fmt: #,##0.00 : -2 : Data: -2.00
+Fmt: #,##0.00 : 0 : Data: 0.00
+Fmt: #,##0.00 : 1234 : Data: 1,234.00
+Fmt: #,##0.00 : -1234 : Data: -1,234.00
+Fmt: #,##0.00 : 34323.23232: Data: 34,323.23
+Fmt: #,##0.00 : -233232.3233: Data: -233,232.32
+Fmt: #,##0.00 : 21997.5077893519: Data: 21,997.51
+============ 05
+Fmt: (\\#,##0_);(\\#,##0) : -2 : Data: \-2
+Fmt: (\\#,##0_);(\\#,##0) : 0 : Data: \0
+Fmt: (\\#,##0_);(\\#,##0) : 1234 : Data: \1,234
+Fmt: (\\#,##0_);(\\#,##0) : -1234 : Data: \-1,234
+Fmt: (\\#,##0_);(\\#,##0) : 34323.23232: Data: \34,323
+Fmt: (\\#,##0_);(\\#,##0) : -233232.3233: Data: \-233,232
+Fmt: (\\#,##0_);(\\#,##0) : 21997.5077893519: Data: \21,998
+============ 06
+Fmt: (\\#,##0_);[RED](\\#,##0) : -2 : Data: \-2
+Fmt: (\\#,##0_);[RED](\\#,##0) : 0 : Data: \0
+Fmt: (\\#,##0_);[RED](\\#,##0) : 1234 : Data: \1,234
+Fmt: (\\#,##0_);[RED](\\#,##0) : -1234 : Data: \-1,234
+Fmt: (\\#,##0_);[RED](\\#,##0) : 34323.23232: Data: \34,323
+Fmt: (\\#,##0_);[RED](\\#,##0) : -233232.3233: Data: \-233,232
+Fmt: (\\#,##0_);[RED](\\#,##0) : 21997.5077893519: Data: \21,998
+============ 07
+Fmt: (\\#,##0.00_);(\\#,##0.00_) : -2 : Data: \-2.00
+Fmt: (\\#,##0.00_);(\\#,##0.00_) : 0 : Data: \0.00
+Fmt: (\\#,##0.00_);(\\#,##0.00_) : 1234 : Data: \1,234.00
+Fmt: (\\#,##0.00_);(\\#,##0.00_) : -1234 : Data: \-1,234.00
+Fmt: (\\#,##0.00_);(\\#,##0.00_) : 34323.23232: Data: \34,323.23
+Fmt: (\\#,##0.00_);(\\#,##0.00_) : -233232.3233: Data: \-233,232.32
+Fmt: (\\#,##0.00_);(\\#,##0.00_) : 21997.5077893519: Data: \21,997.51
+============ 08
+Fmt: (\\#,##0.00_);[RED](\\#,##0.00_) : -2 : Data: \-2.00
+Fmt: (\\#,##0.00_);[RED](\\#,##0.00_) : 0 : Data: \0.00
+Fmt: (\\#,##0.00_);[RED](\\#,##0.00_) : 1234 : Data: \1,234.00
+Fmt: (\\#,##0.00_);[RED](\\#,##0.00_) : -1234 : Data: \-1,234.00
+Fmt: (\\#,##0.00_);[RED](\\#,##0.00_) : 34323.23232: Data: \34,323.23
+Fmt: (\\#,##0.00_);[RED](\\#,##0.00_) : -233232.3233: Data: \-233,232.32
+Fmt: (\\#,##0.00_);[RED](\\#,##0.00_) : 21997.5077893519: Data: \21,997.51
+============ 09
+Fmt: 0% : -2 : Data: -200%
+Fmt: 0% : 0 : Data: 0%
+Fmt: 0% : 1234 : Data: 123400%
+Fmt: 0% : -1234 : Data: -123400%
+Fmt: 0% : 34323.23232: Data: 3432323%
+Fmt: 0% : -233232.3233: Data: -23323232%
+Fmt: 0% : 21997.5077893519: Data: 2199751%
+============ 0a
+Fmt: 0.00% : -2 : Data: -200.00%
+Fmt: 0.00% : 0 : Data: 0.00%
+Fmt: 0.00% : 1234 : Data: 123400.00%
+Fmt: 0.00% : -1234 : Data: -123400.00%
+Fmt: 0.00% : 34323.23232: Data: 3432323.23%
+Fmt: 0.00% : -233232.3233: Data: -23323232.33%
+Fmt: 0.00% : 21997.5077893519: Data: 2199750.78%
+============ 0b
+Fmt: 0.00E+00 : -2 : Data: -2.00E+00
+Fmt: 0.00E+00 : 0 : Data: 0.00E+00
+Fmt: 0.00E+00 : 1234 : Data: 1.23E+03
+Fmt: 0.00E+00 : -1234 : Data: -1.23E+03
+Fmt: 0.00E+00 : 34323.23232: Data: 3.43E+04
+Fmt: 0.00E+00 : -233232.3233: Data: -2.33E+05
+Fmt: 0.00E+00 : 21997.5077893519: Data: 2.20E+04
+============ 0c
+Fmt: # ?/? : -2 : Data: -2
+Fmt: # ?/? : 0 : Data: 0
+Fmt: # ?/? : 1234 : Data: 1234
+Fmt: # ?/? : -1234 : Data: -1234
+Fmt: # ?/? : 34323.23232: Data: 34323 2/9
+Fmt: # ?/? : -233232.3233: Data: -233232 1/3
+Fmt: # ?/? : 21997.5077893519: Data: 21997 1/2
+============ 0d
+Fmt: # ??/?? : -2 : Data: -2
+Fmt: # ??/?? : 0 : Data: 0
+Fmt: # ??/?? : 1234 : Data: 1234
+Fmt: # ??/?? : -1234 : Data: -1234
+Fmt: # ??/?? : 34323.23232: Data: 34323 23/99
+Fmt: # ??/?? : -233232.3233: Data: -233232 32/99
+Fmt: # ??/?? : 21997.5077893519: Data: 21997 33/65
+============ 0e
+Fmt: m/d/yy : -2 : Data: 1/-2/00
+Fmt: m/d/yy : 0 : Data: 1/0/00
+Fmt: m/d/yy : 1234 : Data: 5/18/03
+Fmt: m/d/yy : -1234 : Data: 1/-1234/00
+Fmt: m/d/yy : 34323.23232: Data: 12/20/93
+Fmt: m/d/yy : -233232.3233: Data: 1/-233232/00
+Fmt: m/d/yy : 21997.5077893519: Data: 3/22/60
+============ 0f
+Fmt: d-mmm-yy : -2 : Data: -2-Jan-00
+Fmt: d-mmm-yy : 0 : Data: 0-Jan-00
+Fmt: d-mmm-yy : 1234 : Data: 18-May-03
+Fmt: d-mmm-yy : -1234 : Data: -1234-Jan-00
+Fmt: d-mmm-yy : 34323.23232: Data: 20-Dec-93
+Fmt: d-mmm-yy : -233232.3233: Data: -233232-Jan-00
+Fmt: d-mmm-yy : 21997.5077893519: Data: 22-Mar-60
+============ 10
+Fmt: d-mmm : -2 : Data: -2-Jan
+Fmt: d-mmm : 0 : Data: 0-Jan
+Fmt: d-mmm : 1234 : Data: 18-May
+Fmt: d-mmm : -1234 : Data: -1234-Jan
+Fmt: d-mmm : 34323.23232: Data: 20-Dec
+Fmt: d-mmm : -233232.3233: Data: -233232-Jan
+Fmt: d-mmm : 21997.5077893519: Data: 22-Mar
+============ 11
+Fmt: mmm-yy : -2 : Data: Jan-00
+Fmt: mmm-yy : 0 : Data: Jan-00
+Fmt: mmm-yy : 1234 : Data: May-03
+Fmt: mmm-yy : -1234 : Data: Jan-00
+Fmt: mmm-yy : 34323.23232: Data: Dec-93
+Fmt: mmm-yy : -233232.3233: Data: Jan-00
+Fmt: mmm-yy : 21997.5077893519: Data: Mar-60
+============ 12
+Fmt: h:mm AM/PM : -2 : Data: 0:00 AM/PM
+Fmt: h:mm AM/PM : 0 : Data: 0:00 AM/PM
+Fmt: h:mm AM/PM : 1234 : Data: 0:00 AM/PM
+Fmt: h:mm AM/PM : -1234 : Data: 0:00 AM/PM
+Fmt: h:mm AM/PM : 34323.23232: Data: 5:34 AM/PM
+Fmt: h:mm AM/PM : -233232.3233: Data: -7:-45 AM/PM
+Fmt: h:mm AM/PM : 21997.5077893519: Data: 12:11 AM/PM
+============ 13
+Fmt: h:mm:ss AM/PM : -2 : Data: 0:00:00 AM/PM
+Fmt: h:mm:ss AM/PM : 0 : Data: 0:00:00 AM/PM
+Fmt: h:mm:ss AM/PM : 1234 : Data: 0:00:00 AM/PM
+Fmt: h:mm:ss AM/PM : -1234 : Data: 0:00:00 AM/PM
+Fmt: h:mm:ss AM/PM : 34323.23232: Data: 5:34:32 AM/PM
+Fmt: h:mm:ss AM/PM : -233232.3233: Data: -7:-45:-33 AM/PM
+Fmt: h:mm:ss AM/PM : 21997.5077893519: Data: 12:11:13 AM/PM
+============ 14
+Fmt: h:mm : -2 : Data: 0:00
+Fmt: h:mm : 0 : Data: 0:00
+Fmt: h:mm : 1234 : Data: 0:00
+Fmt: h:mm : -1234 : Data: 0:00
+Fmt: h:mm : 34323.23232: Data: 5:34
+Fmt: h:mm : -233232.3233: Data: -7:-45
+Fmt: h:mm : 21997.5077893519: Data: 12:11
+============ 15
+Fmt: h:mm:ss : -2 : Data: 0:00:00
+Fmt: h:mm:ss : 0 : Data: 0:00:00
+Fmt: h:mm:ss : 1234 : Data: 0:00:00
+Fmt: h:mm:ss : -1234 : Data: 0:00:00
+Fmt: h:mm:ss : 34323.23232: Data: 5:34:32
+Fmt: h:mm:ss : -233232.3233: Data: -7:-45:-33
+Fmt: h:mm:ss : 21997.5077893519: Data: 12:11:13
+============ 16
+Fmt: m/d/yy h:mm : -2 : Data: 1/-2/00 0:00
+Fmt: m/d/yy h:mm : 0 : Data: 1/0/00 0:00
+Fmt: m/d/yy h:mm : 1234 : Data: 5/18/03 0:00
+Fmt: m/d/yy h:mm : -1234 : Data: 1/-1234/00 0:00
+Fmt: m/d/yy h:mm : 34323.23232: Data: 12/20/93 5:34
+Fmt: m/d/yy h:mm : -233232.3233: Data: 1/-233232/00 -7:-45
+Fmt: m/d/yy h:mm : 21997.5077893519: Data: 3/22/60 12:11
+============ 25
+Fmt: (#,##0_);(#,##0) : -2 : Data: -2
+Fmt: (#,##0_);(#,##0) : 0 : Data: 0
+Fmt: (#,##0_);(#,##0) : 1234 : Data: 1,234
+Fmt: (#,##0_);(#,##0) : -1234 : Data: -1,234
+Fmt: (#,##0_);(#,##0) : 34323.23232: Data: 34,323
+Fmt: (#,##0_);(#,##0) : -233232.3233: Data: -233,232
+Fmt: (#,##0_);(#,##0) : 21997.5077893519: Data: 21,998
+============ 26
+Fmt: (#,##0_);[RED](#,##0) : -2 : Data: -2
+Fmt: (#,##0_);[RED](#,##0) : 0 : Data: 0
+Fmt: (#,##0_);[RED](#,##0) : 1234 : Data: 1,234
+Fmt: (#,##0_);[RED](#,##0) : -1234 : Data: -1,234
+Fmt: (#,##0_);[RED](#,##0) : 34323.23232: Data: 34,323
+Fmt: (#,##0_);[RED](#,##0) : -233232.3233: Data: -233,232
+Fmt: (#,##0_);[RED](#,##0) : 21997.5077893519: Data: 21,998
+============ 27
+Fmt: (#,##0.00);(#,##0.00) : -2 : Data: -2.00
+Fmt: (#,##0.00);(#,##0.00) : 0 : Data: 0.00
+Fmt: (#,##0.00);(#,##0.00) : 1234 : Data: 1,234.00
+Fmt: (#,##0.00);(#,##0.00) : -1234 : Data: -1,234.00
+Fmt: (#,##0.00);(#,##0.00) : 34323.23232: Data: 34,323.23
+Fmt: (#,##0.00);(#,##0.00) : -233232.3233: Data: -233,232.32
+Fmt: (#,##0.00);(#,##0.00) : 21997.5077893519: Data: 21,997.51
+============ 28
+Fmt: (#,##0.00);[RED](#,##0.00) : -2 : Data: -2.00
+Fmt: (#,##0.00);[RED](#,##0.00) : 0 : Data: 0.00
+Fmt: (#,##0.00);[RED](#,##0.00) : 1234 : Data: 1,234.00
+Fmt: (#,##0.00);[RED](#,##0.00) : -1234 : Data: -1,234.00
+Fmt: (#,##0.00);[RED](#,##0.00) : 34323.23232: Data: 34,323.23
+Fmt: (#,##0.00);[RED](#,##0.00) : -233232.3233: Data: -233,232.32
+Fmt: (#,##0.00);[RED](#,##0.00) : 21997.5077893519: Data: 21,997.51
+============ 29
+Fmt: _(*#,##0_);_(*(#,##0);_(*"-"_);_(@_) : -2 : Data: -2
+Fmt: _(*#,##0_);_(*(#,##0);_(*"-"_);_(@_) : 0 : Data: 0
+Fmt: _(*#,##0_);_(*(#,##0);_(*"-"_);_(@_) : 1234 : Data: 1,234
+Fmt: _(*#,##0_);_(*(#,##0);_(*"-"_);_(@_) : -1234 : Data: -1,234
+Fmt: _(*#,##0_);_(*(#,##0);_(*"-"_);_(@_) : 34323.23232: Data: 34,323
+Fmt: _(*#,##0_);_(*(#,##0);_(*"-"_);_(@_) : -233232.3233: Data: -233,232
+Fmt: _(*#,##0_);_(*(#,##0);_(*"-"_);_(@_) : 21997.5077893519: Data: 21,998
+============ 2a
+Fmt: _(\\*#,##0_);_(\\*(#,##0);_(*"-"_);_(@_) : -2 : Data: \-2
+Fmt: _(\\*#,##0_);_(\\*(#,##0);_(*"-"_);_(@_) : 0 : Data: 0
+Fmt: _(\\*#,##0_);_(\\*(#,##0);_(*"-"_);_(@_) : 1234 : Data: \1,234
+Fmt: _(\\*#,##0_);_(\\*(#,##0);_(*"-"_);_(@_) : -1234 : Data: \-1,234
+Fmt: _(\\*#,##0_);_(\\*(#,##0);_(*"-"_);_(@_) : 34323.23232: Data: \34,323
+Fmt: _(\\*#,##0_);_(\\*(#,##0);_(*"-"_);_(@_) : -233232.3233: Data: \-233,232
+Fmt: _(\\*#,##0_);_(\\*(#,##0);_(*"-"_);_(@_) : 21997.5077893519: Data: \21,998
+============ 2b
+Fmt: _(*#,##0.00_);_(*(#,##0.00);_(*"-"??_);_(@_) : -2 : Data: -2.00
+Fmt: _(*#,##0.00_);_(*(#,##0.00);_(*"-"??_);_(@_) : 0 : Data: -0
+Fmt: _(*#,##0.00_);_(*(#,##0.00);_(*"-"??_);_(@_) : 1234 : Data: 1,234.00
+Fmt: _(*#,##0.00_);_(*(#,##0.00);_(*"-"??_);_(@_) : -1234 : Data: -1,234.00
+Fmt: _(*#,##0.00_);_(*(#,##0.00);_(*"-"??_);_(@_) : 34323.23232: Data: 34,323.23
+Fmt: _(*#,##0.00_);_(*(#,##0.00);_(*"-"??_);_(@_) : -233232.3233: Data: -233,232.32
+Fmt: _(*#,##0.00_);_(*(#,##0.00);_(*"-"??_);_(@_) : 21997.5077893519: Data: 21,997.51
+============ 2c
+Fmt: _(\\*#,##0.00_);_(\\*(#,##0.00);_(*"-"??_);_(@_) : -2 : Data: \-2.00
+Fmt: _(\\*#,##0.00_);_(\\*(#,##0.00);_(*"-"??_);_(@_) : 0 : Data: -0
+Fmt: _(\\*#,##0.00_);_(\\*(#,##0.00);_(*"-"??_);_(@_) : 1234 : Data: \1,234.00
+Fmt: _(\\*#,##0.00_);_(\\*(#,##0.00);_(*"-"??_);_(@_) : -1234 : Data: \-1,234.00
+Fmt: _(\\*#,##0.00_);_(\\*(#,##0.00);_(*"-"??_);_(@_) : 34323.23232: Data: \34,323.23
+Fmt: _(\\*#,##0.00_);_(\\*(#,##0.00);_(*"-"??_);_(@_) : -233232.3233: Data: \-233,232.32
+Fmt: _(\\*#,##0.00_);_(\\*(#,##0.00);_(*"-"??_);_(@_) : 21997.5077893519: Data: \21,997.51
+============ 2d
+Fmt: mm:ss : -2 : Data: 00:00
+Fmt: mm:ss : 0 : Data: 00:00
+Fmt: mm:ss : 1234 : Data: 00:00
+Fmt: mm:ss : -1234 : Data: 00:00
+Fmt: mm:ss : 34323.23232: Data: 34:32
+Fmt: mm:ss : -233232.3233: Data: -45:-33
+Fmt: mm:ss : 21997.5077893519: Data: 11:13
+============ 2e
+Fmt: [h]:mm:ss : -2 : Data: -48:00:00
+Fmt: [h]:mm:ss : 0 : Data: 0:00:00
+Fmt: [h]:mm:ss : 1234 : Data: 29616:00:00
+Fmt: [h]:mm:ss : -1234 : Data: -29616:00:00
+Fmt: [h]:mm:ss : 34323.23232: Data: 823757:34:32
+Fmt: [h]:mm:ss : -233232.3233: Data: -5597575:-45:-33
+Fmt: [h]:mm:ss : 21997.5077893519: Data: 527940:11:13
+============ 2f
+Fmt: mm:ss.0 : -2 : Data: 00:00.0
+Fmt: mm:ss.0 : 0 : Data: 00:00.0
+Fmt: mm:ss.0 : 1234 : Data: 00:00.0
+Fmt: mm:ss.0 : -1234 : Data: 00:00.0
+Fmt: mm:ss.0 : 34323.23232: Data: 34:32.4
+Fmt: mm:ss.0 : -233232.3233: Data: -45:-33..
+Fmt: mm:ss.0 : 21997.5077893519: Data: 11:13.0
+============ 30
+Fmt: ##0.0E+0 : -2 : Data: -2.0E+0
+Fmt: ##0.0E+0 : 0 : Data: 0.0E+0
+Fmt: ##0.0E+0 : 1234 : Data: 1.2E+3
+Fmt: ##0.0E+0 : -1234 : Data: -1.2E+3
+Fmt: ##0.0E+0 : 34323.23232: Data: 34.3E+3
+Fmt: ##0.0E+0 : -233232.3233: Data: -233.2E+3
+Fmt: ##0.0E+0 : 21997.5077893519: Data: 22.0E+3
+============ 31
+Fmt: @ : -2 : Data: -2
+Fmt: @ : 0 : Data: 0
+Fmt: @ : 1234 : Data: 1234
+Fmt: @ : -1234 : Data: -1234
+Fmt: @ : 34323.23232: Data: 34323.23232
+Fmt: @ : -233232.3233: Data: -233232.3233
+Fmt: @ : 21997.5077893519: Data: 21997.5077893519
Added: packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/res_info
===================================================================
--- packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/res_info 2005-01-25 02:10:47 UTC (rev 660)
+++ packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/res_info 2005-01-25 15:06:55 UTC (rev 661)
@@ -0,0 +1,7485 @@
+=========================================
+FILE :Excel/FmtTest.xls
+COUNT :2
+AUTHOR :kawait
+--------- SHEET:Format
+>> Print Setting
+Landscape :0
+Scale :100
+FitWidth :2
+FitHeight :3
+PageFit :1
+PaperSize :13
+PageStart :2
+UsePage :1
+>> Format
+Mergin Left :1
+ Right :2
+ Top :3
+ Bottom :4
+ Header :5
+ Footer :6
+Horizontal Center:0
+Vertical Center :1
+Header :&LLeft Header&RHippo2000
+Footer :&LHippo2000&CCenter Footer
+Print Area :
+ Area :14,6,39,12
+Print Title :
+ Row :
+ Column :
+Print Gridlines :1
+Print Headings :1
+NoColor :0
+Draft :0
+Notes :0
+LeftToRight :1
+Merged Area:9,2,9,3
+------------------------------------------------------
+( 0 , 0 ) =>Font
+Format :@
+AlignH :2
+AlignV :3
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :1,1,1,1
+BdrColor :64,64,64,64
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :0
+Hidden :1
+------------------------------------------------------
+( 0 , 1 ) =>Courier New
+Format :@
+AlignH :6
+AlignV :3
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Courier New
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :1,1,1,1
+BdrColor :64,64,64,64
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :0
+Hidden :1
+------------------------------------------------------
+( 0 , 2 ) =>Arial Black
+Format :@
+AlignH :6
+AlignV :3
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Arial Black
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :1,1,1,1
+BdrColor :64,64,64,64
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :0
+Hidden :1
+------------------------------------------------------
+( 1 , 0 ) =>Font 12
+Format :@
+AlignH :6
+AlignV :3
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :12
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :1,1,1,1
+BdrColor :64,64,64,64
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :0
+Hidden :1
+------------------------------------------------------
+( 1 , 1 ) =>Courier New 20
+Format :@
+AlignH :6
+AlignV :3
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Courier New
+Bold :0
+Italic :0
+Height :20
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :1,1,1,1
+BdrColor :64,64,64,64
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :0
+Hidden :1
+------------------------------------------------------
+( 1 , 2 ) =>Arial Black 8
+Format :@
+AlignH :6
+AlignV :3
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Arial Black
+Bold :0
+Italic :0
+Height :8
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :1,1,1,1
+BdrColor :64,64,64,64
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :0
+Hidden :1
+------------------------------------------------------
+( 2 , 0 ) =>RED
+Format :@
+AlignH :6
+AlignV :3
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :10
+Color RGB :FF0000
+Strikeout :0
+Super :0
+BdrStyle :1,1,1,1
+BdrColor :64,64,64,64
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :0
+Hidden :1
+------------------------------------------------------
+( 2 , 1 ) =>YELLOW
+Format :@
+AlignH :6
+AlignV :3
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Courier New
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :13
+Color RGB :FFFF00
+Strikeout :0
+Super :0
+BdrStyle :1,1,1,1
+BdrColor :64,64,64,64
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :0
+Hidden :1
+------------------------------------------------------
+( 2 , 2 ) =>Sky Blue
+Format :@
+AlignH :6
+AlignV :3
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Arial Black
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :40
+Color RGB :00CCFF
+Strikeout :0
+Super :0
+BdrStyle :1,1,1,1
+BdrColor :64,64,64,64
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :0
+Hidden :1
+------------------------------------------------------
+( 3 , 0 ) =>RED
+Format :@
+AlignH :6
+AlignV :3
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :1
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :10
+Color RGB :FF0000
+Strikeout :0
+Super :0
+BdrStyle :1,1,1,1
+BdrColor :64,64,64,64
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :0
+Hidden :1
+------------------------------------------------------
+( 3 , 1 ) =>PINK BOLD
+Format :@
+AlignH :6
+AlignV :3
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Courier New
+Bold :1
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :14
+Color RGB :FF00FF
+Strikeout :0
+Super :0
+BdrStyle :1,1,1,1
+BdrColor :64,64,64,64
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :0
+Hidden :1
+------------------------------------------------------
+( 3 , 2 ) =>Sky Blue
+Format :@
+AlignH :6
+AlignV :3
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Arial Black
+Bold :1
+Italic :1
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :40
+Color RGB :00CCFF
+Strikeout :0
+Super :0
+BdrStyle :1,1,1,1
+BdrColor :64,64,64,64
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :0
+Hidden :1
+------------------------------------------------------
+( 4 , 0 ) =>RED
+Format :@
+AlignH :6
+AlignV :3
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :1
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :10
+Color RGB :FF0000
+Strikeout :1
+Super :0
+BdrStyle :1,1,1,1
+BdrColor :64,64,64,64
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :0
+Hidden :1
+------------------------------------------------------
+( 4 , 1 ) =>PINK Super
+Format :@
+AlignH :6
+AlignV :3
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Courier New
+Bold :1
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :14
+Color RGB :FF00FF
+Strikeout :0
+Super :1
+BdrStyle :1,1,1,1
+BdrColor :64,64,64,64
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :0
+Hidden :1
+------------------------------------------------------
+( 4 , 2 ) =>Sky Super
+Format :@
+AlignH :6
+AlignV :3
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Arial Black
+Bold :1
+Italic :1
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :40
+Color RGB :00CCFF
+Strikeout :0
+Super :2
+BdrStyle :1,1,1,1
+BdrColor :64,64,64,64
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :0
+Hidden :1
+------------------------------------------------------
+( 5 , 0 ) =>12,323
+Format :#,##0_
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 5 , 1 ) =>@ -100
+Format :0;"@ "0
+AlignH :1
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 5 , 2 ) =>3-23-64
+Format :m-d-yy
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 6 , 0 ) =>12,323
+Format :#,##0_
+AlignH :2
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 6 , 1 ) =>2-3459
+Format :[<=99999999]####\-####;\(00\)\ ####\-####
+AlignH :1
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 6 , 2 ) =>KABA
+Format :m-d-yy
+AlignH :3
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 7 , 0 ) =>12,323
+Format :#,##0_
+AlignH :4
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 7 , 1 ) =>23459
+Format :0_);\(0\)
+AlignH :1
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 7 , 2 ) =>KABA
+Format :m-d-yy
+AlignH :6
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 7 , 3 ) =>
+Format :@
+AlignH :6
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 7 , 4 ) =>a cd
+Format :@
+AlignH :7
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 8 , 0 ) =>12,323
+Format :#,##0_
+AlignH :2
+AlignV :0
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 8 , 1 ) =>1:00
+Format :h:mm
+AlignH :1
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 8 , 2 ) =>KABA
+Format :m-d-yy
+AlignH :3
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 8 , 3 ) =>KA
+BA
+Format :0
+AlignH :3
+AlignV :4
+Indent :0
+Wrap :1
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 9 , 0 ) =>12,323
+Format :#,##0_
+AlignH :4
+AlignV :3
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 9 , 1 ) =>23-Mar
+Format :d-mmm
+AlignH :5
+AlignV :2
+Indent :0
+Wrap :1
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 9 , 2 ) =>KABA
+Format :m-d-yy
+AlignH :2
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :1
+Merged :1
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 9 , 3 ) =>
+Format :@
+AlignH :2
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :1
+Merged :1
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 9 , 4 ) =>kaba
+Format :@
+AlignH :1
+AlignV :2
+Indent :5
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 10 , 0 ) =>ABCDEFGHIJKLMNOPQR
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :1
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 10 , 1 ) =>ABCDEFGHIJKLMNOPQR
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :1
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 11 , 0 ) =>ABCDEFGHIJKLMNOPQR
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :1
+Shrink :1
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 11 , 4 ) =>
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :4,64,8
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 11 , 5 ) =>
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :4,64,13
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 12 , 0 ) =>ABC
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :45
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 12 , 1 ) =>ABC
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :-45
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 12 , 2 ) =>ABC
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :90
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 12 , 3 ) =>ABC
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :-90
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 12 , 4 ) =>
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :4,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 13 , 0 ) =>FORMAT
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 14 , 0 ) =>123456
+Format :0
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 14 , 1 ) =>
+Format :0.00
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 14 , 2 ) =>
+Format :#,##0
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 14 , 3 ) =>
+Format :#,##0.00
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 14 , 4 ) =>
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :1,65,64
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 14 , 5 ) =>1
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 14 , 6 ) =>
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :1,8,64
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 14 , 7 ) =>
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :7,64,16
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 14 , 8 ) =>
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :1,10,64
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 14 , 9 ) =>
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :1,14,64
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 14 , 10 ) =>
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :1,45,64
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 14 , 11 ) =>
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :1,24,64
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 14 , 12 ) =>
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :1,32,64
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 15 , 0 ) =>123456.12
+Format :0.00
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 15 , 4 ) =>
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :3,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 15 , 5 ) =>2
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 15 , 6 ) =>
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :3,64,60
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 15 , 7 ) =>
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :8,64,53
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 15 , 8 ) =>
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :1,52,64
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 15 , 9 ) =>
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :1,51,64
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 15 , 10 ) =>
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :1,47,64
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 15 , 11 ) =>
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :1,25,64
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 15 , 12 ) =>
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :1,33,64
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 16 , 0 ) =>123,456
+Format :#,##0
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 16 , 4 ) =>
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :2,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 16 , 5 ) =>3
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 16 , 6 ) =>
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :2,64,59
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 16 , 7 ) =>
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :9,64,19
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 16 , 8 ) =>
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :1,50,64
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 16 , 9 ) =>
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :1,13,64
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 16 , 10 ) =>
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :1,43,64
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 16 , 11 ) =>
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :1,26,64
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 16 , 12 ) =>
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :1,34,64
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 17 , 0 ) =>123,456.12
+Format :#,##0.00
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 17 , 4 ) =>
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :4,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 17 , 5 ) =>4
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 17 , 6 ) =>
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :4,64,58
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 17 , 7 ) =>
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :10,64,17
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 17 , 8 ) =>
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :1,57,64
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 17 , 9 ) =>
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :1,11,64
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 17 , 10 ) =>
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :1,42,64
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 17 , 11 ) =>
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :1,27,64
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 17 , 12 ) =>
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :1,35,64
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 18 , 0 ) => 123,456
+Format :_ * #,##0_ ;_ * \-#,##0_ ;_ * "-"_ ;_ @_
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 18 , 1 ) => --123,456
+Format :_ * #,##0_ ;_ * \-#,##0_ ;_ * "-"_ ;_ @_
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 18 , 2 ) =>0
+Format :_ * #,##0_ ;_ * \-#,##0_ ;_ * "-"_ ;_ @_
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 18 , 3 ) => abc
+Format :_ * #,##0_ ;_ * \-#,##0_ ;_ * "-"_ ;_ @_
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 18 , 4 ) =>
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :17,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 18 , 5 ) =>5
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 18 , 6 ) =>
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :17,64,56
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 18 , 7 ) =>
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :11,64,21
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 18 , 8 ) =>
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :1,49,64
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 18 , 9 ) =>
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :1,15,64
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 18 , 10 ) =>
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :1,41,64
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 18 , 11 ) =>
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :1,28,64
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 18 , 12 ) =>
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :1,36,64
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 19 , 0 ) => 123,456.12
+Format :_ * #,##0.00_ ;_ * \-#,##0.00_ ;_ * "-"??_ ;_ @_
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 19 , 1 ) => --123,456.12
+Format :_ * #,##0.00_ ;_ * \-#,##0.00_ ;_ * "-"??_ ;_ @_
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 19 , 2 ) => -0
+Format :_ * #,##0.00_ ;_ * \-#,##0.00_ ;_ * "-"??_ ;_ @_
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 19 , 3 ) => abc
+Format :_ * #,##0.00_ ;_ * \-#,##0.00_ ;_ * "-"??_ ;_ @_
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 19 , 4 ) =>
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :18,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 19 , 5 ) =>6
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 19 , 6 ) =>
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :18,64,18
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 19 , 7 ) =>
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :12,64,12
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 19 , 8 ) =>
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :1,48,64
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 19 , 9 ) =>
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :1,40,64
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 19 , 10 ) =>
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :1,44,64
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 19 , 11 ) =>
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :1,29,64
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 19 , 12 ) =>
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :1,37,64
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 20 , 0 ) => * 123,456
+Format :_ "\"* #,##0_ ;_ "\"* \-#,##0_ ;_ "\"* "-"_ ;_ @_
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 20 , 1 ) => * --123,456
+Format :_ "\"* #,##0_ ;_ "\"* \-#,##0_ ;_ "\"* "-"_ ;_ @_
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 20 , 2 ) =>0
+Format :_ "\"* #,##0_ ;_ "\"* \-#,##0_ ;_ "\"* "-"_ ;_ @_
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 20 , 3 ) => abc
+Format :_ "\"* #,##0_ ;_ "\"* \-#,##0_ ;_ "\"* "-"_ ;_ @_
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 20 , 4 ) =>
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :5,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 20 , 5 ) =>7
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 20 , 6 ) =>
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :5,64,62
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 20 , 7 ) =>
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :13,64,54
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 20 , 8 ) =>
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :1,20,64
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 20 , 9 ) =>
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :1,61,64
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 20 , 10 ) =>
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :1,46,64
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 20 , 11 ) =>
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :1,30,64
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 20 , 12 ) =>
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :1,38,64
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 21 , 0 ) => * 123,456.12
+Format :_ "\"* #,##0.00_ ;_ "\"* \-#,##0.00_ ;_ "\"* "-"??_ ;_ @_
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 21 , 1 ) => * --123,456.12
+Format :_ "\"* #,##0.00_ ;_ "\"* \-#,##0.00_ ;_ "\"* "-"??_ ;_ @_
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 21 , 2 ) => * -0
+Format :_ "\"* #,##0.00_ ;_ "\"* \-#,##0.00_ ;_ "\"* "-"??_ ;_ @_
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 21 , 3 ) => abc
+Format :_ "\"* #,##0.00_ ;_ "\"* \-#,##0.00_ ;_ "\"* "-"??_ ;_ @_
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 21 , 4 ) =>
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :6,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 21 , 5 ) =>8
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 21 , 6 ) =>
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :6,64,63
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 21 , 7 ) =>
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :14,64,23
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 21 , 8 ) =>
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :1,55,64
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 21 , 9 ) =>
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :1,22,64
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 21 , 10 ) =>
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :1,9,64
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 21 , 11 ) =>
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :1,31,64
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 21 , 12 ) =>
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :1,39,64
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 22 , 0 ) =>123,456
+Format :(#,##0_);(#,##0)
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 22 , 1 ) =>-123,456
+Format :(#,##0_);(#,##0)
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 22 , 2 ) =>0
+Format :(#,##0_);(#,##0)
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 22 , 3 ) =>abc
+Format :(#,##0_);(#,##0)
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 22 , 4 ) =>
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :7,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 22 , 5 ) =>9
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 23 , 0 ) =>123,456
+Format :(#,##0_);[RED](#,##0)
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 23 , 1 ) =>-123,456
+Format :(#,##0_);[RED](#,##0)
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 23 , 2 ) =>0
+Format :(#,##0_);[RED](#,##0)
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 23 , 3 ) =>abc
+Format :(#,##0_);[RED](#,##0)
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 23 , 4 ) =>
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :8,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 23 , 5 ) =>10
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 24 , 0 ) =>123,456.12
+Format :(#,##0.00);(#,##0.00)
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 24 , 1 ) =>-123,456.12
+Format :(#,##0.00);(#,##0.00)
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 24 , 2 ) =>0.00
+Format :(#,##0.00);(#,##0.00)
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 24 , 3 ) =>abc
+Format :(#,##0.00);(#,##0.00)
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 24 , 4 ) =>
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :9,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 24 , 5 ) =>11
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 25 , 0 ) =>123,456.12
+Format :(#,##0.00);[RED](#,##0.00)
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 25 , 1 ) =>-123,456.12
+Format :(#,##0.00);[RED](#,##0.00)
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 25 , 2 ) =>0.00
+Format :(#,##0.00);[RED](#,##0.00)
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 25 , 3 ) =>abc
+Format :(#,##0.00);[RED](#,##0.00)
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 25 , 4 ) =>
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :10,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 25 , 5 ) =>12
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 26 , 0 ) =>#123,456
+Format :"\"#,##0;"\"\-#,##0
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 26 , 1 ) =>\-123,456
+Format :"\"#,##0;"\"\-#,##0
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 26 , 2 ) =>#0
+Format :"\"#,##0;"\"\-#,##0
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 26 , 3 ) =>abc
+Format :"\"#,##0;"\"\-#,##0
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 26 , 4 ) =>
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :11,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 26 , 5 ) =>13
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 27 , 0 ) =>#123,456
+Format :"\"#,##0;[Red]"\"\-#,##0
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 27 , 1 ) =>\-123,456
+Format :"\"#,##0;[Red]"\"\-#,##0
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 27 , 2 ) =>#0
+Format :"\"#,##0;[Red]"\"\-#,##0
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 27 , 3 ) =>abc
+Format :"\"#,##0;[Red]"\"\-#,##0
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 27 , 4 ) =>
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :12,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 27 , 5 ) =>14
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 28 , 0 ) =>#123,456.12
+Format :"\"#,##0.00;"\"\-#,##0.00
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 28 , 1 ) =>\-123,456.12
+Format :"\"#,##0.00;"\"\-#,##0.00
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 28 , 2 ) =>#0.00
+Format :"\"#,##0.00;"\"\-#,##0.00
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 28 , 3 ) =>abc
+Format :"\"#,##0.00;"\"\-#,##0.00
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 28 , 4 ) =>
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :13,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 28 , 5 ) =>15
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 29 , 0 ) =>#123,456.12
+Format :"\"#,##0.00;[Red]"\"\-#,##0.00
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 29 , 1 ) =>\-123,456.12
+Format :"\"#,##0.00;[Red]"\"\-#,##0.00
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 29 , 2 ) =>#0.00
+Format :"\"#,##0.00;[Red]"\"\-#,##0.00
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 29 , 3 ) =>abc
+Format :"\"#,##0.00;[Red]"\"\-#,##0.00
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 29 , 4 ) =>
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :14,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 29 , 5 ) =>16
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 30 , 0 ) =>12345612%
+Format :0%
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 30 , 1 ) =>-12345612%
+Format :0%
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 30 , 2 ) =>0%
+Format :0%
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 30 , 3 ) =>abc
+Format :0%
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 30 , 4 ) =>
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :15,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 30 , 5 ) =>17
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 30 , 6 ) =>
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :15,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 31 , 0 ) =>12345612.00%
+Format :0.00%
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 31 , 1 ) =>-12345612.00%
+Format :0.00%
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 31 , 2 ) =>0.00%
+Format :0.00%
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 31 , 3 ) =>abc
+Format :0.00%
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 31 , 4 ) =>
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :16,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 31 , 5 ) =>18
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 31 , 6 ) =>
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :16,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 32 , 0 ) =>1.23E+05
+Format :0.00E+00
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 32 , 1 ) =>-1.23E+05
+Format :0.00E+00
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 32 , 2 ) =>0.00E+00
+Format :0.00E+00
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 32 , 3 ) =>abc
+Format :0.00E+00
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 33 , 0 ) =>123.5E+3
+Format :##0.0E+0
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 33 , 1 ) =>-123.5E+3
+Format :##0.0E+0
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 33 , 2 ) =>0.0E+0
+Format :##0.0E+0
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 33 , 3 ) =>abc
+Format :##0.0E+0
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 33 , 4 ) =>
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :4,9,7,11
+BdrColor :64,64,64,64
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 33 , 6 ) =>
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :1,13,3,12
+BdrColor :64,64,64,64
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 33 , 8 ) =>
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :10,2,13,8
+BdrColor :64,64,64,64
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 33 , 10 ) =>
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :6,0,5,0
+BdrColor :64,0,64,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 34 , 0 ) =>123456 1/8
+Format :# ?/?
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 34 , 1 ) =>-123456 1/8
+Format :# ?/?
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 34 , 2 ) =>0
+Format :# ?/?
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 34 , 3 ) =>abc
+Format :# ?/?
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 35 , 0 ) =>123456 3/25
+Format :# ??/??
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 35 , 1 ) =>-123456 3/25
+Format :# ??/??
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 35 , 2 ) =>0
+Format :# ??/??
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 35 , 3 ) =>abc
+Format :# ??/??
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 35 , 4 ) =>
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :5,5,5,5
+BdrColor :60,60,8,60
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 35 , 6 ) =>
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :5,5,5,5
+BdrColor :18,62,56,63
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 35 , 8 ) =>
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :5,5,5,5
+BdrColor :53,17,16,19
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 35 , 10 ) =>
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :5,5,5,5
+BdrColor :12,23,21,54
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 36 , 0 ) =>$123,456
+Format :\$#,##0_);\(\$#,##0\)
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 36 , 1 ) =>($-123,456)
+Format :\$#,##0_);\(\$#,##0\)
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 36 , 2 ) =>$0
+Format :\$#,##0_);\(\$#,##0\)
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 36 , 3 ) =>abc
+Format :\$#,##0_);\(\$#,##0\)
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 37 , 0 ) =>$123,456
+Format :\$#,##0_);[Red]\(\$#,##0\)
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 37 , 1 ) =>($-123,456)
+Format :\$#,##0_);[Red]\(\$#,##0\)
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 37 , 2 ) =>$0
+Format :\$#,##0_);[Red]\(\$#,##0\)
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 37 , 3 ) =>abc
+Format :\$#,##0_);[Red]\(\$#,##0\)
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 37 , 4 ) =>
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :5,5,5,5
+BdrColor :52,57,10,50
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 37 , 6 ) =>
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :5,5,5,5
+BdrColor :48,55,49,20
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 37 , 8 ) =>
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :5,5,5,5
+BdrColor :51,11,14,13
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 37 , 10 ) =>
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :5,5,5,5
+BdrColor :40,22,15,61
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 38 , 0 ) =>$123,456.12
+Format :\$#,##0.00_);\(\$#,##0.00\)
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 38 , 1 ) =>($-123,456.12)
+Format :\$#,##0.00_);\(\$#,##0.00\)
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 38 , 2 ) =>$0.00
+Format :\$#,##0.00_);\(\$#,##0.00\)
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 38 , 3 ) =>abc
+Format :\$#,##0.00_);\(\$#,##0.00\)
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 39 , 0 ) =>$123,456.12
+Format :\$#,##0.00_);[Red]\(\$#,##0.00\)
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 39 , 1 ) =>($-123,456.12)
+Format :\$#,##0.00_);[Red]\(\$#,##0.00\)
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 39 , 2 ) =>$0.00
+Format :\$#,##0.00_);[Red]\(\$#,##0.00\)
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 39 , 3 ) =>abc
+Format :\$#,##0.00_);[Red]\(\$#,##0.00\)
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 40 , 0 ) =>23459
+Format :0
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 40 , 1 ) =>
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 40 , 2 ) =>
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 40 , 3 ) =>
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 40 , 4 ) =>
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :5,5,5,5
+BdrColor :47,42,45,43
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 40 , 6 ) =>
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :5,5,5,5
+BdrColor :18,62,56,63
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 40 , 8 ) =>
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :5,5,5,5
+BdrColor :53,17,16,19
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 40 , 10 ) =>
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :5,5,5,5
+BdrColor :12,23,21,54
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 41 , 0 ) =>Mar-64
+Format :mmm-yy
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 42 , 0 ) =>Mar-64
+Format :mmm-yy
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 42 , 4 ) =>
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :5,5,5,5
+BdrColor :52,57,10,50
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 42 , 6 ) =>
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :5,5,5,5
+BdrColor :44,9,41,46
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 43 , 0 ) =>Mar-64
+Format :mmm-yy
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 44 , 0 ) =>Mar-64
+Format :mmm-yy
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 45 , 0 ) =>23459
+Format :0
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 46 , 0 ) =>23-Mar-64
+Format :d-mmm-yy
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 47 , 0 ) =>23-Mar
+Format :d-mmm
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 48 , 0 ) =>Mar-64
+Format :mmm-yy
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 49 , 0 ) =>1:00 AM/PM
+Format :h:mm AM/PM
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 50 , 0 ) =>1:00:00 AM/PM
+Format :h:mm:ss AM/PM
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 51 , 0 ) =>1:00
+Format :h:mm
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 52 , 0 ) =>1:00:00
+Format :h:mm:ss
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 53 , 0 ) =>1:00:00
+Format :h:mm:ss
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 54 , 0 ) =>1:00:00
+Format :h:mm:ss
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 55 , 0 ) =>3-28-64 1:00
+Format :m-d-yy h:mm
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 56 , 0 ) =>00:00
+Format :mm:ss
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 57 , 0 ) =>00:00.0
+Format :mm:ss.0
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 58 , 0 ) =>23464.0416666667
+Format :@
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 59 , 0 ) =>563137:00:00
+Format :[h]:mm:ss
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 60 , 0 ) =>23,464
+Format :#,##0_
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 61 , 0 ) =>1964/3/28 1:00 AM/PM
+Format :yyyy/m/d\ h:mm\ AM/PM
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 62 , 0 ) =>3/28
+Format :m/d
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 63 , 0 ) =>28-Mar-64
+Format :dd\-mmm\-yy
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 64 , 0 ) =>23464
+Format :0_ ;[Red]\-0\
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 65 , 0 ) =>--2346
+Format :0_ ;[Red]\-0\
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 66 , 0 ) =>234-64
+Format :[<=999]000;000\-00
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 67 , 0 ) =>2-3464
+Format :[<=99999999]####\-####;\(00\)\ ####\-####
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+------------------------------------------------------
+( 68 , 0 ) =>2-3464
+Format :[<=99999999]####\-####;\(00\)\ ####\-####
+AlignH :0
+AlignV :2
+Indent :0
+Wrap :0
+Shrink :0
+Merged :No
+Rotate :0
+Name :Century
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+BdrStyle :0,0,0,0
+BdrColor :0,0,0,0
+BdrDiag :0,0,0
+Pattern :0,64,65
+Lock :1
+Hidden :0
+--------- SHEET:Format(Print)
+>> Print Setting
+Landscape :1
+Scale :90
+FitWidth :2
+FitHeight :3
+PageFit :0
+PaperSize :9
+PageStart :2
+UsePage :0
+>> Format
+Mergin Left :6
+ Right :5
+ Top :4
+ Bottom :3
+ Header :2
+ Footer :1
+Horizontal Center:1
+Vertical Center :0
+Header :&CHeader Center
+Footer :&RLeft Footer
+Print Area :
+ Area :0,0,29,4
+ Area :0,6,43,11
+Print Title :
+ Row :
+>> :0,1
+ Column :
+>> :1,2
+Print Gridlines :0
+Print Headings :0
+NoColor :1
+Draft :1
+Notes :1
+LeftToRight :0
+Horizontal PageBreak :4,4,10
+Vertical PageBreak :2,3,5
Added: packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/res_oem
===================================================================
--- packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/res_oem 2005-01-25 02:10:47 UTC (rev 660)
+++ packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/res_oem 2005-01-25 15:06:55 UTC (rev 661)
@@ -0,0 +1,26 @@
+=========================================
+FILE :Excel/oem.xls
+COUNT :1
+AUTHOR:kawait
+--------- SHEET:Sheet1
+ROW HEIGHT:13.5
+( 0 , 0 ) =>ʸ»ú²½¤±¤¹¤ë¥·¥ê¡¼¥º
+ROW HEIGHT:13.5
+( 1 , 0 ) =>¢® ¥í¡¼¥Þ»ú¤Î£±
+ROW HEIGHT:13.5
+( 2 , 0 ) =>¢®
+ROW HEIGHT:13.5
+( 3 , 0 ) =>¢®¤Ê¤ó¤Æ¤Ê¤â¤Î¤â²½¤±¤ë
+=========================================
+FILE :Excel/oem.xls
+COUNT :1
+AUTHOR:kawait
+--------- SHEET:Sheet1
+ROW HEIGHT:13.5
+( 0 , 0 ) =>ʸ»ú²½¤±¤¹¤ë¥·¥ê¡¼¥º
+ROW HEIGHT:13.5
+( 1 , 0 ) =>µ ¥í¡¼¥Þ»ú¤Î£±
+ROW HEIGHT:13.5
+( 2 , 0 ) =>ê
+ROW HEIGHT:13.5
+( 3 , 0 ) =>¡Á¤Ê¤ó¤Æ¤Ê¤â¤Î¤â²½¤±¤ë
Added: packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/res_rich
===================================================================
--- packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/res_rich 2005-01-25 02:10:47 UTC (rev 660)
+++ packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/res_rich 2005-01-25 15:06:55 UTC (rev 661)
@@ -0,0 +1,68 @@
+=========================================
+FILE :Excel/Rich.xls
+COUNT :1
+AUTHOR:kawait
+--------- SHEET:Sheet1
+( 0 , 0 ) =>example
+( 1 , 0 ) =>example
+--------------------------------------------
+POS :1
+Name :Times New Roman
+Bold :0
+Italic :0
+Height :18
+Underline :0
+UnderlineStyle :00
+Color :13
+Color RGB :FFFF00
+Strikeout :0
+Super :0
+--------------------------------------------
+POS :2
+Name :Times New Roman
+Bold :0
+Italic :0
+Height :16
+Underline :1
+UnderlineStyle :01
+Color :12
+Color RGB :0000FF
+Strikeout :0
+Super :0
+--------------------------------------------
+POS :3
+Name :Times New Roman
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :17
+Color RGB :008000
+Strikeout :0
+Super :0
+--------------------------------------------
+POS :4
+Name :Times New Roman
+Bold :1
+Italic :1
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :14
+Color RGB :FF00FF
+Strikeout :0
+Super :0
+--------------------------------------------
+POS :5
+Name :Times New Roman
+Bold :0
+Italic :0
+Height :11
+Underline :0
+UnderlineStyle :00
+Color :32767
+Color RGB :000000
+Strikeout :0
+Super :0
+( 2 , 0 ) =>
Added: packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/res_sample
===================================================================
--- packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/res_sample 2005-01-25 02:10:47 UTC (rev 660)
+++ packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/res_sample 2005-01-25 15:06:55 UTC (rev 661)
@@ -0,0 +1,91 @@
+=========================================
+FILE :Excel/Test97.xls
+COUNT :2
+AUTHOR:kawait
+--------- SHEET:Sheet1-ASC
+( 0 , 0 ) =>KABA:ASC
+( 0 , 1 ) =>This Data is 'ASC Only'
+( 1 , 0 ) =>Date
+( 1 , 1 ) =>3-23-64
+( 2 , 0 ) =>INTEGER
+( 2 , 1 ) =>12345
+( 3 , 0 ) =>Float
+( 3 , 1 ) =>1.29
+( 4 , 0 ) =>Double
+( 4 , 1 ) =>1234567.89012345
+( 5 , 0 ) =>Formula
+( 5 , 1 ) =>1246912.89012345
+( 6 , 0 ) =>Data
+( 6 , 1 ) =>1234567.89
+( 7 , 0 ) =>BIG INTEGER
+( 7 , 1 ) =>123456789012
+--------- SHEET:Sheet2
+( 0 , 0 ) =>This is Sheet2
+=========================================
+FILE :Excel/Test95.xls
+COUNT :2
+AUTHOR:kawait
+--------- SHEET:Sheet1-ASC
+( 0 , 0 ) =>ASC
+( 0 , 1 ) =>This Data is 'ASC Only'
+( 1 , 0 ) =>Date
+( 1 , 1 ) =>3-23-64
+( 2 , 0 ) =>INTEGER
+( 2 , 1 ) =>12345
+( 3 , 0 ) =>Float
+( 3 , 1 ) =>1.29
+( 4 , 0 ) =>Double
+( 4 , 1 ) =>1234567.89012345
+( 5 , 0 ) =>Formula
+( 5 , 1 ) =>1246912.89012345
+( 6 , 0 ) =>BIG NUM
+( 6 , 1 ) =>123456789.01
+( 7 , 0 ) =>BIG INTEGER
+( 7 , 1 ) =>12345678901
+--------- SHEET:Sheet1-ASC (2)
+( 0 , 0 ) =>ASC
+( 0 , 1 ) =>This Data is 'ASC Only'
+( 1 , 0 ) =>Date
+( 1 , 1 ) =>3-23-64
+( 2 , 0 ) =>INTEGER
+( 2 , 1 ) =>12345
+( 3 , 0 ) =>Float
+( 3 , 1 ) =>1.29
+( 4 , 0 ) =>Double
+( 4 , 1 ) =>1234567.89012345
+( 5 , 0 ) =>Formula
+( 5 , 1 ) =>1246912.89012345
+=========================================
+FILE :Excel/Test1904.xls
+COUNT :1
+AUTHOR:kawait
+--------- SHEET:Sheet1-ASC
+( 0 , 0 ) =>ASC
+( 0 , 1 ) =>This Data is 'ASC Only'
+( 1 , 0 ) =>Date
+( 1 , 1 ) =>3-23-64
+( 2 , 0 ) =>INTEGER
+( 2 , 1 ) =>12345
+( 3 , 0 ) =>Float
+( 3 , 1 ) =>1.29
+( 4 , 0 ) =>Double
+( 4 , 1 ) =>1234567.89012345
+( 5 , 0 ) =>Formula
+( 5 , 1 ) =>1246912.89012345
+=========================================
+FILE :Excel/Test1904_95.xls
+COUNT :1
+AUTHOR:kawait
+--------- SHEET:Sheet1-ASC
+( 0 , 0 ) =>ASC
+( 0 , 1 ) =>This Data is 'ASC Only'
+( 1 , 0 ) =>Date
+( 1 , 1 ) =>3-23-64
+( 2 , 0 ) =>INTEGER
+( 2 , 1 ) =>12345
+( 3 , 0 ) =>Float
+( 3 , 1 ) =>1.29
+( 4 , 0 ) =>Double
+( 4 , 1 ) =>1234567.89012345
+( 5 , 0 ) =>Formula
+( 5 , 1 ) =>1246912.89012345
Added: packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/res_samplej
===================================================================
--- packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/res_samplej 2005-01-25 02:10:47 UTC (rev 660)
+++ packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/res_samplej 2005-01-25 15:06:55 UTC (rev 661)
@@ -0,0 +1,122 @@
+=========================================
+FILE :Excel/Test97J.xls
+COUNT :2
+AUTHOR:kawait
+--------- SHEET:Sheet1-ASC
+( 0 , 0 ) =>ASC
+( 0 , 1 ) =>This Data is 'ASC Only'
+( 1 , 0 ) =>Date
+( 1 , 1 ) =>1964/3/23
+( 2 , 0 ) =>INTEGER
+( 2 , 1 ) =>12345
+( 3 , 0 ) =>Float
+( 3 , 1 ) =>1.29
+( 4 , 0 ) =>Double
+( 4 , 1 ) =>1234567.89012345
+( 5 , 0 ) =>Formula
+( 5 , 1 ) =>1246912.89012345
+( 6 , 0 ) =>Data
+( 6 , 1 ) =>1234567.89
+( 7 , 0 ) =>BIG INTEGER
+( 7 , 1 ) =>123456789012
+--------- SHEET:´Á»ú̾
+( 0 , 0 ) =>ASC
+( 0 , 1 ) =>This Data is 'ASC Only'
+( 1 , 0 ) =>´Á»ú¤âÆþ¤ë
+( 1 , 1 ) =>´Á»ú¤Î¥Ç¡¼¥¿
+( 2 , 0 ) =>Date
+( 2 , 1 ) =>1964/3/23
+( 3 , 0 ) =>INTEGER
+( 3 , 1 ) =>12345
+( 4 , 0 ) =>Float
+( 4 , 1 ) =>1.29
+( 5 , 0 ) =>Double
+( 5 , 1 ) =>1234567.89012345
+( 6 , 0 ) =>Formula
+( 6 , 1 ) =>1246912.89012345
+( 7 , 0 ) =>½ñ¼°¤Ë´Á»ú:Float
+=========================================
+FILE :Excel/Test95J.xls
+COUNT :2
+AUTHOR:kawait
+--------- SHEET:Sheet1-ASC
+( 0 , 0 ) =>ASC
+( 0 , 1 ) =>This Data is 'ASC Only'
+( 1 , 0 ) =>Date
+( 1 , 1 ) =>1964/3/23
+( 2 , 0 ) =>INTEGER
+( 2 , 1 ) =>12345
+( 3 , 0 ) =>Float
+( 3 , 1 ) =>1.29
+( 4 , 0 ) =>Double
+( 4 , 1 ) =>1234567.89012345
+( 5 , 0 ) =>Formula
+( 5 , 1 ) =>1246912.89012345
+--------- SHEET:´Á»ú̾
+( 0 , 0 ) =>ASC
+( 0 , 1 ) =>This Data is 'ASC Only'
+( 1 , 0 ) =>´Á»ú¤âÆþ¤ë
+( 1 , 1 ) =>´Á»ú¤Î¥Ç¡¼¥¿
+( 2 , 0 ) =>Date
+( 2 , 1 ) =>1964/3/23
+( 3 , 0 ) =>INTEGER
+( 3 , 1 ) =>12345
+( 4 , 0 ) =>Float
+( 4 , 1 ) =>1.29
+( 5 , 0 ) =>Double
+( 5 , 1 ) =>1234567.89012345
+( 6 , 0 ) =>Formula
+( 6 , 1 ) =>1246912.89012345
+( 7 , 0 ) =>½ñ¼°¤Ë´Á»ú:Float
+=========================================
+FILE :Excel/Test1904.xls
+COUNT :1
+AUTHOR:kawait
+--------- SHEET:Sheet1-ASC
+( 0 , 0 ) =>ASC
+( 0 , 1 ) =>This Data is 'ASC Only'
+( 1 , 0 ) =>Date
+( 1 , 1 ) =>1964/3/23
+( 2 , 0 ) =>INTEGER
+( 2 , 1 ) =>12345
+( 3 , 0 ) =>Float
+( 3 , 1 ) =>1.29
+( 4 , 0 ) =>Double
+( 4 , 1 ) =>1234567.89012345
+( 5 , 0 ) =>Formula
+( 5 , 1 ) =>1246912.89012345
+=========================================
+FILE :Excel/Test1904_95.xls
+COUNT :1
+AUTHOR:kawait
+--------- SHEET:Sheet1-ASC
+( 0 , 0 ) =>ASC
+( 0 , 1 ) =>This Data is 'ASC Only'
+( 1 , 0 ) =>Date
+( 1 , 1 ) =>1964/3/23
+( 2 , 0 ) =>INTEGER
+( 2 , 1 ) =>12345
+( 3 , 0 ) =>Float
+( 3 , 1 ) =>1.29
+( 4 , 0 ) =>Double
+( 4 , 1 ) =>1234567.89012345
+( 5 , 0 ) =>Formula
+( 5 , 1 ) =>1246912.89012345
+=========================================
+FILE :Excel/AuthorK.xls
+COUNT :3
+AUTHOR:kawait
+--------- SHEET:Sheet1
+( 0 , 0 ) =>´Á»ú̾¤Î¥Æ¥¹¥È
+( 0 , 1 ) =>´Á»ú¥Ç¡¼¥¿¤Ï¤É¤¦¤Ê¤ë¡©
+--------- SHEET:Sheet2
+--------- SHEET:Sheet3
+=========================================
+FILE :Excel/AuthorK95.xls
+COUNT :3
+AUTHOR:kawait
+--------- SHEET:Sheet1
+( 0 , 0 ) =>´Á»ú̾¤Î¥Æ¥¹¥È
+( 0 , 1 ) =>´Á»ú¥Ç¡¼¥¿¤Ï¤É¤¦¤Ê¤ë¡©
+--------- SHEET:Sheet2
+--------- SHEET:Sheet3
Added: packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/sample.pl
===================================================================
--- packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/sample.pl 2005-01-25 02:10:47 UTC (rev 660)
+++ packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/sample.pl 2005-01-25 15:06:55 UTC (rev 661)
@@ -0,0 +1,44 @@
+use lib qw(../);
+use strict;
+use Spreadsheet::ParseExcel;
+my $oExcel = new Spreadsheet::ParseExcel;
+sub PrnBook($);
+
+#1.1 Normal Excel97
+my $oBook = $oExcel->Parse('Excel/Test97.xls');
+PrnBook($oBook);
+
+#1.2 Normal Excel95
+$oBook = $oExcel->Parse('Excel/Test95.xls');
+PrnBook($oBook);
+
+#1.3 Year 1904 Base (Excel97)
+$oBook = $oExcel->Parse('Excel/Test1904.xls');
+PrnBook($oBook);
+
+#1.4 Year 1904 Base (Excel95)
+$oBook = $oExcel->Parse('Excel/Test1904_95.xls');
+PrnBook($oBook);
+
+sub PrnBook($)
+{
+ my($oBook) = @_;
+ my($iR, $iC, $oWkS, $oWkC);
+
+ print "=========================================\n";
+ print "FILE :", $oBook->{File} , "\n";
+ print "COUNT :", $oBook->{SheetCount} , "\n";
+ print "AUTHOR:", $oBook->{Author} , "\n";
+ for(my $iSheet=0; $iSheet < $oBook->{SheetCount} ; $iSheet++) {
+ $oWkS = $oBook->{Worksheet}[$iSheet];
+ print "--------- SHEET:", $oWkS->{Name}, "\n";
+ for(my $iR = $oWkS->{MinRow} ;
+ defined $oWkS->{MaxRow} && $iR <= $oWkS->{MaxRow} ; $iR++) {
+ for(my $iC = $oWkS->{MinCol} ;
+ defined $oWkS->{MaxCol} && $iC <= $oWkS->{MaxCol} ; $iC++) {
+ $oWkC = $oWkS->{Cells}[$iR][$iC];
+ print "( $iR , $iC ) =>", $oWkC->Value, "\n" if($oWkC);
+ }
+ }
+ }
+}
Added: packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/sampleOEM.pl
===================================================================
--- packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/sampleOEM.pl 2005-01-25 02:10:47 UTC (rev 660)
+++ packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/sampleOEM.pl 2005-01-25 15:06:55 UTC (rev 661)
@@ -0,0 +1,35 @@
+use strict;
+use Spreadsheet::ParseExcel;
+use Spreadsheet::ParseExcel::FmtJapan;
+use Spreadsheet::ParseExcel::FmtJapan2;
+sub PrnAll($);
+
+my $oExcel = new Spreadsheet::ParseExcel;
+my $oFmtJ = Spreadsheet::ParseExcel::FmtJapan->new(Code => 'euc');
+my $oFmtJ2 = Spreadsheet::ParseExcel::FmtJapan2->new(Code => 'euc');
+my $oBook = $oExcel->Parse('Excel/oem.xls', $oFmtJ);
+PrnAll($oBook);
+$oBook = $oExcel->Parse('Excel/oem.xls', $oFmtJ2);
+PrnAll($oBook);
+
+sub PrnAll($) {
+ my ($oBook) = @_;
+ my($iR, $iC, $oWkS, $oWkC);
+ print "=========================================\n";
+ print "FILE :", $oBook->{File} , "\n";
+ print "COUNT :", $oBook->{SheetCount} , "\n";
+ print "AUTHOR:", $oBook->{Author} , "\n";
+ for(my $iSheet=0; $iSheet < $oBook->{SheetCount} ; $iSheet++) {
+ $oWkS = $oBook->{Worksheet}[$iSheet];
+ print "--------- SHEET:", $oWkS->{Name}, "\n";
+ for(my $iR = $oWkS->{MinRow} ;
+ defined $oWkS->{MaxRow} && $iR <= $oWkS->{MaxRow} ; $iR++) {
+ print "ROW HEIGHT:", $oWkS->{RowHeight}[$iR], "\n";
+ for(my $iC = $oWkS->{MinCol} ;
+ defined $oWkS->{MaxCol} && $iC <= $oWkS->{MaxCol} ; $iC++) {
+ $oWkC = $oWkS->{Cells}[$iR][$iC];
+ print "( $iR , $iC ) =>", $oWkC->Value, "\n" if($oWkC);
+ }
+ }
+ }
+}
Added: packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/sample_j.pl
===================================================================
--- packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/sample_j.pl 2005-01-25 02:10:47 UTC (rev 660)
+++ packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/sample_j.pl 2005-01-25 15:06:55 UTC (rev 661)
@@ -0,0 +1,61 @@
+use strict;
+use Spreadsheet::ParseExcel;
+use Spreadsheet::ParseExcel::FmtJapan;
+sub PrnBook($);
+#0. Check ARGV
+if(($#ARGV< 0) or
+ (grep($ARGV[0] eq $_, ('euc', 'sjis', 'jis')) <= 0)) {
+ print "USAGE: \n > perl ", $0, " euc|sjis|jis\n";
+ exit;
+}
+my $oExcel = new Spreadsheet::ParseExcel;
+
+#1. Make Formatter
+my $oFmtJ = Spreadsheet::ParseExcel::FmtJapan->new(Code => $ARGV[0]);
+
+#2.1 Test97
+my $oBook = $oExcel->Parse('Excel/Test97J.xls', $oFmtJ);
+PrnBook($oBook);
+
+#2.2 Test95
+$oBook = $oExcel->Parse('Excel/Test95J.xls', $oFmtJ);
+PrnBook($oBook);
+
+#2.3 1904 (1904 - 97)
+$oBook = $oExcel->Parse('Excel/Test1904.xls', $oFmtJ);
+PrnBook($oBook);
+
+#2.4 1904 (1904 - 95)
+$oBook = $oExcel->Parse('Excel/Test1904_95.xls', $oFmtJ);
+PrnBook($oBook);
+
+#2.5 1904 (1904 - 95)
+$oBook = $oExcel->Parse('Excel/AuthorK.xls', $oFmtJ);
+PrnBook($oBook);
+
+#2.6 1904 (1904 - 95)
+$oBook = $oExcel->Parse('Excel/AuthorK95.xls', $oFmtJ);
+PrnBook($oBook);
+
+sub PrnBook($)
+{
+ my($oBook) = @_;
+ my($iR, $iC, $oWkS, $oWkC);
+
+ print "=========================================\n";
+ print "FILE :", $oBook->{File} , "\n";
+ print "COUNT :", $oBook->{SheetCount} , "\n";
+ print "AUTHOR:", $oBook->{Author} , "\n";
+ for(my $iSheet=0; $iSheet < $oBook->{SheetCount} ; $iSheet++) {
+ $oWkS = $oBook->{Worksheet}[$iSheet];
+ print "--------- SHEET:", $oWkS->{Name}, "\n";
+ for(my $iR = $oWkS->{MinRow} ;
+ defined $oWkS->{MaxRow} && $iR <= $oWkS->{MaxRow} ; $iR++) {
+ for(my $iC = $oWkS->{MinCol} ;
+ defined $oWkS->{MaxCol} && $iC <= $oWkS->{MaxCol} ; $iC++) {
+ $oWkC = $oWkS->{Cells}[$iR][$iC];
+ print "( $iR , $iC ) =>", $oWkC->Value, "\n" if($oWkC);
+ }
+ }
+ }
+}
Added: packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/smpFile.pl
===================================================================
--- packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/smpFile.pl 2005-01-25 02:10:47 UTC (rev 660)
+++ packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/smpFile.pl 2005-01-25 15:06:55 UTC (rev 661)
@@ -0,0 +1,37 @@
+use lib qw(../);
+use strict;
+use Spreadsheet::ParseExcel;
+my $oExcel = new Spreadsheet::ParseExcel;
+sub PrnBook($);
+
+#1.2 Normal Excel97
+open(IN, 'Excel/Test97.xls');
+binmode IN;
+my $sWk;
+read(IN, $sWk, 2000000);
+close IN;
+my $oBook1 = $oExcel->Parse([$sWk]);
+PrnBook($oBook1);
+
+sub PrnBook($)
+{
+ my($oBook) = @_;
+ my($iR, $iC, $oWkS, $oWkC);
+
+ print "=========================================\n";
+ print "FILE :", $oBook->{File} , "\n";
+ print "COUNT :", $oBook->{SheetCount} , "\n";
+ print "AUTHOR:", $oBook->{Author} , "\n";
+ for(my $iSheet=0; $iSheet < $oBook->{SheetCount} ; $iSheet++) {
+ $oWkS = $oBook->{Worksheet}[$iSheet];
+ print "--------- SHEET:", $oWkS->{Name}, "\n";
+ for(my $iR = $oWkS->{MinRow} ;
+ defined $oWkS->{MaxRow} && $iR <= $oWkS->{MaxRow} ; $iR++) {
+ for(my $iC = $oWkS->{MinCol} ;
+ defined $oWkS->{MaxCol} && $iC <= $oWkS->{MaxCol} ; $iC++) {
+ $oWkC = $oWkS->{Cells}[$iR][$iC];
+ print "( $iR , $iC ) =>", $oWkC->Value, "\n" if($oWkC);
+ }
+ }
+ }
+}
Added: packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/xls2csv.pl
===================================================================
--- packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/xls2csv.pl 2005-01-25 02:10:47 UTC (rev 660)
+++ packages/libspreadsheet-parseexcel-perl/branches/upstream/current/sample/xls2csv.pl 2005-01-25 15:06:55 UTC (rev 661)
@@ -0,0 +1,55 @@
+#!/usr/bin/perl -w
+# script to extract a range of colums/rows from an excel spreadsheet
+# and present it as a csv, there is also the option to rotate the
+# output,
+#
+# (c) kevin Mulholland 2002, kevin at moodfarm.demon.co.uk
+# this code is released under the Perl Artistic License
+use strict ;
+use Spreadsheet::ParseExcel;
+use Spreadsheet::ParseExcel::Utility qw(xls2csv);
+
+if(!(defined $ARGV[0])) {
+ usage( "Bad Args") ;
+ exit;
+}
+
+my $rotate = 0 ;
+my $filename = $ARGV[0] ;
+my $coords = $ARGV[1] ;
+
+$rotate = 1 if( defined $ARGV[2] && $ARGV[2] eq "-rotate") ;
+
+if( !$coords) {
+ usage( "No co-ordinates defined") ;
+ exit ;
+}
+
+if( ! -f $filename) {
+ usage( "File $filename does not exist") ;
+ exit ;
+}
+
+printf xls2csv( $filename, $coords, $rotate) ;
+
+# -----------------------------------------------------------------------------
+### error
+# writes a message to STDERR
+#
+sub error {
+ printf STDERR shift ;
+}
+# -----------------------------------------------------------------------------
+### usage
+# this decribes how the program as a whole is to be used
+#
+sub usage {
+ my $errmsg = shift ;
+
+ error( "\n" . $errmsg . "\n") if( $errmsg) ;
+
+ error( "
+Usage: $0 filename sheet-colrow:colrow [-rotate]
+ eg: $0 filename.xls 1-A1:B12
+ $0 filename.xls A1:M1 -rotate\n\n") ;
+}
Added: packages/libspreadsheet-parseexcel-perl/branches/upstream/current/test.pl
===================================================================
--- packages/libspreadsheet-parseexcel-perl/branches/upstream/current/test.pl 2005-01-25 02:10:47 UTC (rev 660)
+++ packages/libspreadsheet-parseexcel-perl/branches/upstream/current/test.pl 2005-01-25 15:06:55 UTC (rev 661)
@@ -0,0 +1,20 @@
+# Before `make install' is performed this script should be runnable with
+# `make test'. After `make install' it should work as `perl test.pl'
+
+######################### We start with some black magic to print on failure.
+
+# Change 1..1 below to 1..last_test_to_print .
+# (It may become useful if the test is moved to ./t subdirectory.)
+
+BEGIN { $| = 1; print "1..1\n"; }
+END {print "not ok 1\n" unless $loaded;}
+use Spreadsheet::ParseExcel;
+$loaded = 1;
+print "ok 1\n";
+
+######################### End of black magic.
+
+# Insert your test code below (better if it prints "ok 13"
+# (correspondingly "not ok 13") depending on the success of chunk 13
+# of the test code):
+
More information about the Pkg-perl-cvs-commits
mailing list