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,支持长数字的主要内容,如果未能解决你的问题,请参考以下文章

长数转换格式

Excel 导出,字体不支持

poi读取excel模板,填充内容并导出,支持导出2007支持公式自动计算

EXCEL大数据量导出的解决方案

handsontable支持excel导入导出么

[DevExpress]DevExpress通用导出Excel,支持多个控件同时导出在同一个Sheet表