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);

转载自:https://my.oschina.net/u/3470006/blog/4320723

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值