2013-10-10 127 views
0

我試圖掃描數百個文件夾,每個文件夾都包含一個excel文件。PHP在foreach循環中跳過未定義的偏移量?

這裏是簡化工作流程循環

  • 掃描文件夾
  • 獲得第一個文件夾的名字和運行低谷一些正則表達式(以獲得從名字的一些信息)
  • 打開文件夾並打開Excel裏面
  • 掃描文件excel文件的信息的(與PHPExcel)
  • 一切都保存到數據庫

好的,所以這一切都工作得很好,除非當我遇到一個損壞的Excel文件。

然後問題是PHPEXCEL庫不能讀取它,它通過「注意:未定義的偏移量:」並且這打破了我的循環。

所以這是我在尋找:辦法以某種方式跳過或東西的錯誤及注意事項,並繼續下一個文件夾和文件

有沒有辦法? 感謝您的幫助。

好了,所以這裏的foreach循環:

foreach ($inputFileName as $key => $fileName) { 
$objReader = PHPExcel_IOFactory::load($fileName); 

$activeSheet = $objReader->getActiveSheet()->toArray(null,false,true,false); 

echo "<pre>"; 
    echo $key; 
echo "</pre>"; 
} 
+1

這聽起來像是phpexcel庫中的一個bug。 – cmbuckley

+0

也許'try' /'catch'可以處理錯誤。 – Barmar

+0

@Barmar你不能注意到,只有例外。 –

回答

0

也許你可以使用該功能的error_reporting在腳本的開頭跳過聲明:

error_reporting(E_ERROR | E_WARNING | E_PARSE); 

,並將其設置回原始價值一旦你完成治療:

error_reporting(-1); //Report all errors 

你可以在這裏找到更多的信息在這裏:http://php.net/manual/fr/function.error-reporting.php

+0

像我告訴@Barmar我試過,但循環仍然停止,恕不另行通知 –

+0

@ Mr.Sam只是在腳本的頂部執行'error_reporing(0)',然後 – Yang

1

只是一個猜測:

foreach ($inputFileName as $key => $fileName) { 
    $objReader = PHPExcel_IOFactory::load($fileName); 

    if ($objReader) { 
     $activeSheet = $objReader->getActiveSheet()->toArray(null,false,true,false); 

     echo "<pre>"; 
      echo $key; 
     echo "</pre>"; 
    } 
} 

這是非常常見的函數返回false當他們失敗。

+0

不幸這沒有奏效,但它有點給了我一個方向,我不想這樣做,但現在我認爲我唯一的解決方案是'hack' PHPEXCEL庫,給出一些結果,如果它無法打開一個excel –