日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 PHP其他 正文

PHP使用PhpSpreadsheet庫的操作Excel表格

作者:小吳-斌 更新時間: 2023-08-30 PHP其他

一、PhpSpreadsheet 介紹

PhpSpreadsheet是一個用純PHP編寫的庫,提供了一組類,使您可以讀取和寫入不同的電子表格文件格式
PhpSpreadsheet提供了豐富的API接口,可以設置諸多單元格以及文檔屬性,包括樣式、圖片、日期、函數等等諸多應用,總之你想要什么樣的Excel表格,PhpSpreadsheet都能做到

使用 PhpSpreadsheet 開發的PHP要求 7.1或更高版本
PhpSpreadsheet 支持鏈式操作

PhpSpreadsheet 官方網址:https://phpspreadsheet.readthedocs.io

PhpSpreadsheet 安裝

composer require phpoffice/phpspreadsheet

二、基礎使用

<?php
	# 載入composer自動加載文件
	require 'vendor/autoload.php';
	# 給類文件的命名空間起個別名
	use PhpOffice\PhpSpreadsheet\Spreadsheet;
	# 實例化 Spreadsheet 對象
	$spreadsheet = new Spreadsheet();
	# 獲取活動工作薄
	$sheet = $spreadsheet->getActiveSheet();

	# 獲取單元格
	$cellA = $sheet->getCell('A1');
	# 設置單元格值
	$cellA->setValue('歐陽克');

	# 獲取單元格
	$cellB = $sheet->getCellByColumnAndRow(1,2);
	# 設置單元格值
	$cellB->setValue('黃蓉');

	# 獲取設置單元格,鏈式操作
	$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','網址');
$sheet->setCellValue('G1','語文分數');
$sheet->setCellValue('H1','數學分數');
$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)'); //  總數
//公式
//平均數 =AVERAGE(A1:G1)
//最小數 MIN(A1:G1
//最大數 =MAX(A1:G1)    使用轉義字符  \=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)'); //  總數

//getStyle 獲取單元格樣式
//getFont 獲取單元格文字樣式
//setBold 設置文字粗細
//setName 設置文字字體
//setSize 設置文字大小
//getColor() 獲取坐標顏色
//setRGB() 設置字體顏色
//getRGB() 獲取字體顏色
//setARGB() 設置字體顏色
//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 設置格式
$sheet->getStyle('E3')->getNumberFormat()->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_DATE_YYYYMMDD);

//setWrapText 設置文本里的\n符合為:換行
$sheet->setCellValue('A1',"歐陽克\n黃蓉");
$sheet->getStyle('A1')->getAlignment()->setWrapText(true);

//getHyperlink 獲取單元格鏈接
//setUrl 設置單元格鏈接

$sheet->setCellValue('F2','www.php.cn');
$sheet->getCell('F2')->getHyperlink()->setUrl('http://www.php.cn');


//fromArray 從數組中的值填充工作表
//參數1:數據(數組)
//參數2:去除某個值
//參數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 設置一列的寬度
//setAutoSize 設置一列的寬度自動調整
//getDefaultColumnDimension 獲取一列的默認值
echo $sheet->getColumnDimension('A')->getWidth().PHP_EOL;
$sheet->getColumnDimension('A')->setWidth(30);
$sheet->getColumnDimension('B')->setAutoSize(true);
$sheet->getDefaultColumnDimension()->setWidth(20);

//getRowDimension 獲取一行
//getRowHeight 獲取一行的高度
//setRowHeight 設置一行的高度
echo $sheet->getRowDimension(1)->getRowHeight().PHP_EOL;
$sheet->getRowDimension(1)->setRowHeight(100);
$sheet->getDefaultRowDimension()->setRowHeight(1);


//getHighestColumn 獲取總列數
//getHighestRow 獲取總行數
echo $sheet->getHighestColumn().PHP_EOL;
echo $sheet->getHighestRow().PHP_EOL;

//單元格樣式  applyFromArray
$styleArray = [
    // use PhpOffice\PhpSpreadsheet\Style\Alignment; 文件里常量,就是參數
    // Alignment::HORIZONTAL_CENTER 水平居中
    // Alignment::VERTICAL_CENTER	垂直居中
    'alignment' => [
        // 'horizontal' => Alignment::HORIZONTAL_CENTER, //水平居中
        // 'vertical' => Alignment::VERTICAL_CENTER, //垂直居中
        'horizontal' => 'center', //水平居中
        'vertical' => 'center', //垂直居中
    ],
    // use PhpOffice\PhpSpreadsheet\Style\Border; 文件里常量,就是參數
    // 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('測試'); // 設置工作簿標題
# Xlsx類 將電子表格保存到文件
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
$writer = new Xlsx($spreadsheet);
$writer->save('1.xlsx');

讀取表格

 <?php
	# 載入composer自動加載文件
	require 'vendor/autoload.php';

	# 創建讀操作
	$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader('Xlsx');
	# 打開文件、載入excel表格
	$spreadsheet = $reader->load('1.xlsx');
	# 獲取活動工作薄
	$sheet = $spreadsheet->getActiveSheet();

	# 獲取 單元格值 和 坐標
	$cellC1 = $sheet->getCell('B2');
	echo '值: ', $cellC1->getValue(),PHP_EOL;
	echo  '坐標: ', $cellC1->getCoordinate(),PHP_EOL;

	$sheet->setCellValue('B2','歐陽鋒');

	# 獲取 單元格值 和 坐標
	$cellC2 = $sheet->getCell('B2');
	echo '值: ', $cellC2->getValue(),PHP_EOL;
	echo  '坐標: ', $cellC2->getCoordinate();

導入功能

<?php
	$file = $_FILES['file']['tmp_name'];
	# 載入composer自動加載文件
	require 'vendor/autoload.php';
	# 載入方法庫
	require 'function.php';

	# 創建讀操作
	$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader('Xlsx');
	# 打開文件、載入excel表格
	$spreadsheet = $reader->load($file);
	# 獲取活動工作薄
	$sheet = $spreadsheet->getActiveSheet();

	# 獲取總列數
	$highestColumn = $sheet->getHighestColumn();
	# 獲取總行數
	$highestRow = $sheet->getHighestRow();

	# 列數 改為數字顯示
	$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(),
		];
		// 數據處理
		
	}
	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 協議,文件的類型,不設置,會默認html
	header('Content-Type:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');	
	header('Content-Disposition:attachment;filename=1.xlsx');// MIME 協議的擴展	
	header('Cache-Control:max-age=0');// 緩存控制

	$writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet, 'Xlsx');
	// php://output 它是一個只寫數據流, 允許你以 print 和 echo一樣的方式寫入到輸出緩沖區。 
	$writer->save('php://output');

導出封裝函數

<?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

  • 上一篇:沒有了
  • 下一篇:沒有了
欄目分類
最近更新