2016-05-20 5 views
0

メール添付ファイルから.xlsと.xlsxファイルを読み込むスクリプトを作成しています。私はスクリプトを識別メソッドを使用してファイル拡張子に基づいて読者間で切り替えるようにしようとしています。xlsとxlsxの間のPHPExcelスイッチ

$strSheetNameResult = 'QA Result'; 
$strSheetNameComments = 'QA Comments'; 

foreach($aPaths as $strPath) { 
    try { 
     $strFileType = PHPExcel_IOFactory::identify($strPath); 
     echo $strFileType; 

     $oReader = PHPExcel_IOFactory::createReader($strFileType); 

     $oReader->setLoadSheetsOnly($strSheetNameResult); 

     $oSheetData = $oReader->load($strPath)->getActiveSheet(); 

.XLSは、すぐにそれが右のリーダーを使用していないの.xlsxファイルを検出し、私のエラー与えるので、うまく動作しますが、: `致命的なエラー:

Call to a member function getCell() on a non-object in C:\xampp\htdocs\cronjob\Test.php on line 37`

ライン37を:

$aSheetData['strProjectName'] = $oSheetData->getCell('B4')->getValue(); 

このエラーは、正しいリーダーを使用していないために発生したと考えています。

$aPaths

Array(
    [0] => C:\xampp\tmp\105943-632345.xls 
    [1] => C:\xampp\tmp\112047-634744.xlsx 
    [2] => C:\xampp\tmp\112069-634917.xls 
    [3] => C:\xampp\tmp\113840-634955.xls 
    [4] => C:\xampp\tmp\115760-635374.xlsx 
    [5] => C:\xampp\tmp\120294-637780.xls 
    [6] => C:\xampp\tmp\120801-638144.xls 
    [7] => C:\xampp\tmp\121098-638118.xls 
    [8] => C:\xampp\tmp\124831-641137.xlsx 
    [9] => C:\xampp\tmp\127680-642962.xls 
    [10] => C:\xampp\tmp\127689-642665.xls 
    [11] => C:\xampp\tmp\127692-642784.xls 
    [12] => C:\xampp\tmp\127700-643048.xls 
    [13] => C:\xampp\tmp\127708-643096.xls 
    [14] => C:\xampp\tmp\128771-642241.xls 
    [15] => C:\xampp\tmp\129082-647219.xls 
    [16] => C:\xampp\tmp\129629-647241.xls 
    [17] => C:\xampp\tmp\134488-647334.xls 
    [18] => C:\xampp\tmp\134500-646313.xls 
    [19] => C:\xampp\tmp\134508-644581.xls 
    [20] => C:\xampp\tmp\134511-646521.xls 
    [21] => C:\xampp\tmp\134512-646136.xls 
    [22] => C:\xampp\tmp\134561-650010.xls 

誰もが、これは機能しない理由のアイデア、または読者の間で切り替えるにはさまざまな方法がありますか?

+0

'$ oSheetData = $ oReader-> load($ strPath) - > getActiveSheet();'のような呼び出しを、コードの別々の行に分けてください。エラー処理を追加する。各ファイルの 'identify()'によって実際に返されたReaderの内容を確認してください(表示されている内容はわかりませんが) –

+0

基本的には、コードがうまくいくはずです:どのような方法でも問題を診断するための情報を実際に提供していない –

+0

迅速な対応をありがとう。私はファイルを再チェックし、それがxlsxファイルである間にxlsファイルとして識別されました。私はファイルを削除し、それは今完璧に動作します! –

答えて

0

。私はファイルを削除し、それは今完璧に動作します!

+0

そのため、ファイル拡張子を信頼する必要はありません。より一般的には、xls拡張子を持つcsvまたはhtmlを検索します –

0

あなたが試すことができます:XLSファイルとして識別が、XLSXファイルだっリストで破損したファイルがあった

 


    $file_types = explode(".", 'C:\xampp\tmp\105943-632345.xls'); 
    $file_type = strtolower($file_types [count($file_types) - 1]); 

    if($file_type=='xls') { 
     $objReader = PHPExcel_IOFactory::createReader('Excel5'); 
    }elseif($file_type=='xlsx'){ 
     $objReader = PHPExcel_IOFactory::createReader('Excel2007'); 
    }else{ 
     echo 'file type error!'; 
     exit; 
    } 

 
+0

推奨しません....私は常に、ファイルの実際の内容を見るだけでなく、単に拡張子ではなく、拡張子が実際のフォーマットと一致しないので、 'identify()'メソッドを使用するようアドバイスします。 ...それは正確に 'identify()'メソッドが公開された理由です。 –

+0

あなたの提案に感謝します。私はそれを試みます。 – dongdong

関連する問題