2010-07-09 12 views
5

Używam Spreadsheet::ParseExcel do wyświetlania zawartości arkusza kalkulacyjnego. Widziałem kilka przykładów, jak zrzucić cały arkusz kalkulacyjny. Naprawdę chciałbym zobaczyć jak korzystać z tego skryptu bardziej selektywnie.Potrzebujesz więcej przykładów na temat korzystania z arkusza kalkulacyjnego :: ParseExcel

Poniższy przykład z firmy IBM zasadniczo zrzuca zawartość wszystkich komórek z danymi.

#!/usr/bin/perl -w 

use strict; 
use Spreadsheet::ParseExcel; 

my $oExcel = new Spreadsheet::ParseExcel; 

die "You must provide a filename to $0 to be parsed as an Excel file" unless @ARGV; 

my $oBook = $oExcel->Parse($ARGV[0]); 
my($iR, $iC, $oWkS, $oWkC); 
print "FILE :", $oBook->{File} , "\n"; 
print "COUNT :", $oBook->{SheetCount} , "\n"; 

print "AUTHOR:", $oBook->{Author} , "\n" 
if defined $oBook->{Author}; 

for(my $iSheet=0; $iSheet < $oBook->{SheetCount} ; $iSheet++) 
{ 
$oWkS = $oBook->{Worksheet}[$iSheet]; 
print "--------- SHEET:", $oWkS->{Name}, "\n"; 
for(my $iR = $oWkS->{MinRow} ; 
    defined $oWkS->{MaxRow} && $iR <= $oWkS->{MaxRow} ; 
    $iR++) 
{ 
    for(my $iC = $oWkS->{MinCol} ; 
     defined $oWkS->{MaxCol} && $iC <= $oWkS->{MaxCol} ; 
     $iC++) 
    { 
    $oWkC = $oWkS->{Cells}[$iR][$iC]; 
    print "($iR , $iC) =>", $oWkC->Value, "\n" if($oWkC); 
    } 
} 
} 

Czy ktoś może podać przykład, w jaki sposób mogę określić, jakie działanie należy podjąć dla określonej kolumny dla każdego wiersza?

Na przykład mam arkusz kalkulacyjny z 7 kolumnami i n wierszami. Chcę sformatować dane w każdej z kolumn w określony sposób. Być może chcę wziąć kolumnę 6 dla każdego wiersza i dołączyć trochę tekstu na końcu ciągu zapisanego w komórce. Jak to się stanie?

Odpowiedz

8

Aby zmodyfikować plik Excel, bardzo przydatny jest moduł Spreadsheet::ParseExcel::SaveParser. Umożliwia odczytanie pliku, wprowadzenie modyfikacji, a następnie zapisanie zmodyfikowanej zawartości do nowego pliku. Oto prosty przykład:

use strict; 
use warnings; 

use Spreadsheet::ParseExcel; 
use Spreadsheet::ParseExcel::SaveParser; 

my $excel_file_name = $ARGV[0]; 
my $parser   = Spreadsheet::ParseExcel::SaveParser->new(); 
my $workbook_orig = $parser->Parse($excel_file_name); 

# We will edit column 7 of the first worksheet. 
my $worksheet = $workbook_orig->worksheet(0); 
my $EDIT_COL = 6; 

my ($row_min, $row_max) = $worksheet->row_range(); 
for my $r ($row_min .. $row_max){ 
    my $cell = $worksheet->get_cell($r, $EDIT_COL); 
    unless (defined $cell){ 
     next; # Modify as needed to handle blank cells. 
    } 
    my $val = $cell->value . '_append_text'; 
    $worksheet->AddCell($r, $EDIT_COL, $val, $cell->{FormatNo}); 
} 

# You can save the modifications to the same file, but when 
# you are learning, it's safer to write to a different file. 
$excel_file_name =~ s/\.xls$/_new.xls/; 
$workbook_orig->SaveAs($excel_file_name); 

Przez wiele innych przykładów, zobacz doskonałą dokumentację:

+2

Jestem opiekunem arkusza kalkulacyjnego :: ParseExcel i uważam, że jest to miły, jasny przykład. ++ – jmcnamara

+0

Wow, fantastyczny przykład. Dziękuję bardzo! I dziękuję za wszystkie twoje uwagi i za takie niesamowite narzędzia! –

+0

Mam następujące: Nie można wywołać metody "value" dla niezdefiniowanej wartości w wierszu ./excel-test-new wiersz 19. –

2

formatowanie danych w każdej z kolumn w pewien sposób, można użyć kombinacji Spreadsheet::ParseExcel i Spreadsheet::WriteExcel modułów jak

Utwórz nowy excel przez moduł Spreadsheet::WriteExcel i dodać arkusz w it.Then Przetwarza istniejącą Excel i pisać zawartość do nowego programu Excel z formowaniem.

Oto przykład próbka:

use strict; 
use Spreadsheet::ParseExcel; 
use Spreadsheet::WriteExcel; 

die "You must provide a filename to $0 to be parsed as an Excel file" unless @ARGV; 

my $oBook = $oExcel->Parse($ARGV[0]); 
my($iR, $iC, $oWkS, $oWkC); 
my $workbook = Spreadsheet::WriteExcel->new('/root/Desktop/test_simple.xls'); 
my $worksheet = $workbook->add_worksheet(); 
$worksheet->set_column('A:A', 50); 
my $format = $workbook->add_format(); 
      $format->set_size(10); 
      $format->set_bold(); 
      $format->set_color('black'); 
      $format->set_font('Verdana'); 
      $format->set_text_wrap(); 
for(my $iSheet=0; $iSheet < $oBook->{SheetCount} ; $iSheet++) 
     { 
        $oWkS = $oBook->{Worksheet}[$iSheet]; 
      for(my $iR = $oWkS->{MinRow} ;defined $oWkS->{MaxRow} && $iR <= $oWkS->{MaxRow} ;$iR++) 
      { 
       for(my $iC = $oWkS->{MinCol} ;defined $oWkS->{MaxCol} && $iC <= $oWkS->{MaxCol} ;$iC++) 
       { 
        $oWkC = $oWkS->{Cells}[$iR][$iC]; 
        $worksheet->write($iR , $iC, $oWkC->Value, $format) if($oWkC); #writing a new excel from existing excel 
       } 
      } 
     } 

Po napisaniu nowego excel z istniejącego programu Excel, można użyć API z Spreadsheet::WriteExcel dołączyć dane w it.It rozwiąże problemy jak

  1. Najpierw zachowa istniejący plik Excel.
  2. możesz dokonać formowania w nowy plik Excela bez modyfikowania oryginalnego pliku Excel.
+0

Czy wiesz, jak poradzić sobie z komórkami scalania tutaj? – user1837967

Powiązane problemy