PhpSpreadsheet是一个用纯PHP编写的库,提供了一组类,使您可以读取和写入不同的电子表格文件格式。PhpSpreadsheet提供了丰富的API接口,可以设置诸多单元格以及文档属性,包括样式、图片、日期、函数等等诸多应用,总之你想要什么样的Excel表格,PhpSpreadsheet都能做到。
官方文档:https://phpspreadsheet.readthedocs.io
Format | Reading | Writing |
---|---|---|
Open Document Format/OASIS (.ods) | ✓ | ✓ |
Office Open XML (.xlsx) Excel 2007 and above | ✓ | ✓ |
BIFF 8 (.xls) Excel 97 and above | ✓ | ✓ |
BIFF 5 (.xls) Excel 95 | ✓ | |
SpreadsheetML (.xml) Excel 2003 | ✓ | |
Gnumeric | ✓ | |
HTML | ✓ | ✓ |
SYLK | ✓ | |
CSV | ✓ | ✓ |
PDF (using either the TCPDF, Dompdf or mPDF libraries, which need to be installed separately) | ✓ |
使用 composer 来安装
composer require phpoffice/phpspreadsheet
如果你想要查看对应的文档和示例的话,可以通过下面的命令安装
composer require phpoffice/phpspreadsheet --prefer-source
如果你在一台开发机器上安装,而该机器的 PHP 版本与将要部署的服务器不同,或者你的 PHP CLI 版本与你的运行时间如 php-fpm 或 Apache 的 mod_php 不一样,那么你可能需要在安装前在 composer.json
中加入以下内容:
{
"require": {
"phpoffice/phpspreadsheet": "^1.23"
},
"config": {
"platform": {
"php": "7.4"
}
}
}
然后执行 composer install
<?php
require 'vendor/autoload.php';
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
$spreadsheet = new Spreadsheet();
$activeWorksheet = $spreadsheet->getActiveSheet();
$activeWorksheet->setCellValue('A1', 'Hello World !');
$writer = new Xlsx($spreadsheet);
$writer->save('Helloorld.xlsx');
以下示例展示了如何读取一个 XLSX 文件并获取其中的数据:
<?php
require'vendor/autoload.php';
usePhpOffice\PhpSpreadsheet\IOFactory;
// 加载 Excel 文件
$inputFileName = 'example.xlsx';
$spreadsheet = IOFactory::load($inputFileName);
// 获取活动工作表
$sheet = $spreadsheet->getActiveSheet();
// 获取最大行数和列数
$highestRow = $sheet->getHighestRow();
$highestColumn = $sheet->getHighestColumn();
$highestColumnIndex = \PhpOffice\PhpSpreadsheet\Cell\Coordinate::columnIndexFromString($highestColumn);
// 遍历所有行和列
for ($row = 1; $row <= $highestRow; ++$row) {
for ($col = 1; $col <= $highestColumnIndex; ++$col) {
$cellValue = $sheet->getCellByColumnAndRow($col, $row)->getValue();
echo $cellValue . "\t";
}
echo"\n";
}
下面的代码展示了如何创建一个新的 Excel 文件,并向其中写入数据,最后保存为 XLSX 文件:
<?php
require'vendor/autoload.php';
usePhpOffice\PhpSpreadsheet\Spreadsheet;
usePhpOffice\PhpSpreadsheet\Writer\Xlsx;
// 创建一个新的 Spreadsheet 对象
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
// 设置单元格的值
$sheet->setCellValue('A1', '姓名');
$sheet->setCellValue('B1', '年龄');
$sheet->setCellValue('A2', '张三');
$sheet->setCellValue('B2', 25);
// 创建一个 Xlsx 写入器
$writer = new Xlsx($spreadsheet);
// 保存文件
$outputFileName = 'new_example.xlsx';
$writer->save($outputFileName);
echo"文件已保存为: $outputFileName";
可以为单元格设置各种样式,如字体、背景颜色、边框等。以下示例展示了如何设置单元格的字体和背景颜色:
<?php
require'vendor/autoload.php';
usePhpOffice\PhpSpreadsheet\Spreadsheet;
usePhpOffice\PhpSpreadsheet\Writer\Xlsx;
usePhpOffice\PhpSpreadsheet\Style\Font;
usePhpOffice\PhpSpreadsheet\Style\Fill;
// 创建一个新的 Spreadsheet 对象
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
// 设置单元格的值
$sheet->setCellValue('A1', '示例文本');
// 获取单元格样式
$style = $sheet->getStyle('A1');
// 设置字体样式
$font = $style->getFont();
$font->setName('Arial');
$font->setSize(16);
$font->setBold(true);
$font->setColor(new \PhpOffice\PhpSpreadsheet\Style\Color(\PhpOffice\PhpSpreadsheet\Style\Color::COLOR_WHITE));
// 设置背景颜色
$fill = $style->getFill();
$fill->setFillType(Fill::FILL_SOLID);
$fill->getStartColor()->setARGB('FF0000');
// 创建一个 Xlsx 写入器
$writer = new Xlsx($spreadsheet);
// 保存文件
$outputFileName = 'styled_example.xlsx';
$writer->save($outputFileName);
echo"文件已保存为: $outputFileName";