• thinkphp5中使用excel导出数据表格(包涵图片)


    首先使用composer require phpoffice/phpexcel下载安装phpexcel包。

    将包放入extend下面。

    不附加图片的导出

    /**
    * 导出excel(不带图片)
    * @param string $fileName [description]
    * @param [type] $headArr [description]
    * @param [type] $data [description]
    * @return [type] [description]
    */
    public function excelExport($fileName = '', $headArr = [], $data = []) {

    $fileName .= "_" . date("Y_m_d", time()) . "_".time().".xls";

    Loader::import("PHPExcel.Classes.PHPExcel");
    Loader::import("PHPExcel.Drawing");

    $objPHPExcel = new PHPExcel;

    $objPHPExcel->getProperties();

    $key = ord("A"); // 设置表头

    foreach ($headArr as $v) {

    $colum = chr($key);

    $objPHPExcel->setActiveSheetIndex(0)->setCellValue($colum . '1', $v);

    $objPHPExcel->setActiveSheetIndex(0)->setCellValue($colum . '1', $v);

    $key += 1;

    }


    $column = 2;

    $objActSheet = $objPHPExcel->getActiveSheet();

    foreach ($data as $key => $rows) { // 行写入

      $span = ord("A");

      foreach ($rows as $keyName => $value) { // 列写入

        $objActSheet->setCellValue(chr($span) . $column, $value);

        $span++;

      }

      $column++;

    }

    $fileName = iconv("utf-8", "gb2312", $fileName); // 重命名表

    $objPHPExcel->setActiveSheetIndex(0); // 设置活动单指数到第一个表,所以Excel打开这是第一个表

    header('Content-Type: application/vnd.ms-excel');

    header("Content-Disposition: attachment;filename='$fileName'");

    header('Cache-Control: max-age=0');

    $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');

    //$objWriter->save('php://output'); // 文件通过浏览器下载

    exit();
    }

    控制器方法

    public function dcexcel(){
    $name='物流信息表';
    $header=['商品编号','商品名称','库存数量','商品图'];
    /*需要哪张表的数据就查询哪张表的数据*/
    $list = db('goods')->limit(1)->select();
    $str = array();
    foreach ($list as $k => $v) {
    /*对应的数据库信息*/
    $str[] = [$v['good_sn'],$v['good_name'],$v['store_num'],$v['good_thumb']];
    }
    $data=$str;
    $this->excelExport($name,$header,$data);

    }

    带图片的导出

    /**
    * 导出excel表格(带图片)
    * @return [type] [description]
    */
    function excel_down($data = []){

    // 导出Exl
    Loader::import("PHPExcel.Classes.PHPExcel");
    Loader::import("PHPExcel.Worksheet.Drawing");

    $objPHPExcel = new PHPExcel();

    $objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel);

    $objActSheet = $objPHPExcel->getActiveSheet();

    // 水平居中(位置很重要,建议在最初始位置)
    $objPHPExcel->setActiveSheetIndex(0)->getStyle('A')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
    $objPHPExcel->setActiveSheetIndex(0)->getStyle('B')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
    $objPHPExcel->setActiveSheetIndex(0)->getStyle('C')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
    $objPHPExcel->setActiveSheetIndex(0)->getStyle('D')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
    $objPHPExcel->setActiveSheetIndex(0)->getStyle('E')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);

    $objActSheet->setCellValue('A1', 'good_sn');
    $objActSheet->setCellValue('B1', 'good_name');
    $objActSheet->setCellValue('C1', 'store_num');
    $objActSheet->setCellValue('D1', 'sales_sum');
    $objActSheet->setCellValue('E1', 'good_thumb');

    // 设置个表格宽度
    $objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(16);
    $objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(15);
    $objPHPExcel->getActiveSheet()->getColumnDimension('C')->setWidth(15);
    $objPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(20);
    $objPHPExcel->getActiveSheet()->getColumnDimension('E')->setWidth(12);

    // 垂直居中
    $objPHPExcel->setActiveSheetIndex(0)->getStyle('A')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
    $objPHPExcel->setActiveSheetIndex(0)->getStyle('B')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
    $objPHPExcel->setActiveSheetIndex(0)->getStyle('C')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
    $objPHPExcel->setActiveSheetIndex(0)->getStyle('D')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
    $objPHPExcel->setActiveSheetIndex(0)->getStyle('E')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);

    foreach($data as $k=>$v){
    $k +=2;
    $objActSheet->setCellValue('A'.$k, $v['good_sn']);
    $objActSheet->setCellValue('B'.$k, $v['good_name']);
    $objActSheet->setCellValue('C'.$k, $v['store_num']);
    $objActSheet->setCellValue('D'.$k, $v['sales_sum']);

    //获取到图片信息
    $img =db('goods')->where('good_id = '.$v['good_id'])->field('good_thumb')->find();
    // 图片生成
    $objDrawing[$k] = new PHPExcel_Worksheet_Drawing();
    $objDrawing[$k]->setPath('./uploads/'.$img['good_thumb']);//这里拼接 . 是因为要在根目录下获取
    // 设置宽度高度
    $objDrawing[$k]->setHeight(80);//照片高度
    $objDrawing[$k]->setWidth(80); //照片宽度
    /*设置图片要插入的单元格*/
    $objDrawing[$k]->setCoordinates('E'.$k);
    // 图片偏移距离
    $objDrawing[$k]->setOffsetX(12);
    $objDrawing[$k]->setOffsetY(12);
    $objDrawing[$k]->setWorksheet($objPHPExcel->getActiveSheet());

    // 表格高度
    $objActSheet->getRowDimension($k)->setRowHeight(80);

    }

    $fileName = 'duola物流信息表';
    $date = date("Y-m-d",time());
    $fileName .= "_{$date}.xls";
    $fileName = iconv("utf-8", "gb2312", $fileName);
    //重命名表
    // $objPHPExcel->getActiveSheet()->setTitle('test');
    //设置活动单指数到第一个表,所以Excel打开这是第一个表
    $objPHPExcel->setActiveSheetIndex(0);
    header('Content-Type: application/vnd.ms-excel');
    header("Content-Disposition: attachment;filename="$fileName"");
    header('Cache-Control: max-age=0');
    $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
    $objWriter->save('php://output'); //文件通过浏览器下载
    // END
    }

    控制器使用

    public function dcexcel(){
    /*需要哪张表的数据就查询哪张表的数据*/
    $list = db('goods')->limit(1)->select();
    $this->excel_down($list);

    }

  • 相关阅读:
    Winform配置文件读写操作
    Winform 实现图片轮播(解决Image.FromFile内存不足)
    asm磁盘dd破坏恢复
    文件系统重新分区oracle恢复
    删除分区 oracle asm disk 恢复
    raid强制上线后数据库无法启动故障处理
    记录一次oracle现场故障处理经过
    .makop病毒加密数据库恢复
    Oracle Recovery Tools解决数据库open过程报 ORA-01555错误
    操作系统层面反删除恢复文件损坏太多处理—-oracle碎片恢复
  • 原文地址:https://www.cnblogs.com/zdzdbk/p/9957048.html
Copyright © 2020-2023  润新知