惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

WordPress大学
WordPress大学
T
Threatpost
阮一峰的网络日志
阮一峰的网络日志
美团技术团队
F
Fortinet All Blogs
The GitHub Blog
The GitHub Blog
月光博客
月光博客
V
Visual Studio Blog
T
Tailwind CSS Blog
Stack Overflow Blog
Stack Overflow Blog
博客园 - 聂微东
Jina AI
Jina AI
J
Java Code Geeks
Martin Fowler
Martin Fowler
大猫的无限游戏
大猫的无限游戏
Recorded Future
Recorded Future
C
Check Point Blog
腾讯CDC
N
Netflix TechBlog - Medium
aimingoo的专栏
aimingoo的专栏
罗磊的独立博客
Hacker News: Ask HN
Hacker News: Ask HN
SecWiki News
SecWiki News
博客园 - Franky
Hacker News - Newest:
Hacker News - Newest: "LLM"
N
News | PayPal Newsroom
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
S
Security @ Cisco Blogs
W
WeLiveSecurity
The Last Watchdog
The Last Watchdog
Cloudbric
Cloudbric
F
Full Disclosure
The Cloudflare Blog
Y
Y Combinator Blog
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Google DeepMind News
Google DeepMind News
MongoDB | Blog
MongoDB | Blog
S
Schneier on Security
Schneier on Security
Schneier on Security
Spread Privacy
Spread Privacy
L
LINUX DO - 热门话题
AI
AI
N
News and Events Feed by Topic
T
Tor Project blog
P
Palo Alto Networks Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
H
Hackread – Cybersecurity News, Data Breaches, AI and More
G
Google Developers Blog

流星小屋

自用好看的404页面 - 流星小屋 【原创程序】文件批量打印助手 - 流星小屋 飞鸟加速器破解版教程带成品 - 流星小屋 习讯云实习周报、月报一键生成工具 - 流星小屋 一键扒取苹果cms系统所有m3u8直链api源码 - 流星小屋 分享自己最近几天无聊写的两个项目 - 流星小屋 【原创源码】卡密提货带后台 - 流星小屋 【原创】日常和朋友搞抽象答题网页源码 - 流星小屋 宝塔API全自动建站系统源码 - 流星小屋
使用PHPExcel库实现Excel文件读写教程 - 流星小屋
作者: ◇流星雨﹏√ · 2025-10-01 · via 流星小屋

这篇文章距离最后更新已过255 天,如果文章内容或图片资源失效,请留言反馈,我会及时处理,谢谢!

现在工作之后就没怎么登过博客了,最近在着力于开发一款混凝土试件数字化管理系统,而提到混凝土当然离不开台账(我们的台账都是excel表格文件),开发语言为PHP,所以在开发时自然离不开使用使用PHP进行Excel文件的读写,尝试了很多方法函数之后我觉得PHPExcel-1.8更适合我的开发使用,这里记录一下PHPExcel库的教程吧!

PHPExcel 库(其继任者为 PhpSpreadsheet)为 PHP 操作 Excel 文件提供了强大功能。

安装与准备

首先,需要通过 Composer 将 PhpSpreadsheet 引入项目中:

composer require phpoffice/phpspreadsheet

然后在PHP脚本开头引入自动加载文件:

require 'vendor/autoload.php';

use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
use PhpOffice\PhpSpreadsheet\IOFactory;

写入Excel文件

创建并写入一个 Excel 文件通常包含以下几个步骤:

// 1. 创建 Spreadsheet 对象
$spreadsheet = new Spreadsheet();

// 2. 获取当前活动的工作表(默认第一个)
$sheet = $spreadsheet->getActiveSheet();

// 3. 向单元格写入数据
$sheet->setCellValue('A1', 'Hello');
$sheet->setCellValue('B1', 'World!');
$sheet->setCellValue('A2', 123.456);
$sheet->setCellValue('B2', '=A2*2'); // 甚至可以写入公式

// 4. 通过数组批量写入数据
$dataArray = [
    ['姓名', '年龄', '城市'],
    ['张三', 25, '北京'],
    ['李四', 30, '上海']
];
$sheet->fromArray($dataArray, NULL, 'A4'); // 从 A4 单元格开始填充

// 5. 保存文件
$writer = new Xlsx($spreadsheet);
$writer->save('hello_world.xlsx');

echo "Excel 文件已成功创建!";

读取Excel文件

读取一个已存在的 Excel 文件,并提取其中的信息:

// 1. 指定文件路径
$inputFileName = 'hello_world.xlsx';

// 2. 使用 IOFactory 来加载文件
$spreadsheet = IOFactory::load($inputFileName);

// 3. 获取活动工作表
$sheet = $spreadsheet->getActiveSheet();

// 4. 读取单个单元格的值
$cellA1 = $sheet->getCell('A1')->getValue();
echo "A1 单元格的值是: " . $cellA1 . "\n";

// 5. 获取工作表的基本信息
$highestRow = $sheet->getHighestRow(); // 最后有数据的行号
$highestColumn = $sheet->getHighestColumn(); // 最后有数据的列标

// 6. 循环遍历所有包含数据的行和列
echo "工作表数据内容:\n";
for ($row = 1; $row <= $highestRow; $row++) {
    for ($col = 'A'; $col <= $highestColumn; $col++) {
        $cellValue = $sheet->getCell($col . $row)->getValue();
        echo $cellValue . "\t";
    }
    echo "\n";
}

处理大文件与更多技巧

  1. 处理大Excel文件:
    使用 setReadDataOnly(true) 可以只读取数据而不加载格式信息,显著降低内存消耗。对于非常大的文件,还可以使用分块读取的技巧。

    $reader = IOFactory::createReaderForFile($inputFileName);
    $reader->setReadDataOnly(true);
    $spreadsheet = $reader->load($inputFileName);
  2. 设置单元格格式:
    你不仅可以读写数据,还可以设置丰富的格式。

    use PhpOffice\PhpSpreadsheet\Style\Alignment;
    use PhpOffice\PhpSpreadsheet\Style\Font;
    
    // 设置字体和加粗
    $sheet->getStyle('A1')->getFont()->setBold(true)->setSize(12);
    
    // 设置单元格居中对齐
    $sheet->getStyle('A1:B1')->getAlignment()->setHorizontal(Alignment::HORIZONTAL_CENTER);

版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自流星小屋