PHP phpoffice/phpspreadsheet导出excel

PHP phpoffice/phpspreadsheet导出excel

由于PHPExcel已经被废弃在PHP7.2中已经无法获取更新,官方重新开了一个新包phpspreadsheet
注意:这里使用的是tp6框架做测试

第一步:使用composer在根项目下安装phpspreadsheet
安装命令:composer require phpoffice/phpspreadsheet
安装成功后,会在vendor目录下成一个目录:phpoffice
在这里插入图片描述
第二步:后端代码处理
注意:顶部引入第三方类库
use PhpOffice\PhpSpreadsheet\Spreadsheet;
在这里插入图片描述

- 代码:
/*

  /*
    * 数据处理
    */
    public function derive()
    {
        //需导出的数据,多条数据
        $data = [
            [
                'time' => '时间',
                'order_num' => '付款人数',
                'did' => '付款订单数',
                'total_price' => '付款金额',
                'good_num' => '付款件数'
            ],
            [
                'time' => '时间',
                'order_num' => '付款人数',
                'did' => '付款订单数',
                'total_price' => '付款金额',
                'good_num' => '付款件数'
            ]
        ];
        $xlsName = "测试" . date("YmdHis", time());//文件名称
        $head = ['日期', '付款人数', '付款订单数', '付款金额', '付款件数'];// 表头信息
        //表字段和表头信息一一对应
        $keys = ['time', 'order_num', 'did', 'total_price', 'good_num'];
        $this->downloadExcel($xlsName, $data, $head, $keys);// 传递参数

    }
 /*
     * 导出数据
     */
    public function downloadExcel($name, $data = [], $head = [], $keys = [])
    {
        $count = count($head);  //计算表头数量
        $spreadsheet = new Spreadsheet();
        $sheet = $spreadsheet->getActiveSheet();

        for ($i = 65; $i < $count + 65; $i++) {     //数字转字母从65开始,循环设置表头:
            $sheet->setCellValue(strtoupper(chr($i)) . '1', $head[$i - 65]);
        }
        //循环设置单元格:
        foreach ($data as $key => $item) {
            //$key+2,因为第一行是表头,所以写到表格时   从第二行开始写
            for ($i = 65; $i < $count + 65; $i++) {
                //数字转字母从65开始:
                $sheet->setCellValue(strtoupper(chr($i)) . ($key + 2), $item[$keys[$i - 65]]);
                //固定列宽
                $spreadsheet->getActiveSheet()->getColumnDimension(strtoupper(chr($i)))->setWidth(20);
            }

        }
         $names = $name;
        //utf-8转unicode格式
        $name = iconv('UTF-8', 'UCS-2BE', $name);
        $len = strlen($name);

        $str = '';

        for ($i = 0; $i < $len - 1; $i = $i + 2) {

            $c = $name[$i];

            $c2 = $name[$i + 1];

            if (ord($c) > 0) {

                $str .= '\u' . base_convert(ord($c), 10, 16) . str_pad(base_convert(ord($c2), 10, 16), 2, 0, STR_PAD_LEFT);

            } else {

                $str .= '\u' . str_pad(base_convert(ord($c2), 10, 16), 4, 0, STR_PAD_LEFT);

            }

        }

//        header('Content-Type: application/vnd.ms-excel');
        header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');

        header('Data-Type: binary');
        //前端导出数据根据这个unicode格式解析为中文
        header('Data-Filename: ' . $str);
        header('Content-Disposition: attachment;filename="' . $names . '.xlsx"');
        header('Cache-Control: max-age=0');
        header('Access-Control-Expose-Headers:Data-Type,Data-Filename');
       
        //header('Content-Type: application/vnd.ms-excel');
        //header('Content-Disposition: attachment;filename="' . $name . '.xlsx"');
        //header('Cache-Control: max-age=0');
        $writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet, 'Xlsx');
        $writer->save('php://output');
        exit;

    }

设置Excel表格样式

$sheet = $spreadsheet->getActiveSheet();


 // 合并单元格
$sheet->mergeCells('A1:L1');
  
// 设置单元格值
$sheet->setCellValue('A1',$value);
  
//设值行高
$sheet->getRowDimension('1')->setRowHeight(16);
  
