PhpSpreadsheet基本使用

一、安装依赖

composer require phpoffice/phpspreadsheet

二、引入实例

use PhpOffice\PhpSpreadsheet\Cell\Coordinate;
use PhpOffice\PhpSpreadsheet\IOFactory;
use PhpOffice\PhpSpreadsheet\Reader\Csv;
use PhpOffice\PhpSpreadsheet\Reader\Xls;
use PhpOffice\PhpSpreadsheet\Reader\Xlsx;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Style\Font;

三、使用表格类库

$spreadsheet = new Spreadsheet();
$sheet       = $spreadsheet->getActiveSheet();  // 获取当前激活的工作表

四、全局操作

- 全局垂直居中

$spreadsheet->getDefaultStyle()->getAlignment()->setVertical(Alignment::VERTICAL_CENTER);

- 全局水平居中

$spreadsheet->getDefaultStyle()->getAlignment()->setHorizontal(Alignment::HORIZONTAL_CENTER);

- 全局自动换行

$spreadsheet->getDefaultStyle()->getAlignment()->setWrapText(true);

- 设置Excel文档属性

$spreadsheet->getProperties()
    ->setCreator("mrcdh")                               // 作者
    ->setLastModifiedBy("mrcdh")                        // 最后修改者
    ->setTitle("Office 2007 XLSX Test Document")        // 标题
    ->setSubject("Office 2007 XLSX Test Document")      // 副标题
    ->setDescription("这是一一个用php构建的Excel文档。")  // 描述
    ->setKeywords("office php excel")                   // 关键字
    ->setCategory("Test result file");                  // 分类

五、工作表操作

- 创建新的工作表

try{
    $spreadsheet->createSheet(1);   // 传入索引,0代表第一个工作表
}catch(Exception $e){}

- 获取指定工作表

try{
    $spreadsheet->getSheet(1);   // 获取索引为1的工作表
}catch(Exception $e){}

- 删除指定工作表

try{
    $spreadsheet->removeSheetByIndex(0);   // 删除第一个工作表
}catch(Exception $e){}

- 垂直居中

$sheet->getStyle('A1')->getAlignment()->setVertical(Alignment::VERTICAL_CENTER);    // A1单元格垂直居中
$sheet->getStyle('A1:E3')->getAlignment()->setVertical(Alignment::VERTICAL_CENTER);    // A1到E3单元格垂直居中

- 水平居中

$sheet->getStyle('A1')->getAlignment()->setHorizontal(Alignment::HORIZONTAL_CENTER); // A1单元格水平居中

- 行高

$sheet->getDefaultRowDimension()->setRowHeight(20); // 默认行高
$sheet->getRowDimension(4)->setRowHeight(30); // 设置第4行的行高

- 列宽

$sheet->getDefaultColumnDimension()->setWidth(20); // 默认单元格宽度
$sheet->getColumnDimension('A')->setWidth(30); // 设置A列的宽度为30

- 单元格内容

$sheet->setCellValue('A3', '商品编码');
$sheet->getCell('B3')->setValue('商品名称');

- 单元格背景色

// 设置A2到K2的背景色,也可以单独指定单元格
$sheet->getStyle('A2:K2')
    ->getFill()
    ->setFillType(\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID) // 设置填充样式
    ->getStartColor()
    ->setARGB('FFD8E4BC'); // 可以忽略透明,直接使用RGB

- 单元格边框

// BORDER_THIN 细边框
// BORDER_THICK 粗边框
$sheet->getStyle('A2:K2')->getBorders()->getAllBorders()->setBorderStyle(Border::BORDER_THIN);  // 所有边框
$sheet->getStyle('B2')->getBorders()->getTop()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THICK);   // 上边框
$sheet->getStyle('B2')->getBorders()->getBottom()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THICK);// 下边框
$sheet->getStyle('B2')->getBorders()->getLeft()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THICK);  // 左边框
$sheet->getStyle('B2')->getBorders()->getRight()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THICK); // 右边框

- 使用函数

使用SUM计算B5C5之间单元格的总和。其他函数同理:最大数(MAX),最小数(MIN),平均值(AVERAGE)。

$sheet->setCellValue('A3', '=SUM(B5:C5)');

- 文本自动换行

$sheet->getCell('A4')->setValue("hello\nworld");                    // 内容\n换行
$sheet->getStyle('A4')->getAlignment()->setWrapText(true);          // 指定单元格自动换行

- 文字样式

$sheet->getStyle('A1:B7')->getFont()
    ->setBold(true) // 加粗
    ->setName('Arial') // 字体
    ->setSize(10); // 10号字

// 设置文字颜色为红色
$sheet->getStyle('A4')->getFont()->getColor()
    ->setARGB(\PhpOffice\PhpSpreadsheet\Style\Color::COLOR_RED);

- 合并单元格

$sheet->mergeCells('A18:E22'); // 将A18到E22合并为一个单元格。

