CSV文件格式介绍

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CSV文件格式介绍相关的知识,希望对你有一定的参考价值。

参考技术A CSV即Comma Separate Values,这种文件格式经常用来作为不同程序之间的数据交互的格式。

具体文件格式

1.每条记录占一行 以逗号为分隔符
2.逗号前后的空格会被忽略
3.字段中包含有逗号,该字段必须用双引号括起来
4.字段中包含有换行符,该字段必须用双引号括起来
5.字段前后包含有空格,该字段必须用双引号括起来
6.字段中的双引号用两个双引号表示
7.字段中如果有双引号,该字段必须用双引号括起来
8.第一条记录,可以是字段名

John,Doe,120 jefferson st.,Riverside, NJ, 08075
Jack,McGinnis,220 hobo Av.,Phila, PA,09119
"John ""Da Man""",Repici,120 Jefferson St.,Riverside, NJ,08075
Stephen,Tyler,"7452 Terrace ""At the Plaza"" road",SomeTown,SD, 91234
,Blankman,,SomeTown, SD, 00298
"Joan ""the bone"", Anne",Jet,"9th, at Terrace plc",Desert City,CO,00123

php使用ajax导出CSV或者EXCEl(thinkphp)方法

首先我强烈推荐看到这篇文章的你将导出文件设置为csv格式的文件 实际测试导出csv文件的速度是excel文件的10几倍左右

首先我先介绍csv文件的导出的方法:

如果你单纯是在数据导出界面上通过用户点击生成csv或者excel按钮通过服务器往浏览器输出excel或者csv 如果数据量小的化可以使用这样的方法(这种方法无法使用ajax)网上百度一下一堆介绍

这里有较为详细的方法介绍 和源码

我这里介绍的是 当数据量比较大时比如生成excel或者csv文件可能需要 几分钟这时候我们需要在用户点击生成按钮后先生成一个loading框阻止用户随意乱点 将excel或者 csv文件先导出到

服务器端后然后通过ajax方法返回给浏览器一个下载地址用户点击下载地址后下载文件

1.导出csv的话非常简单

核心生成代码

//这里传入的$data为二维数组

//即为$data = ( array ,array,array)

function create_csv($data,$filename=‘simple.xls‘)

{

ini_set(‘max_execution_time‘, ‘0‘);

//这里的CSV即你项目的根目录下新建一个CSV文件夹

$path = (‘CSV/‘.iconv(‘UTF-8‘,‘gb2312‘,$filename));

$fp = fopen($path, ‘w‘);

foreach( $data as $k => $v)

{

foreach ($v as $key => &$value)

{

//将数据值进行在编码 避免中文乱码问题

$value = iconv(‘UTF-8‘,‘gb2312‘,$value);

}

fputcsv($fp, $v); }

fclose($fp);

$result = array( ‘status‘ => 1, ‘path‘ =>‘CSV/‘.$filename );

return $result;

exit;

}

后台调用代码:

public function generate()

{

 

//这里data需要处理为二维数据及最终为 $data = (array,array,array)这样

$data = array();

$excel_title =array( "_id" , "bo_subject", );

array_push($data,$excel_title);

...处理真实数据并将其push入$data中

 $result = create_csv($data,$filename);

$this->ajaxReturn($result);

}

前台通过jquery进行post:建议先去学习一下layer这个弹出层组件特别不错传送门

代码:

<button style=" float: right;" class="btn" id="generate" url="{:U(‘generate‘)}">生成</button>

$(‘#generate‘).click(function(event)

{

var url = $(this).attr(‘url‘);

//loading层

var index = layer.load(1);

function download(content)

{

layer.open({

type: 1,

content: content,

skin: ‘layui-layer-demo‘,

//样式类名

closeBtn: 1,

shift: 0,

area: [‘200px‘, ‘105px‘],

shadeClose: true,

//开启遮罩关闭

content:content }); }

$.post(url, function(data) {

if (data.status)

{

layer.close(index);

data.path = ‘__ROOT__‘ +‘/‘+(data.path);

var test = ‘<a class="download" href =‘ + data.path + ‘ target="_blank" >点击下载</a>‘;

download(test); }

else {

layer.close(index);

layer.alert(‘出现错误‘) } }, "json"); });

2.导出excel:(导出excel特别慢 适用场景为更复杂的问题比如导出字体的颜色大小排版控制 并且导出图片之类)

首先我们需要引入phpexcel这个插件下载完后去掉没必要的放在 /ThinkPHP/Library/Vendor/PHPExcel

 注意目录结构为如图 

技术分享

 

核心函数为:

function create_xls($data,$filename=‘simple.xls‘)

{

ini_set(‘max_execution_time‘, ‘0‘);

Vendor(‘PHPExcel.PHPExcel‘);

 $phpexcel = new PHPExcel();

$phpexcel->getProperties() ->setCreator("HYZ") ->setLastModifiedBy("HYZ") ->setTitle("Office 2007 XLSX Test Document") ->setSubject("Office 2007 XLSX Test Document") ->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.") ->setKeywords("office 2007 openxml php") ->setCategory("11111");

$phpexcel->getActiveSheet()->fromArray($data);

$phpexcel->setActiveSheetIndex(0);

$objWriter = new PHPExcel_Writer_Excel2007($phpexcel);

//注意这里的是已经进行中文编码的传之前需要进行一下中文编码

$filePath = ‘CSV/‘.$filename.‘.xlsx‘;

$objWriter->save($filePath);

$result= array( ‘success‘ => true, ‘url‘ => $filePath );

return $result;

exit;

}

 其他的部分基本可以参考生成csv的一样

 

以上是关于CSV文件格式介绍的主要内容,如果未能解决你的问题,请参考以下文章

再见,CSV!这种文件格式快150倍!

Kettle入门系列之 二 (简单介绍文件转换)

tensorflow读取数据之CSV格式

Jmeter 文件格式的参数化 - CSV Data Set Config

csv文件格式问题

csv格式打开变成公式