0

0

Excel文件怎么读取_PHP读取Excel方法【解答】

雪夜

雪夜

发布时间:2026-03-16 14:52:31

|

523人浏览过

|

来源于php中文网

原创

优先使用 PhpSpreadsheet 读取 Excel 文件,它支持 .xlsx、.xls、.ods 格式且持续维护;禁用已废弃的 PHPExcel 和错误使用 fgetcsv 解析 .xlsx;需启用 zip 扩展并正确安装依赖。

excel文件怎么读取_php读取excel方法【解答】

PHP读取Excel文件,优先用 PhpSpreadsheet

直接结论:别碰 PHPExcel(已废弃),也别用 fgetcsv() 硬解析 .xlsx——它根本不是CSV。当前唯一靠谱的选择是 PhpSpreadsheet,它能正确处理 .xlsx.xls.ods,且仍在维护。

常见错误现象:Call to undefined function excel_read_file()(压根没装库)、ZipArchive not available(没开 zip 扩展)、读出来全是空值(误把 .xlsx 当文本流直接 fopen)。

  • 安装命令必须带 --with-zip(PHP编译时)或确认 extension=zip 已启用
  • composer require phpoffice/phpspreadsheet 是唯一推荐安装方式,手动下载 ZIP 包容易漏依赖
  • .xls(旧版)需额外装 phpoffice/phpspreadsheetcompatibility 模块,但建议先转成 .xlsx 测试

读取 .xlsx 文件的最小可行代码

不是“Hello World”式演示,而是能立刻跑通、带错误兜底的真实片段:

use PhpOffice\PhpSpreadsheet\IOFactory;

try {
    $spreadsheet = IOFactory::load('/path/to/file.xlsx');
    $worksheet = $spreadsheet->getActiveSheet();
    $data = $worksheet->toArray(); // 二维数组,从第一行第一列开始
} catch (\PhpOffice\PhpSpreadsheet\Reader\Exception $e) {
    // 注意:这个异常类名要写全,漏命名空间会静默失败
    error_log('Excel读取失败:' . $e->getMessage());
    $data = [];
}

关键点:toArray() 默认跳过空行空列,但不会自动过滤表头;如果首行是字段名,后续处理得自己 array_shift($data)

立即学习PHP免费学习笔记(深入)”;

社研通
社研通

文科研究生的学术加速器

下载
  • IOFactory::load() 自动识别格式,不用手动指定 XlsxXls
  • 路径必须是服务器可读的绝对路径,$_FILES['file']['tmp_name'] 传进来前要 is_uploaded_file() 校验
  • 大文件(>5MB)会触发内存不足,此时必须用 setReadDataOnly(true) + setLoadSheetsOnly(['Sheet1']) 限域加载

中文乱码、日期变数字、公式不计算?不是编码问题

这些不是 mb_convert_encoding() 能解决的——PhpSpreadsheet 本身以 UTF-8 处理所有文本。乱码通常源于 Excel 文件保存时用了非 Unicode 编码(比如 GBK),但更常见的是你读到了“原始单元格值”,而非“显示值”。

  • 日期显示为 44205:这是 Excel 的序列号,调用 $cell->getFormattedValue() 而不是 $cell->getValue()
  • 公式显示为 =SUM(A1:A10) 而非结果:默认不计算,需 $spreadsheet->getActiveSheet()->getCell('B1')->getCalculatedValue()
  • 从 Windows 机器导出的 Excel 含 BOM 或隐藏字符:用 trim() + mb_trim(<code>$str, 'utf-8') 清洗,别信“改 header 字符集”

为什么不用 simplexlsxbox/spout

simplexlsx 轻量但只支持 .xlsx,且对合并单元格、样式、密码保护完全无感;spout 内存友好,但只能读不能写,且不支持 .xls 和公式计算。

选型依据很实际:如果你要读用户上传的 Excel(含格式/合并/公式/多 sheet),PhpSpreadsheet 是目前唯一不妥协的选择。它的慢和吃内存是真实代价,但换来的稳定性值得——尤其当业务要求“和 Excel 打开看到的一样”。

真正容易被忽略的点:PhpSpreadsheettoArray() 方法在有合并单元格时,会把值重复填充到所有合并区域单元格里,而不是留空。如果你依赖“空单元格判断逻辑”,这里会悄悄出错。

相关文章

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
composer是什么插件
composer是什么插件

Composer是一个PHP的依赖管理工具,它可以帮助开发者在PHP项目中管理和安装依赖的库文件。Composer通过一个中央化的存储库来管理所有的依赖库文件,这个存储库包含了各种可用的依赖库的信息和版本信息。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

162

2023.12.25

require的用法
require的用法

require的用法有引入模块、导入类或方法、执行特定任务。想了解更多require的相关内容,可以阅读本专题下面的文章。

510

2023.11.27

undefined是什么
undefined是什么

undefined是代表一个值或变量不存在或未定义的状态。它可以作为默认值来判断一个变量是否已经被赋值,也可以用于设置默认参数值。尽管在不同的编程语言中,undefined可能具有不同的含义和用法,但理解undefined的概念可以帮助我们更好地理解和编写程序。本专题为大家提供undefined相关的各种文章、以及下载和课程。

6584

2023.07.31

网页undefined是什么意思
网页undefined是什么意思

网页undefined是指页面出现了未知错误的意思,提示undefined一般是在开发网站的时候定义不正确或是转换不正确,或是找不到定义才会提示undefined未定义这个错误。想了解更多的相关内容,可以阅读本专题下面的文章。

3350

2024.08.14

网页undefined啥意思
网页undefined啥意思

本专题整合了undefined相关内容,阅读下面的文章了解更多详细内容。后续继续更新。

1705

2025.12.25

function是什么
function是什么

function是函数的意思,是一段具有特定功能的可重复使用的代码块,是程序的基本组成单元之一,可以接受输入参数,执行特定的操作,并返回结果。本专题为大家提供function是什么的相关的文章、下载、课程内容,供大家免费下载体验。

500

2023.08.04

js函数function用法
js函数function用法

js函数function用法有:1、声明函数;2、调用函数;3、函数参数;4、函数返回值;5、匿名函数;6、函数作为参数;7、函数作用域;8、递归函数。本专题提供js函数function用法的相关文章内容,大家可以免费阅读。

167

2023.10.07

windows查看端口占用情况
windows查看端口占用情况

Windows端口可以认为是计算机与外界通讯交流的出入口。逻辑意义上的端口一般是指TCP/IP协议中的端口,端口号的范围从0到65535,比如用于浏览网页服务的80端口,用于FTP服务的21端口等等。怎么查看windows端口占用情况呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

1518

2023.07.26

C++多线程并发控制与线程安全设计实践
C++多线程并发控制与线程安全设计实践

本专题围绕 C++ 在高性能系统开发中的并发控制技术展开,系统讲解多线程编程模型与线程安全设计方法。内容包括互斥锁、读写锁、条件变量、原子操作以及线程池实现机制,同时结合实际案例分析并发竞争、死锁避免与性能优化策略。通过实践讲解,帮助开发者掌握构建稳定高效并发系统的关键技术。

4

2026.03.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 13.7万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 11.3万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 1.0万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号