網站首頁 PHP其他 正文
本文會介紹php使用PhpSpreadsheet操作Excel,供大家參考,具體內容如下:
PhpSpreadsheet介紹
1、簡介
PhpSpreadsheet 是一個用純PHP編寫的庫,提供了一組類,使您可以讀取和寫入不同的電子表格文件格式
PhpSpreadsheet 提供了豐富的API接口,可以設置諸多單元格以及文檔屬性,包括樣式、圖片、日期、函數等等諸多應用,總之你想要什么樣的Excel表格,PhpSpreadsheet都能做到。
使用 PhpSpreadsheet 開發的PHP要求 7.1或更高版本
PhpSpreadsheet 支持鏈式操作
2、安裝
使用 composer 安裝,在項目根目錄下執行下面命令,即可安裝。本次是在ThinkPHP5框架里使用。
composer require phpoffice/phpspreadsheet
使用
1、引用和實例化
use PhpOffice\PhpSpreadsheet\Spreadsheet;
// 實例化 Spreadsheet 對象
$spreadsheet = new Spreadsheet();
2、獲取工作簿
getActiveSheet
// 獲取活動工作薄
$sheet = $spreadsheet->getActiveSheet();
單元格操作
1、獲取單元格
兩種獲取單元格方式
- getCell
- getCellByColumnAndRow 數字單元格坐標獲取單元格
$cell = $sheet->getCell('A1');
$cell = $sheet->getCellByColumnAndRow(1,1); // 參數:列、行
2、設置單元格的值
- setValue
- setCellValue
- setCellValueByColumnAndRow
// 獲取單元格
$cellA = $sheet->getCell('A1');
// 設置單元格值
$cellA->setValue('姓名'); // 設置A1單元格的值為姓名
// 給A1設置值,參數:單元格位置,值
$sheet->setCellValue('A1','ID');
//給A2賦值 hello
$sheet->setCellValueByColumnAndRow(1, 2, 'hello');
3、單元格文字樣式
- getStyle 獲取單元格樣式
- getFont 獲取單元格文字樣式
- setBold 設置文字粗細
- setName 設置文字字體
- setSize 設置文字大小
//將A1至D1單元格設置成粗體
$sheet->getStyle('A1:D1')->getFont()->setBold(true);
//將A1單元格設置成粗體,黑體,10號字
$sheet->getStyle('A1')->getFont()->setBold(true)->setName('黑體')->setSize(10);
4、單元格文字顏色
- getColor() 獲取坐標顏色
- setRGB() 設置字體顏色(顏色值帶#)
- getRGB() 獲取字體顏色
- setARGB() 設置字體顏色(顏色值不帶#)
- getARGB() 獲取字體顏色
// B3單元格設置顏色
$sheet->getStyle('B3')->getFont()->getColor()->setRGB('#AEEEEE');
$sheet->getStyle('B3')->getFont()->getColor()->setARGB('FFFF0000');
5、單元格內文字換行
- setWrapText 設置文本里的\n符合為:換行
//使用 \n 進行單元格內換行,相當于 Alt+Enter
$sheet->getCell('A1')->setValue("hello\nworld");
$sheet->getStyle('A1')->getAlignment()->setWrapText(true);
6、單元格列和行
- getColumnDimension 獲取一列
- getWidth 獲取一列的寬度
- setWidth 設置一列的寬度
- setAutoSize 設置一列的寬度自動調整
- getDefaultColumnDimension 獲取一列的默認值
//設置默認列寬20
$sheet->getDefaultColumnDimension()->setWidth(20);
//將A列寬度設置成20
$sheet->getColumnDimension('A')->setWidth(20);
//自動計算列寬
$sheet->getColumnDimension('A')->setAutoSize(true);
- getRowDimension 獲取一行
- getRowHeight 獲取一行的高度
- setRowHeight 設置一行的高度
//設置默認行高
$sheet->getDefaultRowDimension()->setRowHeight(20);
//設置第一行行高為20pt
$sheet->getRowDimension('1')->setRowHeight(20);
- getHighestColumn 獲取總列數
- getHighestRow 獲取總行數
echo $sheet->getHighestColumn();
echo $sheet->getHighestRow();
7、單元格樣式
- applyFromArray 設置單元格樣式
- 對齊
use PhpOffice\PhpSpreadsheet\Style\Alignment;
// 居中對齊
$styleArray = [
'alignment' => [
'horizontal' => Alignment::HORIZONTAL_CENTER, //水平居中
'vertical' => Alignment::VERTICAL_CENTER, //垂直居中
],
];
$worksheet->getStyle('A1')->applyFromArray($styleArray);
- 邊框
上 下 左 右 全部 邊框都可設置
//紅色邊框
use PhpOffice\PhpSpreadsheet\Style\Border;
// 外邊框
// Border 類中的常量都是邊框樣式
// Border::BORDER_THICK 邊框樣式
$styleArray = [
'borders' => [
'outline' => [
'borderStyle' => Border::BORDER_THICK,
'color' => ['argb' => 'FFFF0000'],
],
],
];
$worksheet->getStyle('B2:G8')->applyFromArray($styleArray);
8、單元格合并和拆分
- mergeCells 合并
- unmergeCells 拆分
// 合并A1到C1列
$sheet->mergeCells('A1:C4');
// 合并A1到A4行
$sheet->mergeCells('A1:A4');
// 合并后,賦值只能給A1,開始的坐標。
$sheet->getCell('A1')->setValue('西安');
// 拆分
$sheet->mergeCells('A1:C4');
$sheet->unmergeCells('A1:A4');
9、超鏈接
- getHyperlink 獲取單元格鏈接
- setUrl 設置單元格鏈接
$spreadsheet->getActiveSheet()->setCellValue('E6', 'xxxx的博客');
$spreadsheet->getActiveSheet()->getCell('E6')->getHyperlink()->setUrl('https://blog.csdn.net/u011167662');
10、使用函數
SUM求和A;VERAGE平均數;MIN最小值;MAX最大值
$sheet->setCellValue('A3', '=SUM(A1:A2)');
$sheet->setCellValue('A3', '=MAX(A1:A2)');
11、批量賦值
- fromArray 從數組中的值填充工作表
參數1:數據(數組)
參數2:去除某個值
參數3:從哪個位置開始
$sheet->fromArray(
[
[1,'歐陽克','18歲','188cm'],
[2,'黃蓉','17歲','165cm'],
[3,'郭靖','21歲','180cm']
], 3, 'A2' );
12、寫入圖片
use PhpOffice\PhpSpreadsheet\Worksheet\Drawing;
//寫入圖片
$drawing = new Drawing();
$drawing->setName('Logo')->setDescription('Logo')->setPath('../files/1.jpg')->setHeight(30)->setCoordinates('D6')->setOffsetX(50)->setOffsetY(6);
$drawing->setRotation(25);
$drawing->getShadow()->setVisible(true);
$drawing->getShadow()->setDirection(45);
$drawing->setWorksheet($sheet);
工作簿操作
1、xlsx 文件導出
- IOFactory::createWriter 寫入到文件
use PhpOffice\PhpSpreadsheet\IOFactory;
// MIME 協議,文件的類型,不設置,會默認html
header('Content-Type:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
// MIME 協議的擴展
$filename = date('Y-m-d').'工作報告單';
header('Content-Disposition:attachment;filename='.$filename .'.xlsx');
// 緩存控制
header('Cache-Control:max-age=0');
$write = IOFactory::createWriter($spreadsheet, 'Xlsx');
$write->save('php://output');
2、xls 文件導出
// MIME 協議,文件的類型,不設置,會默認html
header('Content-Type:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
// MIME 協議的擴展
$filename = date('Y-m-d').'工作報告單';
header('Content-Disposition:attachment;filename='.$filename .'.xls');
// 緩存控制
header('Cache-Control:max-age=0');
$write = IOFactory::createWriter($spreadsheet, 'Xls');
$write->save('php://output');
3、設置工作簿標題
- setTitle
$sheet->setTitle('標題1');
實戰
1、導出簡單數據(使用 ThinkPHP5 框架)
<?php
namespace app\api\controller;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Style\Alignment;
use PhpOffice\PhpSpreadsheet\Style\Border;
use PhpOffice\PhpSpreadsheet\IOFactory;
class Excel
{
public function exporteasy()
{
$spreadsheet = new Spreadsheet();
$worksheet = $spreadsheet->getActiveSheet();
$title = 'Excel導出';
$worksheet->setTitle($title);
$worksheet->mergeCells('B2:D2');
$worksheet->getRowDimension(1)->setRowHeight(50);
$worksheet->getStyle('B2:D2')->applyFromArray([
'alignment' => [
'horizontal' => Alignment::HORIZONTAL_CENTER,
'vertical' => Alignment::VERTICAL_CENTER,
],
'borders' => [
'outline' => [
'borderStyle' => Border::BORDER_THIN,
'color' => ['argb' => '000000']
],
],
'font' => [
'name' => '黑體',
'bold' => true,
'size' => 22
]
]);
$worksheet->setCellValueByColumnAndRow(2, 2, $title);
$worksheet->setCellValueByColumnAndRow(2, 3, '姓名');
$worksheet->setCellValueByColumnAndRow(3, 3, '性別');
$worksheet->setCellValueByColumnAndRow(4, 3, '年齡');
$worksheet->setCellValueByColumnAndRow(2, 4, '張三');
$worksheet->setCellValueByColumnAndRow(3, 4, '男');
$worksheet->setCellValueByColumnAndRow(4, 4, '20');
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename=Excel導出.xlsx');
header('Cache-Control: max-age=0');
$write = IOFactory::createWriter($spreadsheet, 'Xlsx');
$write->save('php://output');
}
}
導出表格截圖:
2、導出數據
liu_system_log 管理員操作記錄表
public function export()
{
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
$styleArray = [
'alignment' => [
'horizontal' => Alignment::HORIZONTAL_CENTER,
'vertical' => Alignment::VERTICAL_CENTER,
],
'borders' => [
'outline' => [
'borderStyle' => Border::BORDER_THICK,
],
],
];
$sheet->getDefaultColumnDimension()->setWidth(20);// 列寬
$sheet->getDefaultRowDimension()->setRowHeight(20);// 行高
// 標題
$tabletitle = '管理員操作記錄表';
$sheet->mergeCells('A1:D1');
$sheet->getRowDimension('1')->setRowHeight(40);// 行高
$sheet->getStyle('A1')->applyFromArray($styleArray);
$sheet->getStyle('A1')->getFont()->setBold(true)->setSize(16);
$sheet->setCellValue('A1', $tabletitle);
$sheet->getStyle('A2:D2')->applyFromArray($styleArray);
$sheet->getStyle('A2:D2')->getFont()->setBold(true)->setSize(12);
$sheet->setCellValue('A2','管理員姓名');
$sheet->setCellValue('B2','操作');
$sheet->setCellValue('C2','ip');
$sheet->setCellValue('D2','操作時間');
$data = Db::name('system_log')->select();
$sort = 0;
foreach ($data as $v){
$sheet->setCellValue('A' . ($sort + 3), $v['admin_name']);
$sheet->setCellValue('B' . ($sort + 3), $v['page']);
$sheet->setCellValue('C' . ($sort + 3), $v['ip']);
$sheet->setCellValue('D' . ($sort + 3), date('Y-m-d H:i:s', $v['add_time']));
$sort++;
}
// 工作簿標題
$sheettitle = '管理員操作記錄表';
$sheet->setTitle($sheettitle);
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
// 文件名
$filename = '管理員操作記錄表';
header('Content-Disposition: attachment;filename=' . $filename .'.xlsx');
header('Cache-Control: max-age=0');
$write = IOFactory::createWriter($spreadsheet, 'Xlsx');
$write->save('php://output');
}
原文鏈接:https://blog.csdn.net/weixin_44888397/article/details/131484139
- 上一篇:沒有了
- 下一篇:沒有了
相關推薦
- 2022-10-05 ASP.NET?Core在Task中使用IServiceProvider的問題解析_實用技巧
- 2022-08-05 SpringBoot 2.X 整合Redis
- 2022-07-20 使用numpy.ndarray添加元素_python
- 2022-05-25 Redis的安裝和使用(windows)
- 2022-07-10 fastmock使用-只能模擬get請求
- 2022-04-07 對WPF中Expander控件美化_實用技巧
- 2022-07-01 Python查詢缺失值的4種方法總結_python
- 2022-08-26 Python中True(真)和False(假)判斷詳解_python
- 欄目分類
-
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支