Задача такая:
на сай надо выложить данные которые хранятся в MS excel эти данные выкладываются автоматически
пробовал написать сценарий:
| Код | #!/usr/bin/perl
use Spreadsheet::ParseExcel; use Spreadsheet::ParseExcel::FmtUnicode; my $oExcel = new Spreadsheet::ParseExcel; my $oFmtR = Spreadsheet::ParseExcel::FmtUnicode->new(Unicode_Map => "CP1251"); my $oBook = $oExcel->Parse('Excel/dokladn.xls',$oFmtR); my($iR, $iC, $oWkS, $oWkC); for(my $iSheet=0; $iSheet < $oBook->{SheetCount} ; $iSheet++) { $oWkS = $oBook->{Worksheet}[$iSheet]; $merged_r = []; $merged_c = []; $not_print = []; foreach my $line (@{$oWkS->{'MergedArea'}}) { $r_s=$line->[0]; $c_s=$line->[1]; $r_e=$line->[2]; $c_e=$line->[3]; $i=1; foreach (1..100) { if($r_e > $r_s){ if ($r_s+$i > $r_e) { last; } } if ($c_e > $c_s) { if ($c_s+$i > $c_e) { last; } } $row_plus= $r_e > $r_s ? $r_s+$i : $r_s; $col_plus= $c_e > $c_s ? $c_s+$i : $c_s; push(@$not_print,[$row_plus,$col_plus]); undef($row_plus); undef($col_plus); $i++; } if ($r_e > $r_s) { push(@$merged_r,[$r_s,$c_s,($r_e-$r_s+1)]); } if ($c_e > $c_s) { push(@$merged_c,[$r_s,$c_s,($c_e-$c_s+1)]); }
}
$text .= qq~<table cellspacing="0" cellpadding="0" border="0">\n~; for(my $iR = $oWkS->{MinRow}; defined $oWkS->{MaxRow} && $iR <= $oWkS->{MaxRow} ; $iR++) { $text .= qq~<tr>\n~; for(my $iC = $oWkS->{MinCol}; defined $oWkS->{MaxCol} && $iC <= $oWkS->{MaxCol} ; $iC++) {
foreach my $retr (@$merged_r) { $rowspan = ' rowspan="'.$retr->[2].'"' if ($iR == $retr->[0] && $iC == $retr->[1]); } foreach my $retc (@$merged_c) { $colspan = ' colspan="'.$retc->[2].'"' if ($iR == $retc->[0] && $iC == $retc->[1]); } foreach my $retn (@$not_print) { $nou = 1 if ($iR == $retn->[0] && $iC == $retn->[1]); } unless (defined($nou)){ $oWkC = $oWkS->{Cells}[$iR][$iC];
if(defined($oWkC)){ my $oFont = $oWkC->{Format}->{Font}; $text .= qq~<td class="exel~.$iSheet.$iR.$iC.qq~"~.(defined($rowspan) ? $rowspan : '').(defined($colspan) ? $colspan : '').qq~>\n~; $css .= '.exel'.$iSheet.$iR.$iC.qq~{\n text-align: ~.($oWkC->{Format}->{AlignH} == 0 ? 'Left': $oWkC->{Format}->{AlignH} == 1 ? 'Left': $oWkC->{Format}->{AlignH} == 2 ? 'Center': $oWkC->{Format}->{AlignH} == 3 ? 'right':'left').qq~; vertical-align: ~.($oWkC->{Format}->{AlignV} == 0 ? 'top': $oWkC->{Format}->{AlignV} == 1 ? 'middle': $oWkC->{Format}->{AlignV} == 2 ? 'bottom': $oWkC->{Format}->{AlignV} == 3 ? 'bottom':'bottom').qq~; font-size: ~.$oFont->{Height}.qq~pt; ~.($oFont->{Italic} == 1 ? "font-style: italic;\n": '').($oFont->{Bold} == 1 ? "font-weight: bold;\n": '').qq~ color: #~.Spreadsheet::ParseExcel->ColorIdxToRGB($oFont->{Color}).qq~; background-color: #~.Spreadsheet::ParseExcel->ColorIdxToRGB($oWkC->{Format}->{Fill}->[1]).qq~; border-top: ~.$oWkC->{Format}->{BdrStyle}->[0].qq~px solid #000; border-right: ~.$oWkC->{Format}->{BdrStyle}->[1].qq~px solid #000; border-bottom: ~.$oWkC->{Format}->{BdrStyle}->[2].qq~px solid #000; border-left: ~.$oWkC->{Format}->{BdrStyle}->[3].qq~px solid #000; ~.($oWkC->{Format}->{Hidden} == 1 ? "display: none;\n": '').qq~}\n~; $text .= "".(defined($oWkC->Value)? $oWkC->Value: '')."\n"; # Formatted Value $text .= qq~</td>\n~; } else { $text .= qq~<td>\n</td>\n~; } } undef($nou); undef($colspan); undef($rowspan); } $text .= qq~</tr>\n~; } $text .= qq~</table>\n~;
} open (my $OUT,">big.thml"); print $OUT qq~<style media="screen" type="text/css">\n~.$css."</style>\n"; print $OUT $text; close($OUT);
|
получается но конечные файлы получаются большие
может ктонить подскажет в какой формат перегнать файлы чтобы можнобыло выкладывать на сайт просто выкладывать на сайт сами excel файлы немогу |