2011-12-16 57 views
6

我正在使用PHPExcel將xls文件加載到mysql數據庫中。除了一件事以外,一切工作都很好:PHPExcel讀取工作表中的所有行,甚至空白的行,例如,如果我的xls有100行,讀取器一直循環到行#3359(我想這是空白工作表的默認行數)。

什麼讓讀者計算甚至空白行? 這是我的代碼:

$objPHPExcel = PHPExcel_IOFactory::load($path); 
$objWorksheet = $objPHPExcel->setActiveSheetIndex(0); 

    $highestRow = $objWorksheet->getHighestRow(); 
    $highestColumn = $objWorksheet->getHighestColumn(); 
    $highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn); 
    $nrColumns = ord($highestColumn) - 64; 

    $rowsadded=0; 
    $begin_row=5; // 1st line of data in excel file 
    for ($row = $begin_row; $row <= $highestRow; ++ $row) { 
     $val=array(); 
     for ($col=0; $col < $highestColumnIndex; $col++) { 
      $cell = $objWorksheet->getCellByColumnAndRow($col, $row); 
      $val[] = $cell->getValue(); 
     } 

     if ($val[0]<>'' && $val[1]<>'') { //check that row contains data before inserting 

      $rowsadded++; 
      $sql1 = sprintf("INSERT INTO aitisi (name_u, onoma_u, asf_gr, code, compid, im_egr, im_exp, symb, programa, cost, showcost, omadiko, ar_tayt, afm, dieyth, poli, til_st, til_kin, ep_te1, on_te1, ep_te2, on_te2, ep_te3, on_te3, ep_te4, on_te4, name_us, onoma_us) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)", 
        GetSQLValueString($val[0], "text"), 
        GetSQLValueString($val[1], "text"), 
             ... 
        GetSQLValueString($val[11], "text"), 
        GetSQLValueString($val[12], "text"), 
        GetSQLValueString($val[13], "text"), 
        GetSQLValueString($val[14], "text"), 
        GetSQLValueString($val[15], "text"), 
        GetSQLValueString($val[16], "text"), 
        GetSQLValueString($val[17], "text")).';'; 
      $result = mysql_query($sql1) or die(mysql_error()); 
      $field_id = mysql_insert_id(); 
        } 
+0

在讀取文件之前 - 您是否從中過濾/刪除行? – matino 2011-12-16 07:54:27

+0

不,我只是上傳它。 – bikey77 2011-12-16 09:55:09

回答

1

3359是不是行的空白工作表的默認數量....這意味着,誰創建的工作表實際上使用空行(可能在不經意間)創造了它。讀者不關心一行是否空白,你已經告訴它閱讀工作表,它完全是這樣。

除非您確切知道在加載工作簿之前要讀取多少行(在這種情況下,您可以應用讀取過濾器來只讀這些行),否則需要測試每行以查看它是否爲空或者不在你的for循環中。

3

我用它來過濾掉空行。雖然我將它們打印在我的屏幕上進行編輯,但它可能對您有些用處:

foreach($worksheet->getRowIterator() as $row) { 
    $range = 'A'.$row->getRowIndex().':'.$highestColumn.$row->getRowIndex(); 
    $rowData = $worksheet->rangeToArray($range, NULL,TRUE,TRUE,TRUE); 
    $rowData = $rowData[$row->getRowIndex()]; 
    if(implode("",$rowData) != "") { 
     foreach($rowData as $column => $value){} 
    } 
}