TP6 结合phpOffice使用模板导出csv

/**
     * 模板导出csv
     * 教师通知
     * @param string $expTitle 导出文件名.例:财务20201010
     * @param string $template_name 模板名称:模板在本地的名称,如template.xls
     * @param string $content 内容 标题/r/n内容。其中使用/r/n表示换行
     * @param array $datas 数据 array("张三","18360608080","upload/img/ceshi.jpg","2020-10-10")
     * @param int $start 开始循环载入数据的行数
     * @param array $imgArr 数据中的图片占用位 例子:array(2),数据中,图片为第2位
     * @return array
     * @throws \PhpOffice\PhpSpreadsheet\Exception
     * @throws \PhpOffice\PhpSpreadsheet\Reader\Exception
     * @throws \PhpOffice\PhpSpreadsheet\Writer\Exception
     */
    public function getCsv($expTitle = "", $template_name = "", $content = "", $datas = [], $start = 15, $imgArr = [])
    {
        //模板名称
        $filename = root_path()."/public/upload/template/".$template_name;
        $objPHPExcel = IOFactory::load($filename);
        //头部内容
        $objPHPExcel->getActiveSheet()->setCellValue('A1', $content);
        $objPHPExcel->getActiveSheet()->getStyle("A1")->getAlignment()->setWrapText(true);

        //列表内容,15行开始
        $cellName = array('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'AA', 'AB', 'AC', 'AD', 'AE', 'AF', 'AG', 'AH', 'AI', 'AJ', 'AK', 'AL', 'AM', 'AN', 'AO', 'AP', 'AQ', 'AR', 'AS', 'AT', 'AU', 'AV', 'AW', 'AX', 'AY', 'AZ');

        foreach ($datas as $k => $v) {
            $num = $k + $start;
            foreach ($v as $key => $val) {
                if (in_array($key, $imgArr)) {
                    //图片
                    if (empty($val) || !file_exists(root_path()."/public".$val)) {
                        continue;
                    }
                    $imgurl = root_path()."/public".$val;
                    $objDrawing[$k] = new Drawing;
                    $objDrawing[$k]->setPath($imgurl);
                    $objDrawing[$k]->setCoordinates($cellName[$key].$num);
                    $objDrawing[$k]->setWidth(35);
                    $objDrawing[$k]->setHeight(35);
                    //图片偏移距离
                    $objDrawing[$k]->setOffsetX(10);
                   // $objDrawing[$k]->setOffsetY(10);
                    $objDrawing[$k]->setWorksheet($objPHPExcel->getActiveSheet());
                } else {
                    //填充内容
                    $objPHPExcel->getActiveSheet()->setCellValue($cellName[$key].$num, $val);
                }
                //设置列宽
                $objPHPExcel->getActiveSheet(0)->getColumnDimension($cellName[$key])->setWidth(15);
                //设置行高
                $objPHPExcel->getActiveSheet()->getRowDimension($num)->setRowHeight(25);
            }
        }

        $objPHPExcel->setActiveSheetIndex(0);
        $objWriter = IOFactory::createWriter($objPHPExcel, 'Xls');

        //新目录
        $time = date("Ym", time());
        $path = root_path()."/public/upload/xls/".$time ;
        if (!file_exists($path)) {
            mkdir($path, 0777, true);
            chmod($path, 0777);
        }
        
        //生成不重复的名称,这里是封装好的,请自己更换自己的方法
        $tool = new CodeTool();
        $title = $tool->makeOrderNo("CSV");
        $path = $path."/". $title . ".csv";

        $objWriter->save($path);
        $objPHPExcel->disconnectWorksheets();
        $pathname = "/upload/xls/".$time."/". $title . ".csv";
        $downloading = $_SERVER['HTTP_ORIGIN'].$pathname;
        return array("path"=>$downloading,"name"=>$expTitle);
    }

 注:使用时候需要先安装phpOffice,并在方法头部引用

/**
 * 注:需要配合使用composer下载安装PhpOffice
 */

use PhpOffice\PhpSpreadsheet\Cell\Coordinate;
use PhpOffice\PhpSpreadsheet\IOFactory;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Style\Fill;
use PhpOffice\PhpSpreadsheet\Style\Color;
use PhpOffice\PhpSpreadsheet\Cell\DataType;
use PhpOffice\PhpSpreadsheet\Worksheet\Drawing;

 

xls模板样例:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值