PHPExcel を使用して Excel ファイルを読み取り、JSON エンコードされた配列を介してアクティブなワークシートの内容をページに送信する作業を行っています。特定の Excel ファイル (この場合は Cookie) を読み込むと、コードは期待どおりに動作します。このファイルは、以下に構築されたパスに存在します。ただし、ファイル名を変更し (Cookie にコメントを付け、testLoadBook.xls のコメントを外す)、他に何もしないと、PHP は正しい配列を返します (PHPExcel が適切に実行されたことを示します) が、500 エラーがスローされます。
<?php
spl_autoload_unregister(array('YiiBase','autoload'));
set_include_path(get_include_path() . PATH_SEPARATOR . Yii::app()->getBasePath().'/extensions/phpexcel/Classes/');
require_once('PHPExcel/IOFactory.php');
//$excelFile = dirname(__FILE__).'/'.'cookies.xls';
$excelFile = dirname(__FILE__).'/'.'testLoadBook.xls';
echo $excelFile;
//$objPHPExcel = PHPExcel_IOFactory::load($excelFile);
$excelReader = PHPExcel_IOFactory::createReader('Excel5'); //if file extension is .xls
//$excelReader->setReadDataOnly(true);
$excelObj = $excelReader->load($excelFile);
$response = array();
$worksheet = $excelObj->getActiveSheet();
$highestRow = $worksheet->getHighestRow(); // e.g. 10
$highestColumn = $worksheet->getHighestColumn(); // e.g 'F'
$highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn);
$nrColumns = ord($highestColumn) - 64;
$response[] = array($highestRow,$highestColumnIndex);
for ($row = 1; $row <= $highestRow; $row++) {
for ($col = 0; $col < $highestColumnIndex; $col++) {
$cell = $worksheet->getCellByColumnAndRow($col, $row);
$val = $cell->getValue();
$dataType = PHPExcel_Cell_DataType::dataTypeForValue($val);
$response[] = array($row,$col,$val);
}
}
echo json_encode($response);
?>
ファイル パスをエコーすると、まったく同じディレクトリが参照されていることがわかります (両方のファイルがそこに存在します)。両方のファイルのアクセス許可は同じです。ワークブックをロードするために、次の 2 つの異なる方法を試しました。
$objPHPExcel = PHPExcel_IOFactory::load($excelFile);
と
$excelReader = PHPExcel_IOFactory::createReader('Excel5'); //if file extension is .xls
$excelObj = $excelReader->load($excelFile);
$worksheet = $excelObj->getActiveSheet();
これらのソリューションは両方とも、cookies.xls ワークブックでエラーなく適切に実行されます。
混乱を招く可能性のある説明で申し訳ありませんが、期待される出力も返されるのに 500 がスローされる理由が思いつきません。
これに関する誰かの助けに感謝します。
グレッグ