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 easyExcel实现导入多sheet的Excel

《JavaeasyExcel实现导入多sheet的Excel》这篇文章主要为大家详细介绍了如何使用JavaeasyExcel实现导入多sheet的Excel,文中的示例代码讲解详细,感兴趣的小伙伴可... 目录1.官网2.Excel样式3.代码1.官网easyExcel官网2.Excel样式3.代码

Java Web实现类似Excel表格锁定功能实战教程

《JavaWeb实现类似Excel表格锁定功能实战教程》本文将详细介绍通过创建特定div元素并利用CSS布局和JavaScript事件监听来实现类似Excel的锁定行和列效果的方法,感兴趣的朋友跟随... 目录1. 模拟Excel表格锁定功能2. 创建3个div元素实现表格锁定2.1 div元素布局设计2.

qt5cored.dll报错怎么解决? 电脑qt5cored.dll文件丢失修复技巧

《qt5cored.dll报错怎么解决?电脑qt5cored.dll文件丢失修复技巧》在进行软件安装或运行程序时,有时会遇到由于找不到qt5core.dll,无法继续执行代码,这个问题可能是由于该文... 遇到qt5cored.dll文件错误时,可能会导致基于 Qt 开发的应用程序无法正常运行或启动。这种错

C#实现将Office文档(Word/Excel/PDF/PPT)转为Markdown格式

《C#实现将Office文档(Word/Excel/PDF/PPT)转为Markdown格式》Markdown凭借简洁的语法、优良的可读性,以及对版本控制系统的高度兼容性,逐渐成为最受欢迎的文档格式... 目录为什么要将文档转换为 Markdown 格式使用工具将 Word 文档转换为 Markdown(.

MySQL启动报错:InnoDB表空间丢失问题及解决方法

《MySQL启动报错:InnoDB表空间丢失问题及解决方法》在启动MySQL时,遇到了InnoDB:Tablespace5975wasnotfound,该错误表明MySQL在启动过程中无法找到指定的s... 目录mysql 启动报错:InnoDB 表空间丢失问题及解决方法错误分析解决方案1. 启用 inno

使用C#删除Excel表格中的重复行数据的代码详解

《使用C#删除Excel表格中的重复行数据的代码详解》重复行是指在Excel表格中完全相同的多行数据,删除这些重复行至关重要,因为它们不仅会干扰数据分析,还可能导致错误的决策和结论,所以本文给大家介绍... 目录简介使用工具C# 删除Excel工作表中的重复行语法工作原理实现代码C# 删除指定Excel单元

Python实现pdf电子发票信息提取到excel表格

《Python实现pdf电子发票信息提取到excel表格》这篇文章主要为大家详细介绍了如何使用Python实现pdf电子发票信息提取并保存到excel表格,文中的示例代码讲解详细,感兴趣的小伙伴可以跟... 目录应用场景详细代码步骤总结优化应用场景电子发票信息提取系统主要应用于以下场景:企业财务部门:需

Mac备忘录怎么导出/备份和云同步? Mac备忘录使用技巧

《Mac备忘录怎么导出/备份和云同步?Mac备忘录使用技巧》备忘录作为iOS里简单而又不可或缺的一个系统应用,上手容易,可以满足我们日常生活中各种记录的需求,今天我们就来看看Mac备忘录的导出、... 「备忘录」是 MAC 上的一款常用应用,它可以帮助我们捕捉灵感、记录待办事项或保存重要信息。为了便于在不同

Python处理大量Excel文件的十个技巧分享

《Python处理大量Excel文件的十个技巧分享》每天被大量Excel文件折磨的你看过来!这是一份Python程序员整理的实用技巧,不说废话,直接上干货,文章通过代码示例讲解的非常详细,需要的朋友可... 目录一、批量读取多个Excel文件二、选择性读取工作表和列三、自动调整格式和样式四、智能数据清洗五、

解读@ConfigurationProperties和@value的区别

《解读@ConfigurationProperties和@value的区别》:本文主要介绍@ConfigurationProperties和@value的区别及说明,具有很好的参考价值,希望对大家... 目录1. 功能对比2. 使用场景对比@ConfigurationProperties@Value3. 核