亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

php使用PhpSpreadsheet導(dǎo)出Excel表格的實例詳解

 更新時間:2024年01月17日 11:26:02   作者:L小臣  
這篇文章將給大家介紹php使用PhpSpreadsheet導(dǎo)出Excel表格的實例,文中通過代碼示例給大家講解的非常詳細,對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下

PhpSpreadsheet介紹

1、簡介

PhpSpreadsheet 是一個用純PHP編寫的庫,提供了一組類,使您可以讀取和寫入不同的電子表格文件格式

PhpSpreadsheet 提供了豐富的API接口,可以設(shè)置諸多單元格以及文檔屬性,包括樣式、圖片、日期、函數(shù)等等諸多應(yīng)用,總之你想要什么樣的Excel表格,PhpSpreadsheet都能做到。

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

2、安裝

使用 composer 安裝,在項目根目錄下執(zhí)行下面命令,即可安裝。本次是在ThinkPHP5框架里使用。

composer require phpoffice/phpspreadsheet

使用

1、引用和實例化

use PhpOffice\PhpSpreadsheet\Spreadsheet;

// 實例化 Spreadsheet 對象
$spreadsheet = new Spreadsheet();

2、獲取工作簿

getActiveSheet

// 獲取活動工作薄
$sheet = $spreadsheet->getActiveSheet();

單元格操作

1、獲取單元格

兩種獲取單元格方式

  • getCell
  • getCellByColumnAndRow 數(shù)字單元格坐標(biāo)獲取單元格
$cell = $sheet->getCell('A1');
$cell = $sheet->getCellByColumnAndRow(1,1); // 參數(shù):列、行

2、設(shè)置單元格的值

  • setValue
  • setCellValue
  • setCellValueByColumnAndRow
// 獲取單元格
$cellA = $sheet->getCell('A1');
// 設(shè)置單元格值
$cellA->setValue('姓名'); // 設(shè)置A1單元格的值為姓名
// 給A1設(shè)置值,參數(shù):單元格位置,值
$sheet->setCellValue('A1','ID');

//給A2賦值 hello
$sheet->setCellValueByColumnAndRow(1, 2, 'hello');

3、單元格文字樣式

  • getStyle 獲取單元格樣式
  • getFont 獲取單元格文字樣式
  • setBold 設(shè)置文字粗細
  • setName 設(shè)置文字字體
  • setSize 設(shè)置文字大小
//將A1至D1單元格設(shè)置成粗體
$sheet->getStyle('A1:D1')->getFont()->setBold(true);
//將A1單元格設(shè)置成粗體,黑體,10號字
$sheet->getStyle('A1')->getFont()->setBold(true)->setName('黑體')->setSize(10);

4、單元格文字顏色

  • getColor() 獲取坐標(biāo)顏色
  • setRGB() 設(shè)置字體顏色(顏色值帶#)
  • getRGB() 獲取字體顏色
  • setARGB() 設(shè)置字體顏色(顏色值不帶#)
  • getARGB() 獲取字體顏色
// B3單元格設(shè)置顏色
$sheet->getStyle('B3')->getFont()->getColor()->setRGB('#AEEEEE');
$sheet->getStyle('B3')->getFont()->getColor()->setARGB('FFFF0000');

5、單元格內(nèi)文字換行

  • setWrapText 設(shè)置文本里的\n符合為:換行
//使用 \n 進行單元格內(nèi)換行,相當(dāng)于 Alt+Enter
$sheet->getCell('A1')->setValue("hello\nworld");
$sheet->getStyle('A1')->getAlignment()->setWrapText(true);

6、單元格列和行

  • getColumnDimension 獲取一列
  • getWidth 獲取一列的寬度
  • setWidth 設(shè)置一列的寬度
  • setAutoSize 設(shè)置一列的寬度自動調(diào)整
  • getDefaultColumnDimension 獲取一列的默認值
//設(shè)置默認列寬20
$sheet->getDefaultColumnDimension()->setWidth(20);

//將A列寬度設(shè)置成20
$sheet->getColumnDimension('A')->setWidth(20);

//自動計算列寬
$sheet->getColumnDimension('A')->setAutoSize(true);
  • getRowDimension 獲取一行
  • getRowHeight 獲取一行的高度
  • setRowHeight 設(shè)置一行的高度
//設(shè)置默認行高
$sheet->getDefaultRowDimension()->setRowHeight(20);

//設(shè)置第一行行高為20pt
$sheet->getRowDimension('1')->setRowHeight(20);
  • getHighestColumn 獲取總列數(shù)
  • getHighestRow 獲取總行數(shù)
echo $sheet->getHighestColumn();
echo $sheet->getHighestRow();

7、單元格樣式

  • applyFromArray 設(shè)置單元格樣式
  • 對齊
use PhpOffice\PhpSpreadsheet\Style\Alignment;
// 居中對齊
$styleArray = [
    'alignment' => [
        'horizontal' => Alignment::HORIZONTAL_CENTER, //水平居中
        'vertical' => Alignment::VERTICAL_CENTER, //垂直居中
    ],
];
$worksheet->getStyle('A1')->applyFromArray($styleArray);
  • 邊框
    上 下 左 右 全部 邊框都可設(shè)置
//紅色邊框
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,開始的坐標(biāo)。
$sheet->getCell('A1')->setValue('西安');
// 拆分
$sheet->mergeCells('A1:C4');
$sheet->unmergeCells('A1:A4');

9、超鏈接

  • getHyperlink 獲取單元格鏈接
  • setUrl 設(shè)置單元格鏈接
$spreadsheet->getActiveSheet()->setCellValue('E6', 'xxxx的博客');
$spreadsheet->getActiveSheet()->getCell('E6')->getHyperlink()->setUrl('https://blog.csdn.net/u011167662');

10、使用函數(shù)

SUM求和A;VERAGE平均數(shù);MIN最小值;MAX最大值

$sheet->setCellValue('A3', '=SUM(A1:A2)');
$sheet->setCellValue('A3', '=MAX(A1:A2)');

11、批量賦值

  • fromArray 從數(shù)組中的值填充工作表

參數(shù)1:數(shù)據(jù)(數(shù)組)
參數(shù)2:去除某個值
參數(shù)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 文件導(dǎo)出

  • IOFactory::createWriter 寫入到文件
use PhpOffice\PhpSpreadsheet\IOFactory;
// MIME 協(xié)議,文件的類型,不設(shè)置,會默認html
header('Content-Type:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); 
// MIME 協(xié)議的擴展
$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 文件導(dǎo)出

// MIME 協(xié)議,文件的類型,不設(shè)置,會默認html
header('Content-Type:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); 
// MIME 協(xié)議的擴展
$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、設(shè)置工作簿標(biāo)題

  • setTitle
$sheet->setTitle('標(biāo)題1');

實戰(zhàn)

1、導(dǎo)出簡單數(shù)據(jù)(使用 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導(dǎo)出';
		$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導(dǎo)出.xlsx');
		header('Cache-Control: max-age=0');

		$write = IOFactory::createWriter($spreadsheet, 'Xlsx');
		$write->save('php://output');
	}
}

導(dǎo)出表格截圖:

2、導(dǎo)出數(shù)據(jù)

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);// 行高
		// 標(biāo)題
		$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++;
	    }
	    // 工作簿標(biāo)題
	    $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');
	}

以上就是php使用PhpSpreadsheet導(dǎo)出Excel表格的實例詳解的詳細內(nèi)容,更多關(guān)于php PhpSpreadsheet導(dǎo)出Excel的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評論