網(wǎng)站首頁 PHP其他 正文
一、PhpSpreadsheet 介紹
PhpSpreadsheet是一個用純PHP編寫的庫,提供了一組類,使您可以讀取和寫入不同的電子表格文件格式
PhpSpreadsheet提供了豐富的API接口,可以設(shè)置諸多單元格以及文檔屬性,包括樣式、圖片、日期、函數(shù)等等諸多應(yīng)用,總之你想要什么樣的Excel表格,PhpSpreadsheet都能做到
使用 PhpSpreadsheet 開發(fā)的PHP要求 7.1或更高版本
PhpSpreadsheet 支持鏈?zhǔn)讲僮?/p>
PhpSpreadsheet 官方網(wǎng)址:https://phpspreadsheet.readthedocs.io
PhpSpreadsheet 安裝
composer require phpoffice/phpspreadsheet
二、基礎(chǔ)使用
<?php
# 載入composer自動加載文件
require 'vendor/autoload.php';
# 給類文件的命名空間起個別名
use PhpOffice\PhpSpreadsheet\Spreadsheet;
# 實例化 Spreadsheet 對象
$spreadsheet = new Spreadsheet();
# 獲取活動工作薄
$sheet = $spreadsheet->getActiveSheet();
# 獲取單元格
$cellA = $sheet->getCell('A1');
# 設(shè)置單元格值
$cellA->setValue('歐陽克');
# 獲取單元格
$cellB = $sheet->getCellByColumnAndRow(1,2);
# 設(shè)置單元格值
$cellB->setValue('黃蓉');
# 獲取設(shè)置單元格,鏈?zhǔn)讲僮?/span>
$sheet->getCell('A3')->setValue('郭靖');
$sheet->getCellByColumnAndRow(1,4)->setValue('楊康');
# Xlsx類 將電子表格保存到文件
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
$writer = new Xlsx($spreadsheet);
$writer->save('1.xlsx');
強化表格操作
<?php
# 載入composer自動加載文件
require 'vendor/autoload.php';
# 給類文件的命名空間起個別名
use PhpOffice\PhpSpreadsheet\Spreadsheet;
# 實例化 Spreadsheet 對象
$spreadsheet = new Spreadsheet();
# 獲取活動工作薄
$sheet = $spreadsheet->getActiveSheet();
//setCellValue(單元格位置,單元格的值)
$sheet->setCellValue('A1','ID');
$sheet->setCellValue('B1','姓名');
$sheet->setCellValue('C1','年齡');
$sheet->setCellValue('D1','身高');
$sheet->setCellValue('E1','生日');
$sheet->setCellValue('F1','網(wǎng)址');
$sheet->setCellValue('G1','語文分?jǐn)?shù)');
$sheet->setCellValue('H1','數(shù)學(xué)分?jǐn)?shù)');
$sheet->setCellValue('I1','總分');
//setCellValueByColumnAndRow(列位置,行位置,單元格的值)
$sheet->setCellValueByColumnAndRow(1, 2, 1);
$sheet->setCellValueByColumnAndRow(2, 2, '歐陽克');
$sheet->setCellValueByColumnAndRow(3, 2, '18歲');
$sheet->setCellValueByColumnAndRow(4, 2, '188cm');
$sheet->setCellValueByColumnAndRow(5, 2, '188cm');
$sheet->setCellValue('E2','2019-10-10 10:10:10');
$sheet->setCellValue('G2',90);
$sheet->setCellValue('H2',92);
$sheet->setCellValue('I2','=SUM(G2:H2)'); // 總數(shù)
//公式
//平均數(shù) =AVERAGE(A1:G1)
//最小數(shù) MIN(A1:G1
//最大數(shù) =MAX(A1:G1) 使用轉(zhuǎn)義字符 \=MAX(A1:G1)
$sheet->setCellValueByColumnAndRow(1, 3, 2);
$sheet->setCellValueByColumnAndRow(2, 3, '黃蓉');
$sheet->setCellValueByColumnAndRow(3, 3, '17歲');
$sheet->setCellValueByColumnAndRow(4, 3, '165cm');
$sheet->setCellValue('E3','2019-10-10 10:10:10');
$sheet->setCellValue('G3',90);
$sheet->setCellValue('H3',92);
$sheet->setCellValue('I3','=SUM(G2:H2)'); // 總數(shù)
//getStyle 獲取單元格樣式
//getFont 獲取單元格文字樣式
//setBold 設(shè)置文字粗細
//setName 設(shè)置文字字體
//setSize 設(shè)置文字大小
//getColor() 獲取坐標(biāo)顏色
//setRGB() 設(shè)置字體顏色
//getRGB() 獲取字體顏色
//setARGB() 設(shè)置字體顏色
//getARGB() 獲取字體顏色
$sheet->getStyle('B2')->getFont()->setBold(true)->setName('宋體')->setSize(20)->getColor()->setRGB('#AEEEEE');
echo $sheet->getStyle('B2')->getFont()->getColor()->getRGB(),PHP_EOL; // 000000
$sheet->getStyle('B3')->getFont()->getColor()->setARGB('FFFF0000');
echo $sheet->getStyle('B3')->getFont()->getColor()->getARGB(); // FFFF0000
//getNumberFormat 獲取格式
//setFormatCode 設(shè)置格式
$sheet->getStyle('E3')->getNumberFormat()->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_DATE_YYYYMMDD);
//setWrapText 設(shè)置文本里的\n符合為:換行
$sheet->setCellValue('A1',"歐陽克\n黃蓉");
$sheet->getStyle('A1')->getAlignment()->setWrapText(true);
//getHyperlink 獲取單元格鏈接
//setUrl 設(shè)置單元格鏈接
$sheet->setCellValue('F2','www.php.cn');
$sheet->getCell('F2')->getHyperlink()->setUrl('http://www.php.cn');
//fromArray 從數(shù)組中的值填充工作表
//參數(shù)1:數(shù)據(jù)(數(shù)組)
//參數(shù)2:去除某個值
//參數(shù)3:從哪個位置開始
$sheet->fromArray(
[
[4,'小名','18歲','188cm'],
[5,'小吳','18歲','188cm'],
],
4,
'A3'
);
//合并單元格
$sheet->mergeCells('I4:I5');
// 、拆分單元格
$sheet->mergeCells('I6:I8');
$sheet->unmergeCells('I6:I8');
//getColumnDimension 獲取一列
//getWidth 獲取一列的寬度
//setWidth 設(shè)置一列的寬度
//setAutoSize 設(shè)置一列的寬度自動調(diào)整
//getDefaultColumnDimension 獲取一列的默認(rèn)值
echo $sheet->getColumnDimension('A')->getWidth().PHP_EOL;
$sheet->getColumnDimension('A')->setWidth(30);
$sheet->getColumnDimension('B')->setAutoSize(true);
$sheet->getDefaultColumnDimension()->setWidth(20);
//getRowDimension 獲取一行
//getRowHeight 獲取一行的高度
//setRowHeight 設(shè)置一行的高度
echo $sheet->getRowDimension(1)->getRowHeight().PHP_EOL;
$sheet->getRowDimension(1)->setRowHeight(100);
$sheet->getDefaultRowDimension()->setRowHeight(1);
//getHighestColumn 獲取總列數(shù)
//getHighestRow 獲取總行數(shù)
echo $sheet->getHighestColumn().PHP_EOL;
echo $sheet->getHighestRow().PHP_EOL;
//單元格樣式 applyFromArray
$styleArray = [
// use PhpOffice\PhpSpreadsheet\Style\Alignment; 文件里常量,就是參數(shù)
// Alignment::HORIZONTAL_CENTER 水平居中
// Alignment::VERTICAL_CENTER 垂直居中
'alignment' => [
// 'horizontal' => Alignment::HORIZONTAL_CENTER, //水平居中
// 'vertical' => Alignment::VERTICAL_CENTER, //垂直居中
'horizontal' => 'center', //水平居中
'vertical' => 'center', //垂直居中
],
// use PhpOffice\PhpSpreadsheet\Style\Border; 文件里常量,就是參數(shù)
// Border::BORDER_THICK 邊框樣式
'borders' => [
'outline' => [
// 'borderStyle' => '\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THICK',
'borderStyle' => 'thick',
'color' => ['argb' => 'FFFF0000'],
],
],
'font' => [
'name' => '黑體',
'bold' => true,
'size' => 22
]
];
$sheet->getStyle('B1')->applyFromArray($styleArray);
$sheet->setTitle('測試'); // 設(shè)置工作簿標(biāo)題
# Xlsx類 將電子表格保存到文件
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
$writer = new Xlsx($spreadsheet);
$writer->save('1.xlsx');
讀取表格
<?php
# 載入composer自動加載文件
require 'vendor/autoload.php';
# 創(chuàng)建讀操作
$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader('Xlsx');
# 打開文件、載入excel表格
$spreadsheet = $reader->load('1.xlsx');
# 獲取活動工作薄
$sheet = $spreadsheet->getActiveSheet();
# 獲取 單元格值 和 坐標(biāo)
$cellC1 = $sheet->getCell('B2');
echo '值: ', $cellC1->getValue(),PHP_EOL;
echo '坐標(biāo): ', $cellC1->getCoordinate(),PHP_EOL;
$sheet->setCellValue('B2','歐陽鋒');
# 獲取 單元格值 和 坐標(biāo)
$cellC2 = $sheet->getCell('B2');
echo '值: ', $cellC2->getValue(),PHP_EOL;
echo '坐標(biāo): ', $cellC2->getCoordinate();
導(dǎo)入功能
<?php
$file = $_FILES['file']['tmp_name'];
# 載入composer自動加載文件
require 'vendor/autoload.php';
# 載入方法庫
require 'function.php';
# 創(chuàng)建讀操作
$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader('Xlsx');
# 打開文件、載入excel表格
$spreadsheet = $reader->load($file);
# 獲取活動工作薄
$sheet = $spreadsheet->getActiveSheet();
# 獲取總列數(shù)
$highestColumn = $sheet->getHighestColumn();
# 獲取總行數(shù)
$highestRow = $sheet->getHighestRow();
# 列數(shù) 改為數(shù)字顯示
$highestColumnIndex = \PhpOffice\PhpSpreadsheet\Cell\Coordinate::columnIndexFromString($highestColumn);
$log = [];
for($a=2;$a<$highestRow;$a++){
$title = $sheet->getCellByColumnAndRow(1,$a)->getValue();
$cat_fname = $sheet->getCellByColumnAndRow(2,$a)->getValue();
$cat_name = $sheet->getCellByColumnAndRow(3,$a)->getValue();
$price = $sheet->getCellByColumnAndRow(4,$a)->getValue();
$img = $sheet->getCellByColumnAndRow(5,$a)->getValue();
$cat_fid = find('shop_cat','id','name="'.$cat_fname.'"');
$cat_id = find('shop_cat','id','name="'.$cat_name.'"');
$data = [
'title' => $title,
'cat_fid' => $cat_fid['id'],
'cat_id' => $cat_id['id'],
'price' => $price,
'img' => $img,
'add_time' => time(),
];
// 數(shù)據(jù)處理
}
echo json_encode(['code'=>0,'msg'=>'成功','data'=>$log]);
xls / xlsx 文件下載
<?php
# 載入composer自動加載文件
require 'vendor/autoload.php';
# 給類文件的命名空間起個別名
use PhpOffice\PhpSpreadsheet\Spreadsheet;
# 實例化 Spreadsheet 對象
$spreadsheet = new Spreadsheet();
# 獲取活動工作薄
$sheet = $spreadsheet->getActiveSheet();
$sheet->setCellValue('A1','ID');
$sheet->setCellValue('B1','姓名');
$sheet->setCellValue('C1','年齡');
$sheet->setCellValue('D1','身高');
$sheet->setCellValueByColumnAndRow(1, 2, 1);
$sheet->setCellValueByColumnAndRow(2, 2, '歐陽克');
$sheet->setCellValueByColumnAndRow(3, 2, '18歲');
$sheet->setCellValueByColumnAndRow(4, 2, '188cm');
// MIME 協(xié)議,文件的類型,不設(shè)置,會默認(rèn)html
header('Content-Type:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition:attachment;filename=1.xlsx');// MIME 協(xié)議的擴展
header('Cache-Control:max-age=0');// 緩存控制
$writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet, 'Xlsx');
// php://output 它是一個只寫數(shù)據(jù)流, 允許你以 print 和 echo一樣的方式寫入到輸出緩沖區(qū)。
$writer->save('php://output');
導(dǎo)出封裝函數(shù)
<?php
# 載入composer自動加載文件
require 'vendor/autoload.php';
function CreateExcel($Data, $Header, $Path, $FileName, $LongNumberField = null)
{
$SpreadSheet = new \PhpOffice\PhpSpreadsheet\Spreadsheet();
$Sheet = $SpreadSheet->getActiveSheet();
if ($LongNumberField === null) {
array_unshift($Data, $Header);
$SpreadSheet->getDefaultStyle()->getNumberFormat()->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_NUMBER);
$Sheet->fromArray($Data);
} else {
$HeaderCount = count($Header);
for ($i = 0; $i < $HeaderCount; $i++) {
$Sheet->setCellValueByColumnAndRow($i + 1, 1, $Header[$i]);
}
$RowIndex = 2;
$DataCount = count($Data);
for ($i = 0; $i < $DataCount; $i++) {
$ColumnIndex = 1;
foreach ($Data[$i] as $Key => $Value) {
if (in_array($Key, $LongNumberField)) {
$Sheet->setCellValueExplicitByColumnAndRow($ColumnIndex, $RowIndex, $Value, \PhpOffice\PhpSpreadsheet\Cell\DataType::TYPE_STRING);
} else {
$Sheet->setCellValueByColumnAndRow($ColumnIndex, $RowIndex, $Value);
}
$ColumnIndex++;
}
$RowIndex++;
}
}
$Xlsx = new \PhpOffice\PhpSpreadsheet\Writer\Xlsx($SpreadSheet);
$Xlsx->save($Path . $FileName);
}
$Data = [
['id' => 1, 'name' => '張三', 'bank_card' => '123456789123456789'],
['id' => 2, 'name' => '李四', 'bank_card' => '123456123456789789'],
];
$Header = ['id', '姓名', '銀行卡號'];
$Path = 'D:\Work\Php\test.loc\\';
$FileName = 'Export.xlsx';
$LongNumberField = ['bank_card'];
CreateExcel($Data, $Header, $Path, $FileName, $LongNumberField);
原文鏈接:https://blog.csdn.net/qq_23564667/article/details/131608414
- 上一篇:沒有了
- 下一篇:沒有了
相關(guān)推薦
- 2022-12-12 Flutter手機權(quán)限檢查與申請實現(xiàn)方法詳解_Android
- 2023-04-11 Python單個項目列表轉(zhuǎn)換為整數(shù)的實現(xiàn)_python
- 2022-07-19 mybatis plus 代碼生成器配置
- 2022-08-03 goFrame的隊列g(shù)queue對比channel使用詳解_Golang
- 2022-04-11 記錄ElasticSearch在Linux中的常見問題
- 2022-05-04 ?Python?中?logging?模塊使用詳情_python
- 2023-11-17 Linux centos創(chuàng)建用戶以及賦予sudo權(quán)限
- 2023-04-18 go實現(xiàn)服務(wù)優(yōu)雅關(guān)閉的示例_Golang
- 欄目分類
-
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支