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 文件。我删除了该文件,它现在可以完美运行了!