PHPExcel 在 xls 和 xlsx 之间切换
PHPExcel switch between xls and xlsx
我正在编写一个从邮件附件中读取 .xls 和 .xlsx 文件的脚本。我正在尝试使用识别方法根据文件扩展名在 reader 之间切换脚本。
$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 文件,它就不会使用正确的 reader 并给我一个错误:`致命错误:
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();
我认为这个错误是因为没有使用正确的 reader.
$aPaths
:
Array(
[0] => C:\xampp\tmp5943-632345.xls
[1] => C:\xampp\tmp2047-634744.xlsx
[2] => C:\xampp\tmp2069-634917.xls
[3] => C:\xampp\tmp3840-634955.xls
[4] => C:\xampp\tmp5760-635374.xlsx
[5] => C:\xampp\tmp0294-637780.xls
[6] => C:\xampp\tmp0801-638144.xls
[7] => C:\xampp\tmp1098-638118.xls
[8] => C:\xampp\tmp4831-641137.xlsx
[9] => C:\xampp\tmp7680-642962.xls
[10] => C:\xampp\tmp7689-642665.xls
[11] => C:\xampp\tmp7692-642784.xls
[12] => C:\xampp\tmp7700-643048.xls
[13] => C:\xampp\tmp7708-643096.xls
[14] => C:\xampp\tmp8771-642241.xls
[15] => C:\xampp\tmp9082-647219.xls
[16] => C:\xampp\tmp9629-647241.xls
[17] => C:\xampp\tmp4488-647334.xls
[18] => C:\xampp\tmp4500-646313.xls
[19] => C:\xampp\tmp4508-644581.xls
[20] => C:\xampp\tmp4511-646521.xls
[21] => C:\xampp\tmp4512-646136.xls
[22] => C:\xampp\tmp4561-650010.xls
)
有没有人知道为什么这不起作用,或者在 reader 之间切换的不同方法?
你可以试试:
$file_types = explode(".", 'C:\xampp\tmp5943-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;
}
列表中有一个损坏的文件被识别为 xls 文件,但实际上是 xlsx 文件。我删除了该文件,它现在可以完美运行了!
我正在编写一个从邮件附件中读取 .xls 和 .xlsx 文件的脚本。我正在尝试使用识别方法根据文件扩展名在 reader 之间切换脚本。
$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 文件,它就不会使用正确的 reader 并给我一个错误:`致命错误:
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();
我认为这个错误是因为没有使用正确的 reader.
$aPaths
:
Array(
[0] => C:\xampp\tmp5943-632345.xls
[1] => C:\xampp\tmp2047-634744.xlsx
[2] => C:\xampp\tmp2069-634917.xls
[3] => C:\xampp\tmp3840-634955.xls
[4] => C:\xampp\tmp5760-635374.xlsx
[5] => C:\xampp\tmp0294-637780.xls
[6] => C:\xampp\tmp0801-638144.xls
[7] => C:\xampp\tmp1098-638118.xls
[8] => C:\xampp\tmp4831-641137.xlsx
[9] => C:\xampp\tmp7680-642962.xls
[10] => C:\xampp\tmp7689-642665.xls
[11] => C:\xampp\tmp7692-642784.xls
[12] => C:\xampp\tmp7700-643048.xls
[13] => C:\xampp\tmp7708-643096.xls
[14] => C:\xampp\tmp8771-642241.xls
[15] => C:\xampp\tmp9082-647219.xls
[16] => C:\xampp\tmp9629-647241.xls
[17] => C:\xampp\tmp4488-647334.xls
[18] => C:\xampp\tmp4500-646313.xls
[19] => C:\xampp\tmp4508-644581.xls
[20] => C:\xampp\tmp4511-646521.xls
[21] => C:\xampp\tmp4512-646136.xls
[22] => C:\xampp\tmp4561-650010.xls
)
有没有人知道为什么这不起作用,或者在 reader 之间切换的不同方法?
你可以试试:
$file_types = explode(".", 'C:\xampp\tmp5943-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;
}
列表中有一个损坏的文件被识别为 xls 文件,但实际上是 xlsx 文件。我删除了该文件,它现在可以完美运行了!