- 拆分单元格

$sheet->unmergeCells('A18:E22'); // 将合并后的单元格拆分

- 冻结窗格

  • A2将冻结单元格A2上方的行(即第1行)
  • B1将冻结单元格B1左侧的列(即列A)
  • B2将冻结B2单元格上方和左侧的行(即第1行和第A列)
$sheet->freezePane('A2');

- 添加单元格批注/注释

$sheet->getComment('E11')->setAuthor('mrcdh'); // 设置批注作者
$commentRichText = $sheet->getComment('E11')->getText()->createTextRun('mrcdh:'); // 设置批注内容
$commentRichText->getFont()->setBold(true); // 给上个批注内容加粗
$sheet->getComment('E11')->getText()->createTextRun("\r\n");    // 换行
$sheet->getComment('E11')->getText()->createTextRun('注释内容'); // 追加内容

- 时间处理

$cellVal= $workSheet->getCell('A1')->getValue();
$toTimestamp = \PhpOffice\PhpSpreadsheet\Shared\Date::excelToTimestamp($cellVal);
$date = date("Y-m-d", $toTimestamp);
// 获取时可能出现时间比表格时间快了8个小时
// 这是因为PHPExcel从文件中获取的时间,是以格林威治时间标准(GMT/UTC)格式
// 这时需要使用`gmdate`函数格式化格林威治时间,`date`格式化本地时间
$date = date("Y-m-d", $toTimestamp);

六、杂项

- 导出

use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
$writer = new Xlsx($spreadsheet);
$writer->save('demo.xlsx');

- 导入

use PhpOffice\PhpSpreadsheet\Reader\Xlsx;

$reader = new Xlsx();
$spreadsheet = $read->load($url);                // 加载xlsx文件
$sheet = $spreadsheet->getActiveSheet();
$rows  = $sheet->getHighestRow();                 // 总行数
$cols  = $sheet->getHighestColumn();              // 总列数: B
$colsIndex = \PhpOffice\PhpSpreadsheet\Cell\Coordinate::columnIndexFromString($cols); // 总列数: 2,将字母转换为索引值
$sheet->getCellByColumnAndRow(1, 2)->getValue(); // 获取第2行第1列单元格内容

PhpSpreadsheet 是一个基于 PHP 的电子表格读写库,它可以读取、写入、操作 Excel、CSV、HTML 和 PDF 等多种格式的电子表格文件。下面是一个简单的使用示例: 1. 安装 PhpSpreadsheet 通过 Composer 安装: ``` composer require phpoffice/phpspreadsheet ``` 2. 创建一个 Excel 文件 ```php use PhpOffice\PhpSpreadsheet\Spreadsheet; use PhpOffice\PhpSpreadsheet\Writer\Xlsx; // 创建一个空的电子表格 $spreadsheet = new Spreadsheet(); // 设置单元格内容 $spreadsheet->getActiveSheet() ->setCellValue('A1', 'Hello') ->setCellValue('B1', 'World!'); // 将电子表格保存为 Excel 文件 $writer = new Xlsx($spreadsheet); $writer->save('hello.xlsx'); ``` 3. 读取一个 Excel 文件 ```php use PhpOffice\PhpSpreadsheet\IOFactory; // 读取 Excel 文件 $spreadsheet = IOFactory::load('hello.xlsx'); // 获取第一个工作表 $worksheet = $spreadsheet->getActiveSheet(); // 获取单元格内容 echo $worksheet->getCell('A1')->getValue(); // 输出 "Hello" echo $worksheet->getCell('B1')->getValue(); // 输出 "World!" ``` 4. 导出为 CSV 文件 ```php use PhpOffice\PhpSpreadsheet\Writer\Csv; // 将电子表格保存为 CSV 文件 $writer = new Csv($spreadsheet); $writer->setDelimiter(','); $writer->setEnclosure('"'); $writer->setLineEnding("\r\n"); $writer->setSheetIndex(0); // 导出第一个工作表 $writer->save('hello.csv'); ``` 5. 导入 CSV 文件 ```php use PhpOffice\PhpSpreadsheet\Reader\Csv; // 读取 CSV 文件 $reader = new Csv(); $reader->setDelimiter(','); $reader->setEnclosure('"'); $reader->setSheetIndex(0); // 导入第一个工作表 $spreadsheet = $reader->load('hello.csv'); // 获取第一个工作表 $worksheet = $spreadsheet->getActiveSheet(); // 获取单元格内容 echo $worksheet->getCell('A1')->getValue(); // 输出 "Hello" echo $worksheet->getCell('B1')->getValue(); // 输出 "World!" ``` 以上是 PhpSpreadsheet基本使用方法,它还有很多高级功能,如样式设置、公式计算、图表生成等,可以参考官方文档进一步学习。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

香-农

扣码不易喜欢的话多支持力谢谢!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值