分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 网页技术

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

发布时间:2023-09-06 02:22责任编辑:蔡小小关键词:excelthinkphp

首先使用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);

}

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

原文地址:https://www.cnblogs.com/zdzdbk/p/9957048.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved