phpspreadsheet导出Excel报错: Invalid numeric value for datatype Numeric

2024-03-28 05:52

本文主要是介绍phpspreadsheet导出Excel报错: Invalid numeric value for datatype Numeric,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

使用 phpspreadsheet 导出Excel的一段代码如下:

$sheet->setCellValue($cellName[$kk] . ($key + 2), $vv);

如果某个字段值里面包含 换行符(\n) 会导致报错:

Invalid numeric value for datatype Numeric

解决办法:

if (substr($vv, -1) == "\n" || substr($vv, -1) == "\t") {$vv .= " ";}$sheet->setCellValue($cellName[$kk] . ($key + 2), $vv);

使用phpspreadsheet 导出Excel的方法示例如下:

	/*** 导出Excel文件* @param array $list 数据列表数组* @param array $field_map 数组字段数组* @param string $file_path 文件路径* @param string $filename 文件名称* @param bool $filename_append_now_time 文件名是否追加当前时间* @param string $suffix 文件后缀* @return false|string* @throws Exception*/public static function outputExcel(array $list, array $field_map, string $file_path, string $filename, bool $filename_append_now_time = true, string $suffix = 'xlsx'){//处理 $list 数据列表$data = [];foreach ($list ?? [] as $v) {$item = [];foreach ($field_map as $field_key => $field_val) {//解析 $field_map 中 数组多级key的数据,需要在 $field_map 中定义多个key 以.分隔, 例如: user.info.name$field_key_split = explode('.', $field_key);$container = $v;for ($index = 0; $index <= 2; $index++) {if (isset($field_key_split[$index]) && isset($container[$field_key_split[$index]])) {$container = $container[$field_key_split[$index]];}}if (is_array($container)) {$container = '';}$item[$field_key] = $container;}//$data[] = array_values($item);$data[] = $item;}//表头A-Z列定义$cellName = [];for ($i = 'A'; $i <= 'Z'; $i++) {$cellName[] = $i;}$spreadsheet = new Spreadsheet();$sheet = $spreadsheet->getActiveSheet();//设置表头行$titleList = array_values($field_map);//设置表头单元格样式$styleArray = ['font' => ['bold' => true, // 字体加粗'color' => ['rgb' => '0000ff',],]];foreach ($titleList as $tkey => $tval) {$sheet->setCellValue($cellName[$tkey] . '1', $tval);$sheet->getStyle($cellName[$tkey] . '1')->applyFromArray($styleArray);}//设置表数据内容行和列foreach ($data ?? [] as $key => $val) {$val = array_values($val);foreach ($val as $kk => $vv) {if (is_string($vv)) { //对于字符串类型,防止较长的数字字符串被格式化为科学计数法$sheet->setCellValueExplicitByColumnAndRow(($kk + 1), ($key + 2), $vv, DataType::TYPE_STRING);} else {//导出的某个字段值里面包含 换行符(\n) 会导致报错: Invalid numeric value for datatype Numericif (substr($vv, -1) == "\n" || substr($vv, -1) == "\t") {$vv .= " ";}$sheet->setCellValue($cellName[$kk] . ($key + 2), $vv);}}}//创建目录并写入Excel文件if (!is_dir($file_path)) {if (!mkdir($file_path, 0777, true)) {return false;}}if ($filename_append_now_time) {$filename .= '-' . date("YmdHis", time());}$filename .= '.' . strtolower($suffix);$objWriter = new Xlsx($spreadsheet);$objWriter->save($file_path . '/' . $filename);return $filename;}

调用部分示例:

$list = json_decode('[{"id":1,"username":"jihongchu","mobile":"177888","nickname":"王先生","avatar":"https://profile-avatar.csdnimg.cn/default.jpg","status":1,"time":{"last_login_time":"2024-03-22 14:42:14","add_time":"2024-03-22 14:42:14","update_time":"2024-03-27 10:47:57"}}]',true);//设置导出的字段和表头
$field_map = ["id" => "ID","username" => "用户名","mobile" => "手机号","nickname" => "昵称","status" => "状态",//针对二维模型导出的字段定义"time.last_login_time" => "最后登录时间","time.add_time" => "添加时间","time.update_time" => "修改时间",
];
$file_path = $file_root . '/' . $file_folder; //绝对路径
$file_title = '用户数据导出-' . time();
$output_file_name = FileUtil::outputExcel($list, $field_map, $file_path, $file_title);

导出结果:
在这里插入图片描述

这篇关于phpspreadsheet导出Excel报错: Invalid numeric value for datatype Numeric的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/854640

相关文章

idea突然报错Malformed \uxxxx encoding问题及解决

《idea突然报错Malformeduxxxxencoding问题及解决》Maven项目在切换Git分支时报错,提示project元素为描述符根元素,解决方法:删除Maven仓库中的resolv... 目www.chinasem.cn录问题解决方式总结问题idea 上的 maven China编程项目突然报错,是

使用EasyPoi快速导出Word文档功能的实现步骤

《使用EasyPoi快速导出Word文档功能的实现步骤》EasyPoi是一个基于ApachePOI的开源Java工具库,旨在简化Excel和Word文档的操作,本文将详细介绍如何使用EasyPoi快速... 目录一、准备工作1、引入依赖二、准备好一个word模版文件三、编写导出方法的工具类四、在Export

前端导出Excel文件出现乱码或文件损坏问题的解决办法

《前端导出Excel文件出现乱码或文件损坏问题的解决办法》在现代网页应用程序中,前端有时需要与后端进行数据交互,包括下载文件,:本文主要介绍前端导出Excel文件出现乱码或文件损坏问题的解决办法,... 目录1. 检查后端返回的数据格式2. 前端正确处理二进制数据方案 1:直接下载(推荐)方案 2:手动构造

C#利用Free Spire.XLS for .NET复制Excel工作表

《C#利用FreeSpire.XLSfor.NET复制Excel工作表》在日常的.NET开发中,我们经常需要操作Excel文件,本文将详细介绍C#如何使用FreeSpire.XLSfor.NET... 目录1. 环境准备2. 核心功能3. android示例代码3.1 在同一工作簿内复制工作表3.2 在不同

java读取excel文件为base64实现方式

《java读取excel文件为base64实现方式》文章介绍使用ApachePOI和EasyExcel处理Excel文件并转换为Base64的方法,强调EasyExcel适合大文件且内存占用低,需注意... 目录使用 Apache POI 读取 Excel 并转换为 Base64使用 EasyExcel 处

Redis高性能Key-Value存储与缓存利器常见解决方案

《Redis高性能Key-Value存储与缓存利器常见解决方案》Redis是高性能内存Key-Value存储系统,支持丰富数据类型与持久化方案(RDB/AOF),本文给大家介绍Redis高性能Key-... 目录Redis:高性能Key-Value存储与缓存利器什么是Redis?为什么选择Redis?Red

linux查找java项目日志查找报错信息方式

《linux查找java项目日志查找报错信息方式》日志查找定位步骤:进入项目,用tail-f实时跟踪日志,tail-n1000查看末尾1000行,grep搜索关键词或时间,vim内精准查找并高亮定位,... 目录日志查找定位在当前文件里找到报错消息总结日志查找定位1.cd 进入项目2.正常日志 和错误日

Python Excel 通用筛选函数的实现

《PythonExcel通用筛选函数的实现》本文主要介绍了PythonExcel通用筛选函数的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着... 目录案例目的示例数据假定数据来源是字典优化:通用CSV数据处理函数使用说明使用示例注意事项案例目的第一

JAVA实现亿级千万级数据顺序导出的示例代码

《JAVA实现亿级千万级数据顺序导出的示例代码》本文主要介绍了JAVA实现亿级千万级数据顺序导出的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 前提:主要考虑控制内存占用空间,避免出现同时导出,导致主程序OOM问题。实现思路:A.启用线程池

Java利用Spire.XLS for Java设置Excel表格边框

《Java利用Spire.XLSforJava设置Excel表格边框》在日常的业务报表和数据处理中,Excel表格的美观性和可读性至关重要,本文将深入探讨如何利用Spire.XLSforJava库... 目录Spire.XLS for Java 简介与安装Maven 依赖配置手动安装 JAR 包核心API介