//设置表头信息字体大小
$sheet->getCell('A1')->getStyle()->getFont()->setSize(12);
  
//设置所有字体
$spreadsheet->getDefaultStyle()->getFont()->setName('微软雅黑');
  
//设置水平默认对齐方式
$spreadsheet->getDefaultStyle()->getAlignment()
   ->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER);
   
//设置垂直默认对齐方式
$spreadsheet->getDefaultStyle()->getAlignment()
	   ->setVertical(\PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_CENTER);
//设置外边框和内边框
$styleArray = [
			   'borders' => [
				   'outline' => [
					   'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THICK,
				   ],
				   'inside' =>[
					   'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN,
				   ]
			   ],
		   ];

$sheet->getStyle('A1:L20')->applyFromArray($styleArray);
//设置列宽
$spreadsheet->getActiveSheet()->getColumnDimension('H')->setWidth(14);
   
//设置单元格为文本格式
$sheet->getCell('A'.$row)->getStyle()->getNumberFormat()->setFormatCode(NumberFormat::FORMAT_TEXT);

//新增一个sheet
$sheet = $spreadsheet->createSheet();
//设置字体颜色
$sheet->getCell("B$startRow")->getStyle()->getFont()
                    ->getColor()->setARGB(\PhpOffice\PhpSpreadsheet\Style\Color::COLOR_RED);
 //字体加粗
    $sheet->getCell("A$startRow")->getStyle()->getFont()->setBold(true);                   
//设置单元格背景色
   $spreadsheet->getActiveSheet()->getStyle($column .($beginRow))->getFill()
                        ->setFillType(\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID)
                        ->getStartColor()->setARGB('FF9800');
//设置公式
$sheet->setCellValue(
                        "C1",
                        "=SUM(F1:F10)"
                    );
                   
		
		
		
		
		

到这PHP 使用phpoffice/phpspreadsheet导出excel就完成了,后需可以根据自己业务需要做对应的调整

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要使用PhpSpreadsheet导出Excel文件,你可以按照以下步骤进行操作: 1. 首先,实例化一个Spreadsheet对象,例如: ```php use PhpOffice\PhpSpreadsheet\Spreadsheet; $spreadsheet = new Spreadsheet(); ``` \[1\] 2. 接下来,设置文件的扩展名和格式,以及设置相应的HTTP头信息,例如: ```php $format = 'Xlsx'; // 设置文件格式为Xlsx或Xls if ($format == 'Xlsx') { header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); } elseif ($format == 'Xls') { header('Content-Type: application/vnd.ms-excel'); } $name = 'example'; // 设置文件名 header("Content-Disposition: attachment;filename=" . $name . '.' . strtolower($format)); header('Cache-Control: max-age=0'); ``` \[2\] 3. 创建一个Writer对象,并将Spreadsheet对象保存到输出流中,例如: ```php use PhpOffice\PhpSpreadsheet\IOFactory; $objWriter = IOFactory::createWriter($spreadsheet, $format); $objWriter->save('php://output'); ``` \[2\] 这样,你就可以通过PhpSpreadsheet导出Excel文件了。记得在保存文件之后使用`exit`函数来终止脚本的执行。 如果你想导出为xls文件,可以按照以下步骤进行操作: 1. 设置相应的HTTP头信息,例如: ```php header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); ``` \[3\] 2. 设置文件名和缓存控制,例如: ```php $filename = date('Y-m-d').'工作报告单'; header('Content-Disposition: attachment;filename='.$filename .'.xls'); header('Cache-Control:max-age=0'); ``` \[3\] 3. 创建一个Writer对象,并将Spreadsheet对象保存到输出流中,例如: ```php $write = IOFactory::createWriter($spreadsheet, 'Xls'); $write->save('php://output'); ``` \[3\] 这样,你就可以使用PhpSpreadsheet导出xls文件了。记得在保存文件之后使用`exit`函数来终止脚本的执行。 #### 引用[.reference_title] - *1* *3* [php使用PhpSpreadsheet导出Excel表格详解](https://blog.csdn.net/weixin_44888397/article/details/131484139)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [PHP使用PhpSpreadsheet 导出excel文件](https://blog.csdn.net/huafengjie/article/details/130186773)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值