现在工作之后就没怎么登过博客了,最近在着力于开发一款混凝土试件数字化管理系统,而提到混凝土当然离不开台账(我们的台账都是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";
}处理大文件与更多技巧
处理大Excel文件:
使用 setReadDataOnly(true) 可以只读取数据而不加载格式信息,显著降低内存消耗。对于非常大的文件,还可以使用分块读取的技巧。$reader = IOFactory::createReaderForFile($inputFileName); $reader->setReadDataOnly(true); $spreadsheet = $reader->load($inputFileName);设置单元格格式:
你不仅可以读写数据,还可以设置丰富的格式。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);