2014-02-07 48 views
1

我有以下腳本,隱蔽XLS到csv確定,但它並不在我的XLS轉換空白單元格爲空格的CSV文件:空白單元格不XLS轉換到csv用perl

#!/usr/bin/perl 
use strict; 
use Spreadsheet::ParseExcel; 

my $sourcename = shift @ARGV or die "invocation: $0 <source file>\n"; 
my $source_excel = new Spreadsheet::ParseExcel; 
my $source_book = $source_excel->Parse($sourcename) 
    or die "Could not open source Excel file $sourcename: $!"; 
my $storage_book; 

foreach my $source_sheet_number (0 .. $source_book->{SheetCount}-1) { 
my $source_sheet = $source_book->{Worksheet}[$source_sheet_number]; 

print "--------- SHEET:", $source_sheet->{Name}, "\n"; 
next unless defined $source_sheet->{MaxRow}; 
next unless $source_sheet->{MinRow} <= $source_sheet->{MaxRow}; 
next unless defined $source_sheet->{MaxCol}; 
next unless $source_sheet->{MinCol} <= $source_sheet->{MaxCol}; 

foreach my $row_index ($source_sheet->{MinRow} .. $source_sheet->{MaxRow}) { 
    foreach my $col_index ($source_sheet->{MinCol} .. $source_sheet->{MaxCol}) { 
    my $source_cell = $source_sheet->{Cells}[$row_index][$col_index]; 
    if ($source_cell) { 
    #print "($row_index , $col_index) =>", $source_cell->Value, "\t;"; 
    print $source_cell->Value, ";"; 
    } 
    } 
    print "\n"; 
} 
} 

示例Excel

ABC BCC DCC DES 
SDE  KOT FET 

其轉換爲

ABC;BCC;DCC;DES; 
SDE;KOT;FET; 

代替

ABC;BCC;DCC;DES; 
SDE;;KOT;FET; 

回答

3

如果你打算創建一個CSV文件,那麼請使用Text :: CSV,它會爲你節省很多頭痛的問題。

'if $ source'code does not match to for empty cells。

修復了代碼:

if (defined $source_cell) { 
    #print "($row_index , $col_index) =>", $source_cell->Value, "\t;"; 
    print $source_cell->Value, ";"; 
    } else { 
    print ';'; 
    } 
+0

感謝。那爲我的目的工作 – Drsin

+0

@ user3283307:你應該接受好的肛門。謝謝。 – user1126070

+0

@ user1126040。我做到了。再來一次。太感謝了。 – Drsin