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

相关文章

java中使用POI生成Excel并导出过程

《java中使用POI生成Excel并导出过程》:本文主要介绍java中使用POI生成Excel并导出过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录需求说明及实现方式需求完成通用代码版本1版本2结果展示type参数为atype参数为b总结注:本文章中代码均为

SpringBoot启动报错的11个高频问题排查与解决终极指南

《SpringBoot启动报错的11个高频问题排查与解决终极指南》这篇文章主要为大家详细介绍了SpringBoot启动报错的11个高频问题的排查与解决,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一... 目录1. 依赖冲突:NoSuchMethodError 的终极解法2. Bean注入失败:No qu

springboot报错Invalid bound statement (not found)的解决

《springboot报错Invalidboundstatement(notfound)的解决》本文主要介绍了springboot报错Invalidboundstatement(not... 目录一. 问题描述二.解决问题三. 添加配置项 四.其他的解决方案4.1 Mapper 接口与 XML 文件不匹配

利用Python开发Markdown表格结构转换为Excel工具

《利用Python开发Markdown表格结构转换为Excel工具》在数据管理和文档编写过程中,我们经常使用Markdown来记录表格数据,但它没有Excel使用方便,所以本文将使用Python编写一... 目录1.完整代码2. 项目概述3. 代码解析3.1 依赖库3.2 GUI 设计3.3 解析 Mark

Python实现将MySQL中所有表的数据都导出为CSV文件并压缩

《Python实现将MySQL中所有表的数据都导出为CSV文件并压缩》这篇文章主要为大家详细介绍了如何使用Python将MySQL数据库中所有表的数据都导出为CSV文件到一个目录,并压缩为zip文件到... python将mysql数据库中所有表的数据都导出为CSV文件到一个目录,并压缩为zip文件到另一个

如何解决mysql出现Incorrect string value for column ‘表项‘ at row 1错误问题

《如何解决mysql出现Incorrectstringvalueforcolumn‘表项‘atrow1错误问题》:本文主要介绍如何解决mysql出现Incorrectstringv... 目录mysql出现Incorrect string value for column ‘表项‘ at row 1错误报错

java常见报错及解决方案总结

《java常见报错及解决方案总结》:本文主要介绍Java编程中常见错误类型及示例,包括语法错误、空指针异常、数组下标越界、类型转换异常、文件未找到异常、除以零异常、非法线程操作异常、方法未定义异常... 目录1. 语法错误 (Syntax Errors)示例 1:解决方案:2. 空指针异常 (NullPoi

SpringBoot项目启动报错"找不到或无法加载主类"的解决方法

《SpringBoot项目启动报错找不到或无法加载主类的解决方法》在使用IntelliJIDEA开发基于SpringBoot框架的Java程序时,可能会出现找不到或无法加载主类com.example.... 目录一、问题描述二、排查过程三、解决方案一、问题描述在使用 IntelliJ IDEA 开发基于

Java利用poi实现word表格转excel

《Java利用poi实现word表格转excel》这篇文章主要为大家详细介绍了Java如何利用poi实现word表格转excel,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 一、每行对象类需要针对不同的表格进行对应的创建。package org.example.wordToEx

利用Python实现添加或读取Excel公式

《利用Python实现添加或读取Excel公式》Excel公式是数据处理的核心工具,从简单的加减运算到复杂的逻辑判断,掌握基础语法是高效工作的起点,下面我们就来看看如何使用Python进行Excel公... 目录python Excel 库安装Python 在 Excel 中添加公式/函数Python 读取