php使用PhpSpreadsheet导出Excel表格详解

这篇具有很好参考价值的文章主要介绍了php使用PhpSpreadsheet导出Excel表格详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文会介绍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');
	}
}

导出表格截图:phpspreadsheet导出,php,excel,Spreadsheet
2、导出数据
liu_system_log 管理员操作记录表文章来源地址https://www.toymoban.com/news/detail-695245.html

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');
	}

到了这里,关于php使用PhpSpreadsheet导出Excel表格详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java中使用JXLS工具类导出复杂Excel表格

    前言    在项目开发中,我们会遇到各种文件导出的开发场景,但是这种情况并都不常用,于是本人将自己工作中所用的代码封装成工具类,旨在记录工具类使用方法和技术分享。 一、Jxls的简介    Jxls是一个简单的、轻量级的excel导出库,使用特定的标记在excel模板文件中来

    2024年02月03日
    浏览(48)
  • Java 使用hutool工具进行导出导入excel表格(代码很简单)

    创建一个Controller进行测试 

    2024年02月07日
    浏览(65)
  • 【工具插件类教学】NPOI插件使用Excel表格的导入和导出(包含图片)

    目录 一.导入Excel 解析读取 1.选择导入的目标文件 2.解析读取导入的文件

    2024年01月16日
    浏览(53)
  • [软件工具]AI软件离线表格识别工具使用教程图像转excel转表格可复制文字表格导出实时截图识别成表格

    【官方框架地址】 https://github.com/PaddlePaddle/PaddleOCR.git 【算法介绍】 PaddleOCR是一个基于PaddlePaddle框架的开源光学字符识别(OCR)工具库,由百度公司开发。它提供了一套完整的OCR解决方案,包括文字检测、文字识别以及版面分析等功能。PaddleOCR旨在帮助开发者和研究者快速构

    2024年01月18日
    浏览(55)
  • table 导出表格 Excel

    在请求中需要设置 responseType: blob 并且核心在于函数: 在页面中发送请求: 在 element 的表格组件中对选中的行进行导出

    2024年02月15日
    浏览(39)
  • EasyPio导入导出excel表格

    EasyPoi是一个功能强大且易于使用的Java Excel操作框架,其主要特点如下: 简单易用:EasyPoi提供简洁而直观的API,使Java开发人员能够轻松地进行Excel导入导出操作,无需繁琐的代码和复杂的配置。 支持多种数据源:EasyPoi支持从数据库、List集合、Map等各种数据源快速生成Excel文

    2024年02月12日
    浏览(57)
  • javascript 导出表格的excel

    一个php网站的表格,需要增加导出excel的功能, 因对web开发不甚了解,开始想着用php导出, 搜索一番发现比较复杂,而且我的表格里已经有数据了, 如果导出又要去库中获取一次,不是负担加倍, 可否把现有表格数据,直接导出来? 答案是肯定的,用js在前端导出 开源js组

    2024年02月16日
    浏览(36)
  • axios请求、 Excel 表格导出

    注:基于axios 直接请求后端接口,导出Excel 表格

    2024年02月11日
    浏览(36)
  • Vue前端表格导出Excel文件

    分享一个Vue前端导出Excel文件的方法。记录学习! 功能需求 :将表格的全部数据导出Excel格式的文件 前端 :Vue3+Element-Plus 这个导出方法全部为前端操作,后端只需要传入表格数据到前端即可(基础的多表查询,用的内连接) 2.1 核心方法 将这个导出方法单独封装出来,带一

    2023年04月24日
    浏览(91)
  • layui 导出 Excel表格的方法

    如下图:  也可设置数据导出按钮,通过方法导出任意数据,方法如下: 语法: 示例: 该方法也可以不用依赖table的实例,可直接导出任意数据: 1、下载插件放入项目中   2、前端界面设置button按钮 3、获取点击事件 4、table分页,导出当前页内容 5、导出全部数据

    2024年02月11日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包