我一直在使用 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);
?>
回显文件路径表明正在引用相同的确切目录(两个文件都存在那里)。两个文件的权限是一样的。我尝试了两种不同的方法来加载工作簿:
$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。
感谢任何人对此的帮助。
格雷格