php就将数组数据转成表格

  1. 前端数组形式

    [{
      "筑创星": "景宁筑商刘丹商务服务工作室",
      "姓名": "刘丹",
      "手机号": "15686868000",
      "任务报名时间": "2020-01-06 12:00:05",
      "申请验收时间": "2020-01-06 12:00:06",
      "验收时间": "2020-01-06 12:00:07",
      "验收时间范围": "2020-01-06 至 2020-02-03",
      "结算任务佣金": "2999"
    }]
    
  2. JSON.stringify()转json字符串

  3. 后端接口使用PHPExcel实例:将表格存储到服务器,然后返回一个链接提供下载

    public function dataExportExcel($data = [],$name = '结算单') {
        $data = isset($_REQUEST['data']) ? $_REQUEST['data'] : ''; // 获取表格数据,json编码后的
        $data = json_decode($data);
        $excel = new \PHPExcel(); //引用phpexcel
        iconv('UTF-8', 'gb2312', $name); //针对中文名转码
        // 设置单元格居中对齐
        $excel->getDefaultStyle()->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
        $excel->setActiveSheetIndex(0);
        $excel->getActiveSheet()->setTitle($name); //设置表名
        $excel->getActiveSheet()->getDefaultRowDimension()->setRowHeight(18);
        $excel->getActiveSheet()->getColumnDimension('B')->setWidth(80);
        // $excel->getActiveSheet()->freezePaneByColumnAndRow(1,1);//冻结首列
        $excel->getActiveSheet()->protectCells('A1:A2', 'order_id');
        //受保护的地址列
        //$excel->getActiveSheet()->protectCells('A1:A7', 'password');
        //解除指定列锁定
        // $excel->getActiveSheet()->getStyle('B1:B7')->getProtection()->setLocked(\PHPExcel_Style_Protection::PROTECTION_UNPROTECTED);
        $excel->getActiveSheet()->getStyle('H')->getProtection()->setLocked(\PHPExcel_Style_Protection::PROTECTION_UNPROTECTED);
        //设置sheet锁定属性
        $excel->getActiveSheet()->getProtection()->setSheet(true);
        // 设置单元格的宽度
        $excel->getActiveSheet()->getColumnDimension('A')->setWidth(30);#设置单元格宽度
        $excel->getActiveSheet()->getColumnDimension('B')->setWidth(10);#设置单元格宽度
        $excel->getActiveSheet()->getColumnDimension('C')->setWidth(15);#设置单元格宽度
        $excel->getActiveSheet()->getColumnDimension('D')->setWidth(20);#设置单元格宽度
        $excel->getActiveSheet()->getColumnDimension('E')->setWidth(20);#设置单元格宽度
        $excel->getActiveSheet()->getColumnDimension('F')->setWidth(20);#设置单元格宽度
        $excel->getActiveSheet()->getColumnDimension('G')->setWidth(30);#设置单元格宽度
        $excel->getActiveSheet()->getColumnDimension('H')->setWidth(15);#设置单元格宽度
        //设置表头
        $excel->setActiveSheetIndex(0)
            ->setCellValue('A1', '筑创星')
            ->setCellValue('B1', '姓名')
            ->setCellValue('C1', '手机号')
            ->setCellValue('D1', '任务报名时间')
            ->setCellValue('E1', '申请验收时间')
            ->setCellValue('F1', '验收时间')
            ->setCellValue('G1', '验收时间范围')
            ->setCellValue('H1', '结算任务佣金');
        foreach ($data as $k => $v) {
            //从第二行开始写入数据(第一行为表头)
            //$excel->getActiveSheet()->setCellValue('A'.($k+2),$v['gid']);
            // $excel->getActiveSheet()->setCellValue('A' . ($k + 2), $v['id']."\t");
            $excel->getActiveSheet()->setCellValue('A' . ($k + 2), $v->筑创星."\t");
            $excel->getActiveSheet()->setCellValue('B' . ($k + 2), $v->姓名);
            $excel->getActiveSheet()->setCellValue('C' . ($k + 2), $v->手机号 ?: '');
            $excel->getActiveSheet()->setCellValue('D' . ($k + 2), $v->任务报名时间);
            $excel->getActiveSheet()->setCellValue('E' . ($k + 2), $v->申请验收时间);
            $excel->getActiveSheet()->setCellValue('F' . ($k + 2), $v->验收时间);
            $excel->getActiveSheet()->setCellValue('G' . ($k + 2), $v->验收时间范围);
            $excel->getActiveSheet()->setCellValue('H' . ($k + 2), $v->结算任务佣金);
        }
        //设置单元格边框
        $excel->getActiveSheet()->getStyle("A1:E9")->getBorders()->getAllBorders()->setBorderStyle();
        ob_end_clean();
        header('Content-Type: application/vnd.ms-excel');
        header('Content-Disposition: attachment;filename="' . $name . '.xls"');
        header('Cache-Control: max-age=0');
        $res_excel = PHPExcel_IOFactory::createWriter($excel, 'Excel2007');
        $res_excel->save('php://output');
    }
    
PHPExcel额外的方法(关于设置表格属性的)

PHPExcel-设置表格字体颜色背景样式、数据格式、对齐方式、添加图片、批注、文字块、合并拆分单元格、单元格密码保护等等

原文链接

关于报错
  1. PHPExcel生成Excel文件—提示Class 'PHPExcel_Style_Alignment' not found
    解决方案:在PHPExcel_Style_AlignmentPHPExcel_Style_Border 前面加上\符号
    $objPHPExcel->getActiveSheet()->getStyle(‘A‘)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
    
小技巧
  1. 关于导出长数字自动变成科学计数法的问题
    解决方案:$objActSheet->setCellValueExplicit('A5','8757584',PHPExcel_Cell_DataType::TYPE_STRING);
    关键点:
    1. 使用setCellValueExplicit而不是setCellValue
      因为,setCellValue方法不支持手动指定数据类型,需要手动去源码进行修改,比较麻烦,如果有想法可以参考这篇文章
    2. setCellValueExplicit方法中第三个参数使用PHPExcel_Cell_DataType::TYPE_STRING指定数据类型,如果报错说PHPExcel_Cell_DataType找不到,那么使用\PHPExcel_Cell_DataType::TYPE_STRING即可(在前面加上反斜杠)
    3. 如果是超长数字的话,这种方法还是不能够解决问题的(但其实一般情况下都够用了)。那么就只能在数据前面手动拼接一个空格,这样就一定是一个字符串了
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值