in reply to Re^4: Perl script to fill the entire row of Excel file with color based on pattern match
in thread Perl script to fill the entire row of Excel file with color based on pattern match
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]) } }
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^6: Perl script to fill the entire row of Excel file with color based on pattern match
by kshitij (Sexton) on Aug 31, 2018 at 04:17 UTC | |
by kshitij (Sexton) on Aug 31, 2018 at 09:19 UTC | |
by kshitij (Sexton) on Aug 31, 2018 at 13:13 UTC | |
by poj (Abbot) on Aug 31, 2018 at 18:11 UTC | |
by kshitij (Sexton) on Sep 01, 2018 at 04:44 UTC |