PHP 导出多个sheet 或者导出带样式的excel 修改样式方式见下文 具体使用需要根据具体业务进行一些调整和封装

$PHPExcel = new \PHPExcel();
$sheetIndex = 0;根据sheet的位置选择数值从0开始
$PHPExcel->createSheet($sheetIndex);// 创建sheet
$sheet = $PHPExcel->setActiveSheetIndex($sheetIndex); 选中sheet
$sheet->setTitle('设置标题'); //设置标题
$sheet->setCellValue(‘A1', '内容');//填充内容$objWriter = new \PHPExcel_Writer_Excel5($this->PHPExcel);
$response = $this->createStreamedResponse( $objWriter);
$dispositionHeader = $response->headers->makeDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT,$exporter->getExportFileName(),'-'
);
$response->headers->set('Content-Type', 'text/vnd.ms-excel; charset=utf-8');
$response->headers->set('Pragma', 'public');
$response->headers->set('Cache-Control', 'maxage=1');
$response->headers->set('Content-Disposition', $dispositionHeader);
return $response;protected function createStreamedResponse(\PHPExcel_Writer_IWriter $writer, $status = 200, $headers = []){return new StreamedResponse(function () use ($writer) {$writer->save('php://output');},$status,$headers);}//设置单元格行高
$PHPExcel->getActiveSheet()->getDefaultRowDimension()->setRowHeight(20);
//设置单元格宽度
$PHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(200);//添加边框,加粗
$style_array = ['borders' => ['allborders' => ['style' => \PHPExcel_Style_Border::BORDER_THIN,],], ];
$PHPExcel->getActiveSheet()->getStyle('A1:F5')->applyFromArray($style_array);//设置文字大小
$PHPExcel->getActiveSheet()->getStyle(‘A1’)->getFont()->setSize(16);//文字加粗
#PHPExcel->getActiveSheet()->getStyle(‘A1’)->getFont()->setBold(true);//设置垂直居中
$PHPExcel->getActiveSheet()->getStyle(‘A1’)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::VERTICAL_CENTER);//设置水平居中
$PHPExcel->getActiveSheet()->getStyle('A1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);//合并单元格
$PHPExcel->getActiveSheet()->mergeCells(''A1:F1');//设置单元格背景色  颜色以FF开头加6位色码
$PHPExcel->getActiveSheet()->getStyle('A1:F1')->getFill()->setFillType(\PHPExcel_Style_Fill::FILL_SOLID);
$PHPExcel->getActiveSheet()->getStyle('A1:F1')->getFill()->getStartColor()->setARGB(‘FFadafb1’);//设置单元格内内容换行$this->PHPExcel->getActiveSheet()->getStyle('A1')->getAlignment()->setWrapText(true);然后内容中添加"\r\n\r\n" 换行

代码。例子 : 基于Symfony 框架的。 可根据自己需要进行修改

导出入口文件public function taskLiveStatisticExportAction(Request $request, $taskId){$task = $this->getTaskService()->getTask($taskId);$exporter = (new CourseLiveStatisticExporter($this->getBiz()));$objWriter = $exporter->exporter(['taskId' => $task['id']], 0);$response = $this->createStreamedResponse($objWriter);$dispositionHeader = $response->headers->makeDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT,$exporter->getExportFileName(),'-');$response->headers->set('Content-Type', 'text/vnd.ms-excel; charset=utf-8');$response->headers->set('Pragma', 'public');$response->headers->set('Cache-Control', 'maxage=1');$response->headers->set('Content-Disposition', $dispositionHeader);return $response;}protected function createStreamedResponse(\PHPExcel_Writer_IWriter $writer, $status = 200, $headers = []){return new StreamedResponse(function () use ($writer) {$writer->save('php://output');},$status,$headers);}

<?phpnamespace Biz\Exporter;use Codeages\Biz\Framework\Context\Biz;
use PHPExcel_Exception;
use PHPExcel_Writer_Exception;
use Symfony\Component\Filesystem\Filesystem;abstract class BaseSheetAddStyleExporter
{protected static $logger;protected $cols = ['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'];protected $filesystem = null;protected $biz = null;protected $PHPExcel = null;public function __construct(Biz $biz){$this->biz = $biz;}/*** @return mixed*               //return xxxxxxxxxxxx.xls*/abstract public function getExportFileName();abstract public function getSortedHeadingRow();/*** @param array $params* @param int   $save** @return bool** @throws PHPExcel_Exception* @throws PHPExcel_Writer_Exception*/public function exporter($params, $save = 1){$privateUploadDir = $this->biz['topxia.upload.private_directory'];$this->filesystem = new Filesystem();if (!empty($save)) {$path = "{$privateUploadDir}/data_export";if (!$this->filesystem->exists($path)) {$this->filesystem->mkdir($path, 0777);}}if (!empty($save) && $this->filesystem->exists($path.'/'.$this->getExportFileName())) {return  true;}$this->PHPExcel = new \PHPExcel();$this->buildExportSheetData($params);$objWriter = new \PHPExcel_Writer_Excel5($this->PHPExcel);if (empty($save)) {return  $objWriter;}$objWriter->save($path.'/'.$this->getExportFileName());return  true;}// 自定义导出格式  行高 合并单元格 样式 数据 等abstract public function buildExportSheetData($params);protected function setSheetCellValue(\PHPExcel_Worksheet $sheet, $data, $start = 2){$i = 0;foreach ($this->getSortedHeadingRow() as $key => $useCol) {$sheet->setCellValue($this->cols[$i].$start, $key);$col = 1 + $start;foreach ($data as $key => $value) {$sheet->setCellValue($this->cols[$i].($key + $col), $value[$useCol]);}++$i;}}/*** A1/A1:G2** @param string[] $pCellCoordinates**                            设置左对齐*/protected function setHorizontalLeft($pCellCoordinates = ['A1']){foreach ($pCellCoordinates as $pCellCoordinate) {$this->PHPExcel->getActiveSheet()->getStyle($pCellCoordinate)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_LEFT);}}/*** A1/A1:G2** @param string[] $pCellCoordinates**                            设置水平居中*/protected function setHorizontalCenter($pCellCoordinates = ['A1']){foreach ($pCellCoordinates as $pCellCoordinate) {$this->PHPExcel->getActiveSheet()->getStyle($pCellCoordinate)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);}}/*** A1/A1:G2** @param string[] $pCellCoordinates**                            设置垂直居中*/protected function setVerticalCenter($pCellCoordinates = ['A1']){foreach ($pCellCoordinates as $pCellCoordinate) {$this->PHPExcel->getActiveSheet()->getStyle($pCellCoordinate)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::VERTICAL_CENTER);}}/***  A1/A1:G2** @param string[] $pCellCoordinates* @param int      $size**                            设置大小*/protected function setSize($pCellCoordinates, $size = 16){foreach ($pCellCoordinates as $pCellCoordinate) {$this->PHPExcel->getActiveSheet()->getStyle($pCellCoordinate)->getFont()->setSize($size);}}/***  A1/A1:G2** @param string $pCellCoordinate* @param string $color           'FFadafb1'**                            设置背景色*/protected function setBackground($pCellCoordinate, $color){$this->PHPExcel->getActiveSheet()->getStyle($pCellCoordinate)->getFill()->setFillType(\PHPExcel_Style_Fill::FILL_SOLID);$this->PHPExcel->getActiveSheet()->getStyle($pCellCoordinate)->getFill()->getStartColor()->setARGB($color);}/***  A** @param string[] $columns* @param int      $size**                            设置单元格宽度*/protected function setWidth($columns, $size = 20){foreach ($columns as $column) {$this->PHPExcel->getActiveSheet()->getColumnDimension($column)->setWidth($size);}}/*** @param int $size**                            设置默认行高*/protected function setDefaultRowHeight($size = 20){$this->PHPExcel->getActiveSheet()->getDefaultRowDimension()->setRowHeight($size);}/***  A1/A1:G2** @param string[] $pCellCoordinates**   设置加粗*/protected function setBold($pCellCoordinates){foreach ($pCellCoordinates as $pCellCoordinate) {$this->PHPExcel->getActiveSheet()->getStyle($pCellCoordinate)->getFont()->setBold(true);}}/*** @param $pCellCoordinate**    添加边框,加粗*/protected function setBorders($pCellCoordinate){$style_array = ['borders' => ['allborders' => ['style' => \PHPExcel_Style_Border::BORDER_THIN,],], ];$this->PHPExcel->getActiveSheet()->getStyle($pCellCoordinate)->applyFromArray($style_array);}/*** @param $pCellCoordinate** @throws PHPExcel_Exception*                            合并单元格*/protected function mergeCells($pCellCoordinate){$this->PHPExcel->getActiveSheet()->mergeCells($pCellCoordinate);}protected function createService($alias){return $this->biz->service($alias);}
}
<?phpnamespace Biz\Exporter;use AppBundle\Common\ArrayToolkit;
use AppBundle\Common\SimpleValidator;
use Biz\Activity\Service\ActivityService;
use Biz\Course\Service\CourseService;
use Biz\Course\Service\CourseSetService;
use Biz\LiveStatistics\Service\Impl\LiveCloudStatisticsServiceImpl;
use Biz\Task\Service\TaskService;
use Biz\User\Service\UserService;
use PHPExcel_Exception;class CourseLiveStatisticExporter extends BaseSheetAddStyleExporter
{protected $task = [];public function getExportFileName(){$time = date('Y_m_d_H_i', time());return  "直播统计_{$time}.xls";}public function getSortedHeadingRow(){return ['用户名' => 'nickname','手机号' => 'mobile','邮箱' => 'email','进入直播间时间' => 'firstEnterTime','观看时长(分)' => 'watchDuration','签到数' => 'checkinNum','聊天数' => 'chatNum','答题数' => 'answerNum',];}public function buildExportSheetData($params){$sheetIndex = 0;try {$this->PHPExcel->createSheet($sheetIndex);$sheet = $this->PHPExcel->setActiveSheetIndex($sheetIndex);$this->setDefaultRowHeight();$this->PHPExcel->getActiveSheet()->getRowDimension(1)->setRowHeight(110);//换行$this->PHPExcel->getActiveSheet()->getStyle('A1')->getAlignment()->setWrapText(true);$sheet->setCellValue('A1', $this->getHeadValue($params));$data = $this->buildData($params);$row = count($data) + 2;$this->setBorders('A1:H2');$this->setSize(['A1'], 14);$this->setBold(['A1:H2']);$this->setVerticalCenter(['A1']);$this->setHorizontalCenter(['A1', 'A2', 'B2:H'.$row]);$this->mergeCells('A1:H1');$sheet->setTitle('直播统计');$this->setWidth(['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H']);$this->setSheetCellValue($sheet, $data);} catch (PHPExcel_Exception $e) {throw $e;}}protected function getHeadValue($params){$this->task = $this->getTaskService()->getTask($params['taskId']);$course = $this->getCourseService()->getCourse($this->task['courseId']);$courseSet = $this->getCourseSetService()->getCourseSet($this->task['fromCourseSetId']);$result = $this->getLiveStatisticsService()->getLiveData($this->task);$title = (empty($course['title']) ? $courseSet['title'] : $course['title']).'-'.$this->task['title']."\r\n\r\n";$startTime = date('Y-m-d H:i', $result['startTime']);$endTime = date('Y-m-d H:i', $result['endTime']);$detail1 = "主讲人:{$result['teacher']} \t\t     直播时间: {$startTime}至{$endTime} \t\t     实际直播时长: {$result['length']} \r\n\r\n";$detail2 = "同时在线人数:{$result['maxOnlineNumber']} \t\t    观看人数:{$result['memberNumber']} \t\t    用户聊天数:{$result['chatNumber']} \t\t    人均观看时长:{$result['avgWatchTime']}\r\n";return "\r\n".$title.$detail1.$detail2;}protected function buildData($params){$activity = $this->getActivityService()->getActivity($this->task['activityId'], true);$params['liveId'] = $activity['ext']['liveId'];$conditions = ArrayToolkit::parts($this->buildUserConditions($params), ['courseId', 'liveId', 'userIds']);$members = $this->getLiveStatisticsService()->searchCourseMemberLiveData($conditions, 0, PHP_INT_MAX, ['firstEnterTime', 'watchDuration', 'checkinNum', 'chatNum', 'answerNum', 'userId']);$cloudStatisticData = $activity['ext']['cloudStatisticData'];$userIds = ArrayToolkit::column($members, 'userId');$users = $this->getUserService()->searchUsers(['userIds' => empty($userIds) ? [-1] : $userIds], [], 0, count($userIds), ['id', 'nickname', 'verifiedMobile', 'email', 'emailVerified']);$users = ArrayToolkit::index($users, 'id');foreach ($members as &$member) {$member['firstEnterTime'] = empty($member['firstEnterTime']) ? '--' : date('Y-m-d H:i', $member['firstEnterTime']);$member['nickname'] = empty($users[$member['userId']]) ? '--' : $users[$member['userId']]['nickname'];$member['email'] = empty($users[$member['userId']]) || empty($users[$member['userId']]['emailVerified']) ? '--' : $users[$member['userId']]['email'];$member['checkinNum'] = empty($cloudStatisticData['checkinNum']) ? '--' : $member['checkinNum'].'/'.$cloudStatisticData['checkinNum'];$member['mobile'] = empty($users[$member['userId']]) || empty($users[$member['userId']]['verifiedMobile']) ? '--' : $users[$member['userId']]['verifiedMobile'];$member['watchDuration'] = round($member['watchDuration'] / 60, 1);}return $members;}protected function buildUserConditions($params){if (!empty($params['nameOrMobile'])) {$mobile = SimpleValidator::mobile($params['nameOrMobile']);if ($mobile) {$user = $this->getUserService()->getUserByVerifiedMobile($params['nameOrMobile']);$users = empty($user) ? [] : [$user];} else {$users = $this->getUserService()->searchUsers(['nickname' => $params['nameOrMobile']],[],0,PHP_INT_MAX,['id']);}$userIds = ArrayToolkit::column($users, 'id');$params['userIds'] = empty($userIds) ? [-1] : $userIds;}unset($params['nameOrMobile']);return $params;}/*** @return ActivityService*/protected function getActivityService(){return $this->createService('Activity:ActivityService');}/*** @return UserService*/protected function getUserService(){return $this->createService('User:UserService');}/*** @return LiveCloudStatisticsServiceImpl*/protected function getLiveStatisticsService(){return $this->createService('LiveStatistics:LiveCloudStatisticsService');}/*** @return CourseSetService*/protected function getCourseSetService(){return $this->createService('Course:CourseSetService');}/*** @return CourseService*/protected function getCourseService(){return $this->createService('Course:CourseService');}/*** @return TaskService*/protected function getTaskService(){return $this->createService('Task:TaskService');}
}

PHP excel导出(自定义样式,行高,合并单元格等)相关推荐

  1. python openpyxl 自动设置excel列宽及行高,单元格对对齐方式

    import pandas as pd from openpyxl import load_workbook from openpyxl.utils import get_column_letter ...

  2. ASPxGridViewHelper自定义多表头及合并单元格

    举例1:自定义多表头,合并单元格 AspxGridview protected void Page_Load(object sender, EventArgs e){InitGrid();InitGr ...

  3. Excel如何将数据复制到合并单元格中

    今天跟大家分享一下Excel如何将数据复制到合并单元格中 1.如下图我们想要将数据复制到合并单元格中 2.选择要复制的单元格区域 3.单击下图选项 4.单击[复制粘贴],[复制到合并区域] 5.在[粘 ...

  4. 在Excel表格中如何快速拆分合并单元格

    在Excel表格中如何快速拆分合并单元格 目录 在Excel表格中如何快速拆分合并单元格 1.例如:将销售人列中的合并单元格拆分还原 2.选中销售人姓名,点击[开始]选项卡中[合并居中] 3.再点击[ ...

  5. 信创办公–基于WPS的EXCEL最佳实践系列 (处理合并单元格)

    信创办公–基于WPS的EXCEL最佳实践系列 (处理合并单元格) 目录 应用背景 相关知识 操作步骤 1.合并单元格对排序的影响 2.取消合并单元格并自动填充内容 应用背景 在Excle表格中,对于相 ...

  6. layui导出excel动态拆分单元格一个单元格显示多行数据合并单元格

    需求如图 首先说明是不能拆分单元格的,因为单元格是最小单位.只能通过合并单元格来实现. 实现思路:点击导出按钮,去请求后端数据.data数据如下: [{OrderNo: 'No637829645038 ...

  7. poi导出excel,行相同数据自动合并单元格

    /***excel行自动合并*listData 待导出数据*/ public void test(SXSSFSheet sheet,List<FanManagerExt> listData ...

  8. phpexcel导出 自定义数据 分页数据 设置单元格宽 合并单元格

    //导出操作 function outExcel($title,$data){$title="商户清算对帐表".date('Y-m-d H:i:s',time());$data=a ...

  9. java通过poi生成excel表格(自适应列宽、合并单元格后的边框添加)

    具体java通过POI读写Excel的基本使用方法可参考: POI读写Excel的基本使用 1.项目导入依赖: <!--xls--> <dependency><group ...

  10. springboot中使用poi-tl导出word(包含表格合并单元格)实例

    一.背景 在业务开发过程中,遇到有需要生成包含表格的word文档,且一部分表格需要动态生成,且需要根据数据来合并单元格,最后呈现的方式如下图: 一开始想到的解决方案是通过freemarker来生成,但 ...

最新文章

  1. 查询字符串中字母出现的个数
  2. boost::iterator_facade用法的测试程序
  3. 理解git结构与简单操作(四)合并分支的方法与策略
  4. 【渝粤教育】21秋期末考试财务管理10164k2
  5. ThinkPHP RBAC如何自动获取所有模块的函数
  6. JavaScript继承详解
  7. 问题四十一:怎么用ray tracing画任意圆柱面(generalized cylinder)
  8. 计算机地址如何表达,计算机中的地址是表示
  9. 全球及中国创新药产业研发格局及应用价值分析报告2021-2027年
  10. 两款C#开源单文件串口调试工具的源码库
  11. python画气泡图_用Python把图做的好看点:用Matplotlib做个比较气泡图
  12. “壮士断腕”无人驾驶能够拯救苹果的内忧外困吗?
  13. web 打印服务器文件,【2人回答】web如何实现客户端打印在线文件(pdf,Word,Excel等),同时可以控制打印设置?-3D溜溜网...
  14. 智能物流机器人蓝胖子完成A+轮融资,这是一家怎样的公司?
  15. VTD 监视器航向角与 53-2017国标 航向角对齐
  16. 传统教培机构搭建网校平台是否成必然的趋势?
  17. Keil uVision5 界面模糊(优化)变清晰
  18. Sers微服务快速入门-02.快速接入
  19. 成功解决wps文档的论文中插入图片时只显示一半图片(两步教程完美搞定!)
  20. 美国爱情经济学家:找到绩优股就长期持有

热门文章

  1. 周金涛生前20篇雄文精华,一文尽览
  2. 前端实现图片快速反转替换_在canvas上实现元素图片镜像翻转动画效果的方法
  3. CSDN图片上传去除水印
  4. 基于javaweb+SSM农产品水果店销售管理系统
  5. php汉字转拼音百家姓版,砚田马中华书《百家姓》(文字拼音版)
  6. 如何在iOSnbsp;8中使用Swift和Xco…
  7. 自动驾驶专题介绍 ———— 转向系统
  8. 论文阅读笔记《Meta-Transfer Learning for Few-Shot Learning》
  9. MIMO-OFDM无线通信技术及MATLAB实现(3)MIMO信道模型
  10. mp2551总线收发器芯片作用_高速CAN收发器MCP2551