php 封装原生数据导出的方法(csv文件格式)和csv文件中长数字自动变成科学计数法的处理

 

如何解决上图长数字自动转换处理?

CSV文件中长数字自动变成科学计数法处理.用程序导出的csv文件,当字段中有比较长的数字字段存在时,在用excel软件查看csv文件时就会变成科学计数法的表现形式.

其实这个问题跟用什么语言导出csv文件没有关系.Excel显示数字时,如果数字大于12位,它会自动转化为科学计数法;如果数字大于15位,它不仅用于科学技术法表示,还会只保留高15位,其他位都变0.

解决方式: 只要把数字字段后面加上显示上看不见的字符即可,字符串结尾加上制表符"\t"

示例demo:

 1 <?php
 2 /**
 3  * 导出数据
 4  * @return [type] [description]
 5  */
 6 function actionIncome()
 7 {
 8   //$data数据结构二维数组
 9   $data= [
10               [
11              'date'=>'20170501',
12                 'channel_id'=>'888888888888'."\t",
13                'game'=>'test',
14                 'fee'=>'10.00',
15               ]
16           ];
17 
18   $csvData = ''.','.''.','.'统计日报'."\n";
19   $csvData .= '日期,渠道id,游戏,收入' . "\n";
20   foreach ($data as $record) {
21       $tmp = array(
22               $record['date'],
23               $record['channel_id'],
24               $record['game'],
25               $record['fee'],
26           );
27 
28       $csvData .= implode(',', $tmp) . "\n";
29   }
30   exportCsv('统计.csv', $csvData);
31 }
32 
33 
34 /**
35  * 导出csv文件
36  * @param  [type] $filename [description]
37  * @param  [type] $data     [description]
38  * @return [type]           [description]
39  */
40 function exportCsv($filename, $data)
41 {
42     header("Content-type:text/csv");
43     header("Content-Disposition:attachment;filename=".$filename);
44     header('Cache-Control:must-revalidate,post-check=0,pre-check=0');
45     header('Expires:0');
46     header('Pragma:public');
47     echo iconv("UTF-8", "GBK//TRANSLIT", $data);
48     exit();
49 }
50 echo actionIncome();

 

解决如下图结果:

 

posted @ 2018-03-19 17:03  echo曦  阅读(939)  评论(0编辑  收藏  举报