本文作者:心月

实例演示PhpSpreadsheet的单元格设置教程

心月IT博客 11-26
实例演示PhpSpreadsheet的单元格设置教程摘要:PhpSpreadsheet是PHPExcel的升级版本,也就是说PHPExcel有的功能,PhpSpreadsheet也都可以实现,而且PHPExcel已经不再维护了,所以在以后要操作excel将要使用PhpSpreadsheet。

        PhpSpreadsheet is the next version of PHPExcel. It breaks compatibility to dramatically improve the code base quality (namespaces, PSR compliance, use of latest PHP language features, etc.).

        Because all efforts have shifted to PhpSpreadsheet, PHPExcel will no longer be maintained. All contributions for PHPExcel, patches and new features, should target PhpSpreadsheet master branch.


        下面就通过实例来演示 PhpSpreadsheet 如何设置单元格。

1、在项目中引入PhpSpreadsheet

PhpSpreadsheet中使用的是命名空间,最好可以通过composer引入:

composer require phpoffice/phpspreadsheet

        PHP version 7.1 or newer to develop using PhpSpreadsheet. Other requirements, such as PHP extensions, are enforced by composer. 

        官方文档也说了,需要用composer引入,不过值得一提的是,PhpSpreadsheet的使用要求php的版本在7.1以上。

        PhpSpreadsheet的核心文件在src文件夹中,我们在使用它操作excel时,用的也都是这文件里面的类。

PhpSpreadsheet核心文件

2、实例演示

<?php
//如果你的项目中不能自动引用,通过composer安装后在vendor文件夹下有个autoload.php文件
//在项目中引入autoload.php 文件就可以通过使用命名空间引入 PhpSpreadsheet 相关的功能类
require_once 'vendor/autoload.php';

use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Style\Color;       //设置字体颜色
use PhpOffice\PhpSpreadsheet\Style\Alignment;   //设置对齐方式
use PhpOffice\PhpSpreadsheet\Style\Border;      //设置Border样式
use PhpOffice\PhpSpreadsheet\Style\NumberFormat;//数字格式化
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;       //导出XLSX文件
use PhpOffice\PhpSpreadsheet\Style\Fill;        //设置背景色


 $spreadsheet = new Spreadsheet();
 $worksheet = $spreadsheet->getActiveSheet();

 // 字体设置
//A1:F1:粗体 Arial字体 字体大小12
$spreadsheet->getActiveSheet()->getStyle('A1:F1')->getFont()->setBold(true)->setName('Arial')
    ->setSize(12);
$spreadsheet->getActiveSheet()->setCellValue('A1', 'Arial字体,加粗,字体大小12');

//A2:粗体
$spreadsheet->getActiveSheet()->getStyle('A2')->getFont()->setBold(true);
$spreadsheet->getActiveSheet()->setCellValue('A2', '字体加粗');

//A3字体设置为红色
$spreadsheet->getActiveSheet()->getStyle('A3')
    ->getFont()->getColor()->setARGB(Color::COLOR_RED);
$spreadsheet->getActiveSheet()->setCellValue('A3', '设置字体为红色');

//设置默认列宽度为12
$spreadsheet->getActiveSheet()->getDefaultColumnDimension()->setWidth(12);
$spreadsheet->getActiveSheet()->setCellValue('C2', '设置默认列宽度为12');

//A列宽度为30
$spreadsheet->getActiveSheet()->getColumnDimension('A')->setWidth(30);
$spreadsheet->getActiveSheet()->setCellValue('A4', '设置A列宽度为30');

//B列自动计算宽度
$spreadsheet->getActiveSheet()->getColumnDimension('B')->setAutoSize(true);
$spreadsheet->getActiveSheet()->setCellValue('B1', '设 置 B 列 自 动 计 算 宽 度');

//设置第6行的高度为100
$spreadsheet->getActiveSheet()->getRowDimension('10')->setRowHeight(100);
$spreadsheet->getActiveSheet()->setCellValue('A6', '设置第6行的高度为100');

//设置默认行高为30
$spreadsheet->getActiveSheet()->getDefaultRowDimension()->setRowHeight(30);
$spreadsheet->getActiveSheet()->setCellValue('C13', '设置默认列高度为30');


// 设置C1单元格水平居中对齐
$styleArray = [
    'alignment' => [
        'horizontal' => Alignment::HORIZONTAL_CENTER,
    ],
];
$worksheet->getStyle('C1')->applyFromArray($styleArray);
$spreadsheet->getActiveSheet()->setCellValue('C1', 'C1居中');


