phpspredsheet导出excel,支持长数字
Posted Leone
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了phpspredsheet导出excel,支持长数字相关的知识,希望对你有一定的参考价值。
工作中比较多地遇到导出excel的需求,我通常是用phpspread完成,然而有时候像导出身份证号,银行卡号,订单号这些比较长而且格式为纯数字的数据时往往会出现变成科学计数法的情况,设置为默认文本格式又会出现末尾数字变成0的情况
经过搜索和测试后总算是有了解决办法,我将其封装成了一个函数:
function CreateExcel($Data, $Header, $Path, $FileName,$LongNumberField=null) { $SpreadSheet = new \\PhpOffice\\PhpSpreadsheet\\Spreadsheet(); $Sheet = $SpreadSheet->getActiveSheet(); if($LongNumberField===null){ array_unshift($Data, $Header); $SpreadSheet->getDefaultStyle()->getNumberFormat()->setFormatCode(\\PhpOffice\\PhpSpreadsheet\\Style\\NumberFormat::FORMAT_NUMBER); $Sheet->fromArray($Data); } else{ $HeaderCount=count($Header); for($i=0;$i<$HeaderCount;$i++){ $Sheet->setCellValueByColumnAndRow($i+1,1,$Header[$i]); } $RowIndex=2; $DataCount=count($Data); for($i=0;$i<$DataCount;$i++){ $ColumnIndex=1; foreach ($Data[$i] as $Key=>$Value){ if(in_array($Key,$LongNumberField)){ $Sheet->setCellValueExplicitByColumnAndRow($ColumnIndex,$RowIndex,$Value,\\PhpOffice\\PhpSpreadsheet\\Cell\\DataType::TYPE_STRING); } else{ $Sheet->setCellValueByColumnAndRow($ColumnIndex,$RowIndex,$Value); } $ColumnIndex++; } $RowIndex++; } } $Xlsx = new \\PhpOffice\\PhpSpreadsheet\\Writer\\Xlsx($SpreadSheet); $Xlsx->save($Path . $FileName); }
示例:
$Data=[ [\'id\'=>1,\'name\'=>\'张三\',\'bank_card\'=>\'123456789123456789\'], [\'id\'=>2,\'name\'=>\'李四\',\'bank_card\'=>\'123456123456789789\'], ]; $Header=[\'id\',\'姓名\',\'银行卡号\']; $Path=\'D:/www/test/\'; $FileName=\'Export.xlsx\'; $LongNumberField=[\'bank_card\']; CreateExcel($Data,$Header,$Path,$FileName,$LongNumberField);
以上是关于phpspredsheet导出excel,支持长数字的主要内容,如果未能解决你的问题,请参考以下文章