PHP导出EXCEL含合计行,设置单元格格式

PHP导出EXCEL含合计行,设置单元格格式,水平居中 垂直居中

public function exportSalary(Request $request){//水平居中 垂直居中$styleArray = ['alignment' => ['horizontal' => Alignment::HORIZONTAL_CENTER,'vertical'   => Alignment::VERTICAL_CENTER],];//细边框$styleArray1 = ['borders' => ['allBorders' => ['borderStyle' =>  Border::BORDER_THIN]]];//右对齐 垂直居中$styleArray2 = ['alignment' => ['horizontal' => Alignment::HORIZONTAL_RIGHT,'vertical'   => Alignment::VERTICAL_CENTER],];$ym = $request->get('ym');$start_date = $ym . '-01 00:00:00';$month = date("Y年m月", strtotime($start_date));$paper_type = $request->paper_type;$type_id = isset($paper_type)?$paper_type:1;$flag = $type_id==2?'打样':'板房';$yyyymm = date('Y-m', strtotime($start_date));$data = $this->get_salary_data($yyyymm,$type_id);if($data){$name ='XXXX有限公司 (技术部)';$filename = $flag.'计件工资汇总表'.$ym;$title = $flag.'计件工资汇总表';$spreadsheet = new Spreadsheet();$sheet = $spreadsheet->getActiveSheet();$sheet->setTitle($title);$sheet->getColumnDimension('A')->setWidth(6);$sheet->getColumnDimension('B')->setWidth(8);$sheet->getColumnDimension('C')->setWidth(10);$sheet->getColumnDimension('D')->setWidth(10);$sheet->getColumnDimension('E')->setWidth(10);$sheet->getColumnDimension('F')->setWidth(10);$sheet->getColumnDimension('G')->setWidth(10);$sheet->getColumnDimension('H')->setWidth(10);$sheet->getColumnDimension('I')->setWidth(10);$sheet->getColumnDimension('J')->setWidth(10);$sheet->getColumnDimension('K')->setWidth(10);$sheet->getColumnDimension('L')->setWidth(10);$sheet->getColumnDimension('M')->setWidth(10);$sheet->getColumnDimension('N')->setWidth(10);$sheet->getColumnDimension('O')->setWidth(10);$sheet->getColumnDimension('P')->setWidth(15);//第一行$sheet->setCellValue('A1', $name);$sheet->mergeCells('A1:P1');$sheet->getStyle('A1:P1')->getFont()->setBold(true)->setName('Arial')->setSize(20);//第二行$sheet->setCellValue('A2', $month);$sheet->mergeCells('A2:B2');$sheet->setCellValue('C2', $title);$sheet->mergeCells('C2:P2');$sheet->getStyle('C2:P2')->getFont()->setBold(true)->setName('Arial')->setSize(18);$sheet->getStyle('A1:P2')->applyFromArray($styleArray);//第三行$sheet->setCellValue('A3', '序号');$sheet->mergeCells('A3:A4');$sheet->setCellValue('B3', '姓名');$sheet->mergeCells('B3:B4');$sheet->setCellValue('C3', '工资基数');$sheet->mergeCells('C3:F3');$sheet->setCellValue('G3', '薪资结算明细');$sheet->mergeCells('G3:L3');$sheet->setCellValue('M3', '出勤管理');$sheet->mergeCells('M3:N3');$sheet->setCellValue('O3', '发放合计');$sheet->mergeCells('O3:O4');$sheet->setCellValue('P3', '备注');$sheet->mergeCells('P3:P4');//第四行$sheet->setCellValue('C4', '底薪');$sheet->setCellValue('D4', '产量考核');$sheet->setCellValue('E4', '绩效考核');$sheet->setCellValue('F4', '综合收入');$sheet->setCellValue('G4', '及时率');$sheet->setCellValue('H4', '产量薪资');$sheet->setCellValue('I4', '绩效得分');$sheet->setCellValue('J4', '绩效薪资');$sheet->setCellValue('K4', '超产奖励');$sheet->setCellValue('L4', '点工');$sheet->setCellValue('M4', '出勤天数');$sheet->setCellValue('N4', '请假天数');$sheet->getStyle('G4')->getAlignment()->setWrapText(true);$sheet->getStyle('I4')->getAlignment()->setWrapText(true);$sheet->getRowDimension('1')->setRowHeight(28);$sheet->getRowDimension('2')->setRowHeight(25);$sheet->getRowDimension('3')->setRowHeight(23);$sheet->getRowDimension('4')->setRowHeight(30);//开始装数据$count = 5;foreach ($data as $key =>$value){$xh = $key + 1;$sheet->setCellValue('A'.$count, $xh);$sheet->setCellValue('B'.$count, $value['name']);//姓名$sheet->setCellValue('C'.$count, $value['basic_salary']);//底薪$sheet->setCellValue('D'.$count, $value['yield_basic_salary']);//产量考核$sheet->setCellValue('E'.$count, $value['merit_basic_salary']);//绩效考核$sheet->setCellValue('F'.$count, $value['all_basic_salary']);//综合收入$sheet->setCellValue('G'.$count, $value['timely_rate']/100); //及时率$sheet->setCellValue('H'.$count, $value['yield_salary']);//产量薪资$sheet->setCellValue('I'.$count, $value['merit_score']);//绩效得分$sheet->setCellValue('J'.$count, $value['merit_salary']); //绩效薪资$sheet->setCellValue('K'.$count, $value['over_salary']); //超产奖励$sheet->setCellValue('L'.$count, $value['timing_cut_salary']); //点工扣款$sheet->setCellValue('M'.$count, ""); //出勤天数$sheet->setCellValue('N'.$count, ""); //请假天数$sheet->setCellValue('O'.$count, $value['all_salary']); //发放合计$sheet->setCellValue('P'.$count, $value['remark']); //备注$sheet->getRowDimension($count)->setRowHeight(25);$count++;}$sheet->getStyle('A3:P'.($count))->applyFromArray($styleArray1)->applyFromArray($styleArray); //画上几线$sheet->getStyle('C5:O'.($count))->getNumberFormat()->setFormatCode("0.00");//保留小数2位$sheet->getStyle('A1:P2')->applyFromArray($styleArray);$sheet->getStyle('C5:O'.($count))->applyFromArray($styleArray2);//右对齐 垂直居中$sheet->getStyle('J5:O'.($count))->applyFromArray($styleArray2);//右对齐 垂直居中$sheet->getStyle('A3:P4')->getFont()->setBold(true);//合计行$sheet->setCellValue('A'.$count,'合计');$sheet->mergeCells('A'.$count.':B'.$count);$sheet->setCellValue('C'.$count,'=SUM(C5:C'.($count-1).')');$sheet->setCellValue('D'.$count,'=SUM(D5:D'.($count-1).')');$sheet->setCellValue('E'.$count,'=SUM(E5:E'.($count-1).')');$sheet->setCellValue('F'.$count,'=SUM(F5:F'.($count-1).')');$sheet->setCellValue('G'.$count,'=AVERAGE(G5:G'.($count-1).')');$sheet->setCellValue('H'.$count,'=SUM(H5:H'.($count-1).')');$sheet->setCellValue('I'.$count,'=AVERAGE(I5:I'.($count-1).')');$sheet->setCellValue('J'.$count,'=SUM(J5:J'.($count-1).')');$sheet->setCellValue('K'.$count,'=SUM(K5:K'.($count-1).')');$sheet->setCellValue('L'.$count,'=SUM(L5:L'.($count-1).')');$sheet->setCellValue('O'.$count,'=SUM(O5:O'.($count-1).')');//设置G列单元格格式为百分比0.00%$sheet->getStyle('G5:G'.$count)->getNumberFormat()->setFormatCode(\PHPExcel_Style_NumberFormat::FORMAT_PERCENTAGE_00);//最后一行$last_count = $count + 1;$sheet->setCellValue('A'.$last_count, '审批:');$sheet->mergeCells('A'.$last_count.':F'.$last_count);$sheet->setCellValue('G'.$last_count, '审核:');$sheet->mergeCells('G'.$last_count.':K'.$last_count);$sheet->setCellValue('L'.$last_count, '制表:');$sheet->mergeCells('L'.$last_count.':P'.$last_count);header('Content-Type:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');header('Content-Disposition: attachment;filename="'.$filename.'.xlsx"');header('Cache-Control: max-age=0');ob_end_clean();$writer = IOFactory::createWriter($spreadsheet, 'Xlsx');$writer->save('php://output');exit;}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/60657.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ESP32学习笔记_FreeRTOS(2)——Queue

摘要(From AI): 在嵌入式系统开发中,任务之间的高效通信是实现多任务协作的关键。FreeRTOS 提供了强大的队列机制,支持任务之间安全、灵活地传递数据,是实现任务同步和事件通知的核心工具。本篇博客将全面解析 FreeRTOS 队列的工作原理和应用…

Android Binder技术概览

Android中的Binder是一种基于远程过程调用(Remote Procedure Call, RPC)的轻量级通信机制,核心用于 Android 系统中的进程间通信(Inter-Process Communication, IPC)。Binder 是 Android 系统中不可或缺的一部分&#…

MySQL学习入门

好的!以下是一个详细的 MySQL 入门学习文档,针对 Python 开发者,包含使用 SQLite 进行学习的示例。文档将涵盖实际开发中需要使用的各种相关操作和知识,帮助您从基础开始,逐步掌握在 Python 中使用 MySQL 的技能。 MyS…

AI模型---安装cuda与cuDNN

1.安装cuda 先打开cmd 输入nvidia-smi 查看显卡支持cuda对应的版本: 然后去英伟达官网下载cuda(外网多刷几次) https://developer.nvidia.com/cuda-toolkit-archive 注意对应版本 安装过程中如果显示如下图: 请安装visual Stu…

大数据背景下信息通信网络安全管理管理策略研究

摘要: 在互联网以及计算机技术的支持下我国已经进入了大数据时代,各行各业在发展的进程之中更多的借助云计算技术慢慢完成了信息发展。在信息化发展的进程中,因为网络的开放性,促使信息通信网络安全工作面临一定危胁,安…

ajax (一)

什么是 AJAX [ˈeɪdʒks] ? 概念:AJAX是浏览器与服务器进行 数据通信 的技术,动态数据交互 怎么用AJAX? 1. 先使用 axios [k‘sio ʊ s] 库, 与服务器进行 数据通信 ⚫ 基于 XMLHttpRequest 封装、代码简单、月下载量在 1…

k8s rainbond centos7/win10 -20241124

参考 https://www.rainbond.com/ 国内一站式云原生平台 对centos7环境支持不太行 [lighthouseVM-16-5-centos ~]$ curl -o install.sh https://get.rainbond.com && bash ./install.sh 2024-11-24 09:56:57 ERROR: Ops! Docker daemon is not running. Start docke…

使用 Maven 开发 IntelliJ IDEA 插件

使用 Maven 开发 IntelliJ IDEA 插件的完整流程 1. 创建 Maven 项目 1.1 使用 IntelliJ 创建 Maven 项目 打开 IntelliJ IDEA,点击 File > New > Project。选择 Maven,填写项目名称和 GroupId,例如: GroupId: com.exampl…

Load-Balanced-Online-OJ(负载均衡式在线OJ)

负载均衡式在线OJ 前言1. 项目介绍2. 所用技术与环境所用技术栈开发环境 3. 项目宏观结构3.1 项目核心模块3.2 项目的宏观结构 4. comm公共模块4.1 日志(log.hpp )4.1.1 日志主要内容4.1.2 日志使用方式4.1.2 日志代码 4.2 工具(util.hpp&…

微信小程序上传微信官方审核流程(1)

1,打开微信开发者工具 2,微信开发者工具右上角有一个上传按钮,点击上传按钮 3,点击完上传按钮会弹出一个上传成功的提示,点击提示框中的确定按钮 4,点击完确定按钮后会显示填写版本好和项目备注 5&#x…

EXISTS 和 IN 的使用方法、特性及查询效率比较

在 SQL Server 中,EXISTS 和 IN 是两个常用的子查询操作符,用于检查某个值是否存在于一个子查询的结果集中。尽管它们在功能上有相似之处,但在使用方法、特性、查询效率和生成查询计划方面存在一些重要的区别。本文将详细探讨这两个操作符的使…

flink学习(3)——方法的使用—对流的处理(map,flatMap,filter)

map 数据 86.149.9.216 10001 17/05/2015:10:05:30 GET /presentations/logstash-monitorama-2013/images/github-contributions.png 83.149.9.216 10002 17/05/2015:10:06:53 GET /presentations/logstash-monitorama-2013/css/print/paper.css 83.149.9.216 10002 17/05/20…

数据结构(Java版)第一期:时间复杂度和空间复杂度

目录 一、数据结构的概念 1.1. 什么是数据结构 1.2. 算法与数据结构的关系 二、算法效率 三、时间复杂度 3.1. 大O的渐进表⽰法 3.2. 计算冒泡排序的时间复杂度 3.3. 计算二分查找的时间复杂度 四、空间复杂度 4.1. 空间复杂度 4.2. 冒泡排序的空间复杂度 4.3.…

微信小程序全局配置:导航栏、下拉刷新与上拉触底设置教程

微信小程序全局配置:导航栏、下拉刷新与上拉触底设置教程 引言 微信小程序作为一种新兴的轻量级应用,凭借其便捷性和丰富的功能受到了广泛的欢迎。在开发小程序的过程中,合理配置全局属性是提升用户体验的关键。本文将深入探讨小程序的全局配置中的window选项,重点介绍导…

语言模型中的多模态链式推理

神经网络的公式推导 简介摘要引言多模态思维链推理的挑战多模态CoT框架多模态CoT模型架构细节编码模块融合模块解码模块 实验结果运行代码补充细节安装包下载Flan-T5数据集准备rougenltkall-MiniLM-L6-v2运行 简介 本文主要对2023一篇论文《Multimodal Chain-of-Thought Reason…

LLaMA-Mesh: Unifying 3D Mesh Generation with Language Models 论文解读

目录 一、概述 二、相关工作 1、LLMs到多模态 2、3D对象生成 3、自回归的Mesh生成 三、LLaMA-Mesh 1、3D表示 2、预训练模型 3、有监督的微调数据集 4、数据集演示 四、实验 1、生成的多样性 2、不同模型text-to-Mesh的比较 3、通用语境的评估 一、概述 该论文首…

【Go】-go中的锁机制

目录 一、锁的基础知识 1. 互斥量/互斥锁 2. CAS(compare and swap) 3. 自旋锁 4. 读写锁 5. 乐观锁 & 悲观锁 6. 死锁 二、go中锁机制 1. Mutex-互斥锁 2. RWMutex-读写锁 2.1 RWMutex流程概览 2.2 写锁饥饿问题 2.3. golang的读写锁源…

VSCode 新建 Python 包/模块 Pylance 无法解析

问题描述: 利用 VSCode 写代码,在项目里新建一个 Python 包或者模块,然后在其他文件里正常导入这个包或者模块时出现: Import “xxxx” could not be resolved Pylance (reportMissingImports) 也就是说 Pylance 此时无法解析我们…

深入理解 Java 阻塞队列:使用场景、原理与性能优化

在并发编程中,线程安全的队列是解决线程间任务传递和调度的关键工具之一。阻塞队列(BlockingQueue)作为一种线程安全的队列,实现了在并发环境下对共享数据的安全访问,广泛应用于生产者-消费者模型、任务调度和多线程计…

.NET9 - 新功能体验(二)

书接上回,我们继续来聊聊.NET9和C#13带来的新变化。 01、新的泛型约束 allows ref struct 这是在 C# 13 中,引入的一项新的泛型约束功能,允许对泛型类型参数应用 ref struct 约束。 可能这样说不够直观,简单来说就是Span、ReadO…