//合并单元格 A7到F7
$spreadsheet->getActiveSheet()->mergeCells('A7:F7');
$spreadsheet->getActiveSheet()->setCellValue('A7', '合并单元格A7到F7');

//将A1到F15区域添加红色边框
$styleArray = [
    'borders' => [
        'outline' => [
            'borderStyle' => Border::BORDER_THICK,
            'color' => ['argb' => 'FFFF0000'],
        ],
    ],
];
$worksheet->getStyle('A1:F15')->applyFromArray($styleArray);

//将B10到E10区域添加黑色allBorders
$borderStyle = [
    'borders' => array(
        'allBorders' => array(
            'borderStyle' => Border::BORDER_THICK,
            'color' => ['argb' => '00000000'],
        ),
    ),
];
$worksheet->getStyle('B10:E14')->applyFromArray($borderStyle);

//设置当前工作表标题
$spreadsheet->getActiveSheet()->setTitle('test-sheet');

//设置A5单元格的内容为:2019-11-26
$spreadsheet->getActiveSheet()
    ->setCellValue('A5', '2019-11-26');
//设置A5单元格为日期格式
$spreadsheet->getActiveSheet()->getStyle('A5')
    ->getNumberFormat()
    ->setFormatCode(NumberFormat::FORMAT_DATE_YYYYMMDD2);

//使用\n进行单元格内换行,相当于(ALT+"Enter")。
$spreadsheet->getActiveSheet()->getCell('A8')->setValue("单元格内\n换行");
$spreadsheet->getActiveSheet()->getStyle('A8')->getAlignment()->setWrapText(true);

//为单元格设置超链接
$spreadsheet->getActiveSheet()->setCellValue('C9', '给单元格设置超链接');
$spreadsheet->getActiveSheet()->getCell('C9')->getHyperlink()->setUrl('https://www.baidu.com');

//设置F11为A11到E11之间的总和
$spreadsheet->getActiveSheet()->setCellValue('A11', 1);
$spreadsheet->getActiveSheet()->setCellValue('B11', 2);
$spreadsheet->getActiveSheet()->setCellValue('C11', 3);
$spreadsheet->getActiveSheet()->setCellValue('D11', 4);
$spreadsheet->getActiveSheet()->setCellValue('E11', 5);
//计算总和
$spreadsheet->getActiveSheet()->setCellValue('F11', '=SUM(A11:E11)');

//冻结单元格
$spreadsheet->getActiveSheet()->freezePane('B2');

//设置背景色
$spreadsheet->getActiveSheet()->getStyle('A12:F12')->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setRGB('ffff00');

$spreadsheet->getProperties()
    ->setCreator("心月")    //作者
    ->setLastModifiedBy("心月") //最后修改者
    ->setTitle("test sheet Excel")  //标题
    ->setSubject("test Excel") //副标题
    ->setDescription("test excel description")  //描述
    ->setKeywords("excel") //关键字
    ->setCategory("test"); //分类

//输出保存
//文件名
$fileName = date('YmdHis',time()).'.xlsx';

header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="'. $fileName .'"');
header('Cache-Control: max-age=0');

header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past
header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); // always modified
header('Cache-Control: cache, must-revalidate'); // HTTP/1.1
header('Pragma: public'); // HTTP/1.0

//输出
$writer = new Xlsx($spreadsheet);
$writer->save('php://output');

exit;

实例效果:

实例演示PhpSpreadsheet的单元格设置教程

        通过实例可以发现,PhpSpreadsheet 比PHPExcel更简洁,不过 PhpSpreadsheet 在使用的时候感觉有点小问题,

        比如,单独给某一行设置行高没问题,但设置默认行高效果不大,在示例中虽然设置了默认行高为30,但导出的excel表格中的行高依然还是15,

        在有,自动列宽计算,B列设置了自动计算列宽,虽然宽度有变化,但并没有让所有的文本都在单元格内显示出来。

        好了,PhpSpreadsheet 的单元格设置就演示到这吧,要熟悉掌握 PhpSpreadsheet 还是得靠自己多练习。

文章版权及转载声明:

本文由 心月IT技术博客 博主整理于 11-26
若转载请注明原文及出处:https://www.xinyueseo.com/other/527.html

分享到:
赞(
发表评论
快捷输入:

验证码

    评论列表 (有 0 条评论,人围观)参与讨论