ThinkPHP8导出Excel单元格为下拉选择框

news/2024/11/16 9:42:16/
说明

本文章是基于上一篇ThinkPHP8 导出Excel数据表格文章的完善版,上一篇仅导出为文本框,此处增加下拉框。

其他内容与上一章不变,此处展示不同内容。

更改

1.头部数组修改

增加type类型,text为文本框,select为下拉框,具体其他需求自行扩展。

['key' => 'field', 'title' => '内容', 'type' => 'text'],
['key' => 'date', 'title' => '日期', 'type' => 'select'],

2.设置内容方法修改

仅需要替换该方法即可,具体内容可根据业务场景自行修改。

/*** @notes 设置单元格值* @param array $data 数据* @param array $header 表头数据* @param string|int $startRow 默认第二行开始* @return object*/public function setContent(array $data, array $header, string|int $startRow = 2): object{//  获取总列数$column = $this->getColumn(count($header));$totalColumn = count($data);//  遍历数据foreach ($data as $key => $value) {//  遍历表头for ($i = 0; $i < count($header); $i++) {//  获取单元格名称$columnName = $column[$i] . ($key + $startRow);$columnType = $header[$i]['type'];$columnValue = $value[$header[$i]['key']] ?? '';//  设置单元格数据switch ($columnType) {case 'text':$this->sheet->getActiveSheet()->setCellValue($columnName, $columnValue);break;case 'select':$objValidation = $this->sheet->getActiveSheet()->getCell($columnName)->getDataValidation();$objValidation->setType(DataValidation::TYPE_LIST)->setErrorStyle(DataValidation::STYLE_INFORMATION)->setAllowBlank(false)->setShowInputMessage(true)->setShowErrorMessage(true)->setShowDropDown(true)->setErrorTitle('输入的值有误')->setError('您输入的值不在下拉框列表内.')->setPromptTitle('')->setPrompt('')->setFormula1('"' . $columnValue . '"');break;default:$this->sheet->getActiveSheet()->setCellValue($columnName, $value[$header[$i]['key']] ?? '');}//  设置单元格自适应宽度$this->sheet->getActiveSheet()->getColumnDimension($column[$i])->setAutoSize(true);//  设置单元格自适应高度$this->sheet->getActiveSheet()->getRowDimension($key + $startRow)->setRowHeight(24);}unset($data[$key]);}$startColumn = $column[0] . $startRow;$endColumn = $column[count($column) - 1] . $totalColumn + $startRow - 1;//  设置字体大小及加粗$this->sheet->getActiveSheet()->getStyle($startColumn . ':' . $endColumn)->getFont()->setBold(false)->setSize(11);//  设置单元格水平居中$this->sheet->getActiveSheet()->getStyle($startColumn . ':' . $endColumn)->getAlignment()->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER);//  设置单元格垂直居中$this->sheet->getActiveSheet()->getStyle($startColumn . ':' . $endColumn)->getAlignment()->setVertical(\PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_CENTER);//  设置单元格边框$this->sheet->getActiveSheet()->getStyle($startColumn . ':' . $endColumn)->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);return $this->sheet;}


http://www.ppmy.cn/news/1456113.html

相关文章

充电宝买哪个牌子?四款性能超强充电宝牌子推荐!速来码住!

在快节奏的现代生活中&#xff0c;手机已经成为了我们最亲密的伙伴。无论是工作、学习还是娱乐&#xff0c;手机都扮演着至关重要的角色。然而&#xff0c;手机电量的问题总是让人头疼。特别是在外出旅行时&#xff0c;手机电量耗尽更是让人倍感焦虑。为了解决这个问题&#xf…

Taro@3.x+Vue@3.x+TS开发微信小程序,网络请求封装

参考文档 Taro.request(option) 在 src/http 下创建 request.ts, 写入如下配置&#xff1a; import Taro from tarojs/taro import { encryptData } from ./encryptconsole.log(NODE_ENV, process.env.NODE_ENV) console.log(TARO_APP_PROXY, process.env.TARO_APP_PROXY) c…

应用分层和企业规范

目录 一、应用分层 1、介绍 &#xff08;1&#xff09;为什么需要应用分层&#xff1f; &#xff08;2&#xff09;如何分层&#xff1f;&#xff08;三层架构&#xff09; MVC 和 三层架构的区别和联系 高内聚&#xff1a; 低耦合&#xff1a; 2、代码重构 controlle…

R-Tree原理及实现代码

R-Tree 原理 R-Tree&#xff08;也称为R树或R*树&#xff09;是一种空间索引数据结构&#xff0c;用于存储多维空间中的对象&#xff0c;如二维空间中的点和多边形。R-Tree 最初由 Antonin Guttman 在 1984 年提出&#xff0c;它解决了 B-Tree 和其变种在空间数据索引中的不足…

Python使用割圆法求π值

三国时期刘徽提出的割圆法有多牛掰&#xff0c;看这个&#xff1a;刘徽割圆术到底做了什么&#xff1f; - 知乎 用Python实现的该算法代码如下&#xff1a; #!/usr/bin/env python """使用割圆法计算π值Usage::$ python calc_circle_pi.py 20 # 参数20是迭代…

最适合程序员的浏览器翻译插件——简约翻译!

1.支持功能 划词翻译&#xff08;读音、解释、词性全都有&#xff0c;还可收藏词汇&#xff09; 网页双语对照翻译 YouTube字幕翻译 输入框翻译 鼠标悬停翻译 2.自定义翻译规则 规则订阅/规则分享 自定义专业术语 3.自定义快捷键 AltQ 开启翻译 Alt…

Mysql 行格式 DYNAMIC 和 COMPACT 区别

MySQL的InnoDB存储引擎提供了多种行格式&#xff0c;其中DYNAMIC和COMPACT是两种常见的选择。这两种行格式在处理数据时有一些关键的区别&#xff0c;尤其是在管理大字段&#xff08;如BLOB、TEXT和大的VARCHAR字段&#xff09;方面。以下是DYNAMIC和COMPACT行格式的主要区别&a…

类和对象-Python-第一部分

初识对象 使用对象组织数据 class Student:nameNonegenderNonenationalityNonenative_placeNoneageNonestu_1Student()stu_1.name"林军杰" stu_1.gender"男" stu_1.nationality"中国" stu_1.native_place"山东" stu_1.age31print(stu…