Build an array of the maximum width for each column
my $len = length($value[$col]); $width[$col] = $len if $len > $width[$col];
and set the column widths at the end of the worksheet loop
for my $col ( $col_min .. $col_max ) { $worksheet1->set_column($col,$col,$width[$col]) }
#!/usr/bin/perl -w use strict; use Spreadsheet::ParseExcel; use Spreadsheet::WriteExcel; my $parser = Spreadsheet::ParseExcel->new(); my $workbook = $parser->parse('_status.xls'); if ( !defined $workbook ) { die $parser->error(), ".\n"; } my $workbook1 = Spreadsheet::WriteExcel->new('_Status_Report.xls'); my @color = qw(white green orange pink blue mageta silver); my @format; for my $i (1..@color){ $format[$i] = $workbook1->add_format(bg_color => $color[$i]); $format[$i]->set_text_wrap(); } for my $worksheet ( $workbook->worksheets() ) { my $worksheet1 = $workbook1->add_worksheet(); my ( $row_min, $row_max ) = $worksheet->row_range(); my ( $col_min, $col_max ) = $worksheet->col_range(); # set minimum column width my @width; $width[$_] = 10 for ($col_min .. $col_max); for my $row ( $row_min .. $row_max ) { my @value = (); my $fmt; # format for complete row # store row in array for my $col ( $col_min .. $col_max ) { my $cell = $worksheet->get_cell( $row, $col ); if (defined $cell) { $value[$col] = $cell->value() ; if ($value[$col] =~ m/Completed/i){ $fmt = $format[1] } elsif ($value[$col] =~ m/In Progress/i){ $fmt = $format[2] } elsif ($value[$col] =~ m/Planning/i) { $fmt = $format[3] } elsif ($value[$col] =~ m/On Hold/i) { $fmt = $format[4] } elsif ( $value[$col] =~ m/END OF/) { $fmt = $format[5] } elsif ( $value[$col] =~ m/Current Status/i) { $fmt = $format[6] } # determine max width for each column my $len = length($value[$col]); $width[$col] = $len if $len > $width[$col]; } } # write row for my $col ( $col_min .. $col_max ) { $worksheet1->write($row, $col, $value[$col],$fmt); } } # set column widths for my $col ( $col_min .. $col_max ) { $worksheet1->set_column($col,$col,$width[$col]) } }
In reply to Re^5: Perl script to fill the entire row of Excel file with color based on pattern match
by poj
in thread Perl script to fill the entire row of Excel file with color based on pattern match
by kshitij
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |