NAME
Spreadsheet::ExcelHashTable - Converts Excel Table to Perl Hash and vicerversa
VERSION
Version 0.02
SYNOPSIS
Spreadsheet::ExcelHashTable reads tables from Excel and converts them to Perl Data Structure and writes Perl Hash to a Excel Sheet
Motivation
This Utility is more useful for converting randomly organized Excel Tables to Perl hash. In my case it more useful in converting
this Excel Information to a EDA(Electronic Design Automation) tool scripts, using Template Tool Kit.
ExcelHashTable
Excel Table
In this context Excel Table is the following. In the below example "Employee is a table".
<Employee.xls> (ExcelHashTable cannot understand Merged Cells)
----------------------------------------------------------------
| Employee | ID | Designation | Department
----------------------------------------------------------------
| Mike | 1001 | Software Analyst | BU1
----------------------------------------------------------------
| Srinik | 1002 | Analyst | BU2
----------------------------------------------------------------
As shown above in the above Excel sheet, "Employee" is a table. So the complete table could be parsed in the following way
my $excel_table = Spreadsheet::ExcelHashTable->new("Employee.xls");
$excel_table->parse_table("sheet1", "Employee") ;
my $excel_hash = $excel_table->get_table("Employee");
Structure of Hash Returned by get_table(<table_name>)
$excel_hash = { "Employee" => {
Mike => {
ID => "1001",
Designation => "Software Analyst"
Department => "BU1"
},
},
Srinik => { ....
}
}
Merging Excel Tables
This Module is also helpful in merging various Excel Tables in different work books and also across various Excel sheets. Below is a example which finds two Employee table from different excel sheets and create a Perl data structure/Hash.
my $excel_table = Spreadsheet::ExcelHashTable->new("Employee.xls");
$excel_table->parse_table("sheet1", "Employee") ;
$excel_table->parse_table("sheet2", "Employee") ;
$excel_table->parse_table("sheet3", "Employee") ;
my $excel_hash = $excel_table->get_table("Employee");
Below two lines dumps the Employee hash to a Excel Sheet
$excel_table->set_write_xls("Employee_new.xls");
$excel_table->write_excel( "sheet1", "Employee" );
Different Excel Tables
This module can parse different Excel Tables from various Excel WorkBook/Sheets. Below is the example shown
<Company.xls>
<BU Table> - <sheet1>
----------------------------------------
| BU | Employee_Name | Employee_Id
----------------------------------------
| BU1 | Mike | 1001
----------------------------------------
| BU2 | Srinik | 1002
----------------------------------------
<Employee Table> - sheet2
---------------------------------------------------------------
| Employee | ID | Designation | Department
---------------------------------------------------------------
| Mike | 1001 | Software Analyst | BU1
---------------------------------------------------------------
| Srinik | 1002 | Analyst | BU2
---------------------------------------------------------------
my $excel_table = Spreadsheet::ExcelHashTable->new("Company.xls");
$excel_table->parse_table("sheet1", "BU") ;
$excel_table->parse_table("sheet2", "Employee") ;
my $excel_hash = $excel_table->get_xl_tables(); # Returns complete set of tables
Hash Structure
$excel_hash = { "Employee" => {
Mike => {
ID => "1001",
Designation => "Software Analyst"
Department => "BU1"
},
},
Srinik => { ....
},
{ "BU" => {
BU1 => {
Employee_Name => "Mike"
Employee_Id => "1001"
}
}
}
excel_checker(<sheet>, <table>)
Returns 1 If the Excel Table has errors. Excel Table need to have certain format, so that any excel can be parsed.
error()
Displays Errors meesage caugh using excel_checker() function. $excel_table->error();
get_table(<table>)
Return only the particular <table> hash.
get_xl_tables()
Return the complete hash, self->{excel_hash}
set_read_xls(<xl_file>)
Set the Excel File through this function.
Example: You can set excel while declaring the object like the one shown below
my $excel_table = Spreadsheet::ExcelHashTable->new("Company.xls");
or you if you want parse a different table from another xl sheet, change the XL using
excel_table->set_read_xls("Project.xls");
set_write_xls(<xl_file>)
set the excel file for writing. You cannot use the same file which you are reading.
Example: excel_table->set_write_xls("Project.xls"); excel_table->write_excel("sheet1", "Project"); excel_table->write_excel("sheet2", "Employee");
write_excel(<sheet>, <table>)
Writes Hash table back to Excel
excel_hash
Access excel_hash from $excel_table object, you can modify/manupulate the excel_hash parsed from the excel sheet
my $excel_table = Spreadsheet::ExcelHashTable->new("Company.xls");
$excel_table->parse_table("sheet1", "BU") ;
$excel_table->parse_table("sheet2", "Employee") ;
$excel_table->{excel_hash} = .............
You then use write_excel to write it to Excel or get_table to return the hash.
Limitations/Rules
Follow rules in writing Excel sheet, so ExcelHashTable can parse the table
- Currently there cannot be any Cells Left emptly for a table, if any empty cell found the parsing stops. In the below example
"Paul" is not parsed.
----------------------------------------------------------------------
| Employee | ID | Designation | Department
----------------------------------------------------------------------
| Mike | 1001 | Software Analyst | BU1
----------------------------------------------------------------------
| Srinik | 1002 | Analyst | BU2
----------------------------------------------------------------------
| | | |
----------------------------------------------------------------------
| Paul | 1003 | Engineer | BU2
----------------------------------------------------------------------
- Dont Merge any cells. Currenty L</excel_checker> cannot check this now. Will put this as a Part of next release
- xlsx format is not yet supported or havent been tested
AUTHOR
Srinik, <srinik.perl@gmail.com>
BUGS
Please report any bugs or feature requests to bug-spreadsheet-excelhashtable at rt.cpan.org
, or through the web interface at http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Spreadsheet-ExcelHashTable. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.
SUPPORT
You can find documentation for this module with the perldoc command.
perldoc Spreadsheet::ExcelHashTable
You can also look for information at:
RT: CPAN's request tracker (report bugs here)
http://rt.cpan.org/NoAuth/Bugs.html?Dist=Spreadsheet-ExcelHashTable
AnnoCPAN: Annotated CPAN documentation
CPAN Ratings
Search CPAN
LICENSE AND COPYRIGHT
Copyright 2011 Srinik.
This program is free software; you can redistribute it and/or modify it under the terms of either: the GNU General Public License as published by the Free Software Foundation; or the Artistic License.
See http://dev.perl.org/licenses/ for more information.