php从数据库导出csv格式的Excel表格是,字段本身就有逗号怎么办?说在字段上加双引号,但加在哪??

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php从数据库导出csv格式的Excel表格是,字段本身就有逗号怎么办?说在字段上加双引号,但加在哪??相关的知识,希望对你有一定的参考价值。

如下代码,加在$cv,$data[$key]上都不行??怎么办求大神解救 //导出xls 开始 if (!empty($title)) foreach ($title as $k => $v) $title[$k]=iconv("UTF-8", "GB2312",$v); $title= implode("\t", $title); echo "$title\n"; if (!empty($data)) foreach($data as $key=>$val) foreach ($val as $ck => $cv) $data[$key][$ck]=iconv("UTF-8","GB2312",$cv); $data[$key]=implode("\t",$data[$key]); echo implode("\n",$data);

$data[$key]=implode("\\t",$data[$key]);
你的程序用这个语句把一行数组转换为TAB分割的字符串,这样EXCEL是可以打开的,只是不完全符合CSV的规则(逗号分开),要改为逗号分开,而且每个字段要用引号,该语句修改为下面这样既可:
$data[$key]=\'"\' . implode(\'","\',$data[$key]) . \'"\';
参考技术A 需要自己去手动重置才能正常显示,自己也不太清楚原因,琢磨后通过以下两种方式解决。
$objphpExcel->getActiveSheet(0)->getStyle('B')->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_TEXT);
1
第一种方法:不知道是不是因为数据本身是字符串的原因,设置格式改为自定义数字类型后可以了。
$objPHPExcel->getActiveSheet(0)->getStyle('B')->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_NUMBER);
1
第二种方法:在插入数据时设置格式。
$objPHPExcel->setActiveSheetIndex ( 0 )->setCellValueExplicit('B'.($i + 1),$orders['order_list'][$i-1]['order_sn'],PHPExcel_Cell_DataType::TYPE_STRING);
1
以下是具体代码:
require_once ‘includes/Classes/PHPExcel.php’;
require_once ‘includes/Classes/PHPExcel/Writer/Excel5.php’;
require_once ‘includes/Classes/PHPExcel/Writer/Excel2007.php’;
require_once ‘includes/Classes/PHPExcel/IOFactory.php’;

php JS 导出表格特殊处理

但是这样导出身份证号会变为科学计数;

解决方法就是:

我们了解一下excel从web页面上导出的原理。当我们把这些数据发送到客户端时,我们想让客户端程序(浏览器)以excel的格式读取 它,所以把mime类型设为:application/vnd.ms-excel,当excel读取文件时会以每个cell的格式呈现数据,如果cell 没有规定的格式,则excel会以默认的格式去呈现该cell的数据。这样就给我们提供了自定义数据格式的空间,当然我们必须使用excel支持的格式。 下面就列出常用的一些格式:
1) 文本:vnd.ms-excel.numberformat:@
2) 日期:vnd.ms-excel.numberformat:yyyy/mm/dd
3) 数字:vnd.ms-excel.numberformat:#,##0.00
4) 货币:vnd.ms-excel.numberformat:¥#,##0.00
5) 百分比:vnd.ms-excel.numberformat: #0.00%
这些格式你也可以自定义,比如年月你可以定义为:yy-mm等等。那么知道了这些格式,怎么去把这些格式添加到cell中呢?很简单,我们只需要把样式添 加到对应的标签对(即闭合标签)即可。如<td></td>,给标签对<td></td>添加样式,如 下: <td style="vnd.ms-excel.numberformat:@">410522198402161833</td>
同样,我们也可以给<div></div>添加样式,也可以给<tr>< /tr>,<table></table>添加样式;当我们在父标签对和子标签对都添加样式时,数据会以哪一个样式呈现 呢?经过测试,会以离数据最近的样式呈现.





于是按照他说的方法设置了导出数据时对应的身份证列的<td>的样式:


echo "<td style=‘vnd.ms-excel.numberformat:@‘>".$printable."</td> ";


果然成功了,没有枉费了查半天的资料。




















以上是关于php从数据库导出csv格式的Excel表格是,字段本身就有逗号怎么办?说在字段上加双引号,但加在哪??的主要内容,如果未能解决你的问题,请参考以下文章

PHP导出大量数据到csv表

php中如何导入导出CSV格式的文件

DB Csv 导出和 Excel 数字格式

如何将CACTI导出的CSV数据变成5分钟取次值(时间范围是1个月)

从 Excel 导出

excel表格中怎样使用CSV逗号分隔格式?