#!c:\perl64\bin\perl.exe use strict; use warnings; use Spreadsheet::WriteExcel; use Spreadsheet::ParseExcel; my $result_file = "new.xls"; my $property_file = "properties.txt"; open (PROP, ">$property_file"); my $parser = Spreadsheet::ParseExcel->new(); my $workbook_parse = $parser->parse( 'old.xls' ); if ( !defined $workbook_parse ) { die $parser->error(), "Error processing workbook parse.\n"; } my $worksheet_parse = $workbook_parse->worksheet( 'Sheet1' ); my ( $col_min, $col_max ) = $worksheet_parse->col_range(); my ( $row_min, $row_max ) = $worksheet_parse->row_range(); my $workbook = Spreadsheet::WriteExcel->new( $result_file ); my $worksheet = $workbook->addworksheet( 'Sheet1' ); for my $row ( $row_min .. $row_max ) { for my $col ( $col_min .. $col_max ) { # Return the cell object at $row and $col my $cell = $worksheet_parse->get_cell($row,$col); next unless $cell; my $value = $cell->value(); my $format = $cell->get_format(); my $pattern = $format->{Fill}->[0]; my $color1 = $format->{Fill}->[1]; my $color2 = $format->{Fill}->[2]; my $wrap = $format->{Wrap}; my $font = $format->{Font}; my $fontcolor = $font->{Color}; my $bold = $font->{Bold}; my $alignH = $format->{AlignH}; my $alignV = $format->{AlignV}; ## Apply format to cell per previous findings in above logic my $updformat = $workbook->add_format( pattern => $pattern, fg_color => $color1, bg_color => $color2, align => 'left', valign => 'top', text_wrap => $wrap, border => 1, color => $fontcolor, bold => $bold ); $worksheet->write( $row, $col, $value, $updformat); ## Write out cell properties to our properties.txt document print PROP "\nRow, Col = ($row, $col)\n"; print PROP "Format is: $format\n"; print PROP "Pattern = $pattern\n"; print PROP "Value = $value\n"; print PROP "Fill = $pattern $color1 $color2\n"; print PROP "Wrap = $wrap\n"; print PROP "Font = $fontcolor\n"; print PROP "Bold = $bold\n"; print PROP "AlignH = $alignH\n"; print PROP "AlignV = $alignV\n"; } } ## Housekeeping $workbook->close() or die "Error closing file: $!"; close(PROP); exit;