You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHPExcel读取xlsx文件报Could not open错误如何解决

问题修复方案

核心错误原因

  • 你通过scandir获取到的仅为文件名,没有拼接完整的文件路径,PHPExcel加载时会在当前脚本执行目录搜索文件,无法匹配到rdv/100$i/子目录下的Excel文件
  • scandir默认返回.、..两个特殊目录项,按文件名降序排序时..会排在首位,直接取$files[0]拿到的是上级目录而非目标Excel文件
  • scandir自带的排序是按文件名排序,并非按文件实际保存时间排序,无法保证拿到的是最新文件
  • 遍历子目录的逻辑硬编码了100$i的命名格式,扩展性差,一旦子目录命名规则变动就会失效

修复后代码

include 'database.php';
require 'PHPExcel/Classes/PHPExcel.php';
require_once 'PHPExcel/Classes/PHPExcel/IOFactory.php';
 
// 接收前端按钮触发的POST请求
if($_SERVER['REQUEST_METHOD'] == "POST" and isset($_POST['someAction']))
{
    func();
}

function func()
{
    // 直接获取rdv下所有子目录,避免硬编码目录名
    $folders = glob('rdv/*', GLOB_ONLYDIR);
    if (empty($folders)) {
        echo '未找到任何子目录';
        return;
    }
    
    foreach ($folders as $folder) {
        echo "正在处理目录:{$folder}<br>";
        // 获取目录下所有xlsx文件
        $files = glob($folder . '/*.xlsx');
        if (empty($files)) {
            echo "{$folder} 目录下无xlsx文件,跳过<br>";
            continue;
        }
        
        // 按文件修改时间倒序排序,取最新的文件
        usort($files, function($a, $b) {
            return filemtime($b) - filemtime($a);
        });
        $newest_file = $files[0];
        echo "最新文件为:{$newest_file}<br>";
        
        // 加载Excel文件,这里传入的是完整路径,不会找不到文件
        try {
            $objExcel = PHPExcel_IOFactory::load($newest_file);
            $activeSheet = $objExcel->getActiveSheet();
            $dossier = $activeSheet->getCell('A3')->getValue();
            $facture = $activeSheet->getCell('B21')->getValue();
            $date = $activeSheet->getCell('Q1')->getValue();
            
            // 插入数据库
            insertInto($dossier, $facture, $date);
            echo "{$newest_file} 数据处理完成<br>";
            // 清理PHPExcel内存占用,避免处理多个文件时内存溢出
            $objExcel->disconnectWorksheets();
            unset($objExcel);
        } catch (PHPExcel_Reader_Exception $e) {
            echo "文件{$newest_file}加载失败:" . $e->getMessage() . "<br>";
            continue;
        }
    }
}

补充优化说明

  • 增加了异常捕获逻辑,避免单个文件加载失败导致整个脚本终止
  • 增加了内存清理逻辑,PHPExcel内存占用较高,处理多个文件时如果不清理容易触发内存溢出
  • 遍历目录改为动态读取所有子目录,不再硬编码100$i格式,适配后续目录扩展
  • 只读取后缀为.xlsx的文件,避免读取到目录或其他格式文件导致报错

内容的提问来源于stack exchange,提问作者MI7QC

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 13:57:00