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实现Excel与HTML互转

《Java实现Excel与HTML互转》Excel是一种电子表格格式,而HTM则是一种用于创建网页的标记语言,虽然两者在用途上存在差异,但有时我们需要将数据从一种格式转换为另一种格式,下面我们就来看看... Excel是一种电子表格格式,广泛用于数据处理和分析,而HTM则是一种用于创建网页的标记语言。虽然两

Python进阶之Excel基本操作介绍

《Python进阶之Excel基本操作介绍》在现实中,很多工作都需要与数据打交道,Excel作为常用的数据处理工具,一直备受人们的青睐,本文主要为大家介绍了一些Python中Excel的基本操作,希望... 目录概述写入使用 xlwt使用 XlsxWriter读取修改概述在现实中,很多工作都需要与数据打交

使用SQL语言查询多个Excel表格的操作方法

《使用SQL语言查询多个Excel表格的操作方法》本文介绍了如何使用SQL语言查询多个Excel表格,通过将所有Excel表格放入一个.xlsx文件中,并使用pandas和pandasql库进行读取和... 目录如何用SQL语言查询多个Excel表格如何使用sql查询excel内容1. 简介2. 实现思路3

python实现pdf转word和excel的示例代码

《python实现pdf转word和excel的示例代码》本文主要介绍了python实现pdf转word和excel的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录一、引言二、python编程1,PDF转Word2,PDF转Excel三、前端页面效果展示总结一

解决systemctl reload nginx重启Nginx服务报错:Job for nginx.service invalid问题

《解决systemctlreloadnginx重启Nginx服务报错:Jobfornginx.serviceinvalid问题》文章描述了通过`systemctlstatusnginx.se... 目录systemctl reload nginx重启Nginx服务报错:Job for nginx.javas

Python实现将实体类列表数据导出到Excel文件

《Python实现将实体类列表数据导出到Excel文件》在数据处理和报告生成中,将实体类的列表数据导出到Excel文件是一项常见任务,Python提供了多种库来实现这一目标,下面就来跟随小编一起学习一... 目录一、环境准备二、定义实体类三、创建实体类列表四、将实体类列表转换为DataFrame五、导出Da

Python数据处理之导入导出Excel数据方式

《Python数据处理之导入导出Excel数据方式》Python是Excel数据处理的绝佳工具,通过Pandas和Openpyxl等库可以实现数据的导入、导出和自动化处理,从基础的数据读取和清洗到复杂... 目录python导入导出Excel数据开启数据之旅:为什么Python是Excel数据处理的最佳拍档

使用Python处理CSV和Excel文件的操作方法

《使用Python处理CSV和Excel文件的操作方法》在数据分析、自动化和日常开发中,CSV和Excel文件是非常常见的数据存储格式,ython提供了强大的工具来读取、编辑和保存这两种文件,满足从基... 目录1. CSV 文件概述和处理方法1.1 CSV 文件格式的基本介绍1.2 使用 python 内

Python使用Pandas库将Excel数据叠加生成新DataFrame的操作指南

《Python使用Pandas库将Excel数据叠加生成新DataFrame的操作指南》在日常数据处理工作中,我们经常需要将不同Excel文档中的数据整合到一个新的DataFrame中,以便进行进一步... 目录一、准备工作二、读取Excel文件三、数据叠加四、处理重复数据(可选)五、保存新DataFram

VMWare报错“指定的文件不是虚拟磁盘“或“The file specified is not a virtual disk”问题

《VMWare报错“指定的文件不是虚拟磁盘“或“Thefilespecifiedisnotavirtualdisk”问题》文章描述了如何修复VMware虚拟机中出现的“指定的文件不是虚拟... 目录VMWare报错“指定的文件不是虚拟磁盘“或“The file specified is not a virt