php 利用csv导,php 导入/导出 csv 文件

1、简介

项目开发中,很多时候要将外部CSV文件导入到数据库中或者将数据导出为CSV文件,那么具体该如何实现呢?本文将使用原生PHP,实现了CSV格式数据的导入和导出功能。并解决相关乱码问题。

将xls转换成csv的文本格式,然后再用php分析这个文件,和PHP分析文本没有什么区别。

优点:跨平台,效率比较高、可以读写。

缺点:只能直接使用csv的文件,如果经常接受.xls二进制文件的话需要手工转换,不能自动化。一个文件只有一个SHEET。

2、相关函数介绍

2.1、fgetcsv

20170717224029_14188.png

2.2、fputcsv

20170717224203_45853.png

2.3、fopen

20170717224247_46672.png

2.4、iconv

20170717224326_65739.png

本次大致会使用以上4个函数,实现csv文件的导入导出

3、如何导出csv文件

注:默认导出是utf8编码,需要对字符串进行转码,excel 打开文件默认是gbk编码,所以utf8导出在txt文件打开是正常,在excel打开是乱码

3.1、测试utf8导出

导出的数据格式

$head =array(‘编号‘,‘姓名‘,‘年龄‘,‘出生年月‘);$data =array(array(‘001‘,‘zs‘,10,‘1991-1-1‘),array(‘002‘,‘李四‘,10,‘1991-1-1‘),array(‘003‘,‘王五‘,10,‘1991-1-1‘),);$obj->putCsv(‘putCsv.csv‘,$data,$head);

导出的方法:

classExcel{/**

* [putCsv description]

* @param string $csvFileName [description] 文件名

* @param array $dataArr [description] 数组,每组数据都是使用,分割的字符串

* @param string $haderText [description] 标题(默认第一行)

* @param integer $line [description] 从第几行开始写

* @param integer $offset [description] 共计写几行

* @return [type] [description]

*/publicfunctionputCsv($csvFileName,$dataArr ,$haderText =‘‘,$line =0,$offset =0){$handle =fopen($csvFileName,"w");//写方式打开if(!$handle){return‘文件打开失败‘;}//判断是否定义头标题if(!empty($haderText)){$re =fputcsv($handle,$haderText);//该函数返回写入字符串的长度。若出错,则返回 false。。}foreach ($dataArr as $key =>$value){$re =fputcsv($handle,$value);//该函数返回写入字符串的长度。若出错,则返回 false。。}}}

运行结果:

找到生成的csv文件,先使用记事本打开;

20170717225716_52519.png

编码和内容都正常,唯一的不足就是没有自动换行;

在使用excel打开

20170717225911_95849.png因为excel默认打开是gbk编码,所以乱码,可以使用记事本改编码为ANSI格式

3.2、提前对中文进行转码导出

classExcel{/**

* [putCsv description]

* @param string $csvFileName [description] 文件名

* @param array $dataArr [description] 数组,每组数据都是使用,分割的字符串

* @param string $haderText [description] 标题

* @return [type] [description]

*/publicfunctionputCsv($csvFileName,$dataArr ,$haderText =‘‘){$handle =fopen($csvFileName,"w");//写方式打开if(!$handle){return‘文件打开失败‘;}//判断是否定义头标题if(!empty($haderText)){foreach ($haderText as $key =>$value){$haderText[$key]=iconv("utf-8","gbk//IGNORE",$value);//对中文编码进行处理}$re =fputcsv($handle,$haderText);//该函数返回写入字符串的长度。若出错,则返回 false。。}foreach ($dataArr as $key =>$value){foreach ($value as $k =>$v){$value[$k]=iconv("utf-8","gbk//IGNORE",$v);//对中文编码进行处理}$re =fputcsv($handle,$value);//该函数返回写入字符串的长度。若出错,则返回 false。。}}}

导出结果:

20170717233411_25921.png这样处理,不管在txt文本还是excel中都是正常的。不会出现乱码

4、导入csv文件

导入csv文件也需要对中文进行转码处理

/**

* [getCsv description] 导出csv文件

* @param string $csvFileName [description] 文件名

* @param integer $line [description] 读取几行,默认全部读取

* @param integer $offset [description] 从第几行开始读,默认从第一行读取

* @return [type] [description]

*/publicfunctiongetCsv($csvFileName,$line =0,$offset =0){$handle =fopen($csvFileName,‘r‘);//打开文件,如果打开失败,本函数返回 FALSE。if(!$handle){return‘文件打开失败‘;}//fgetcsv() 出错时返回 FALSE,包括碰到文件结束时。$i =0;//用于记录while的循环次数,方便与$line,$offset比较$arr =array();//结果的存放数组while($data =fgetcsv($handle)){//小于偏移量则不读取,但$i仍然需要自增if($i $line &&$line){break;}$i++;foreach ($data as $key =>$value){$content =iconv("gbk","utf-8//IGNORE",$value);//转化编码$arr[]=$content;//至于如何处理这个结果,需要根据实际情况而定}}return$arr;}

csv导入数据是一格一格读取,所以在处理过程中相对麻烦,需要提前知道一行有几列,因为是测试,所以没有对结果进行特殊的处理。

5、总结

注意导入和导出的过程中,遇到中文字符一定要记得转码,否则可能会出现中文乱码的情况。

csv文件的导入导出相对于xls文件操作容易。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用PhpSpreadsheet导出CSV文件,你需要按照以下步骤进行操作: 1. 首先,导入所需的类和命名空间。你需要导入`PhpOffice\PhpSpreadsheet\Spreadsheet`和`PhpOffice\PhpSpreadsheet\Writer\Csv`类。你可以使用以下代码导入它们: ```php use PhpOffice\PhpSpreadsheet\Spreadsheet; use PhpOffice\PhpSpreadsheet\Writer\Csv; ``` 2. 创建一个新的`Spreadsheet`对象,并设置你的数据。你可以使用`getActiveSheet()`方法获取当前活动的工作表,并使用`setCellValue()`方法设置单元格的值。例如,你可以使用以下代码设置A1单元格的值为"Hello World": ```php $spreadsheet = new Spreadsheet(); $sheet = $spreadsheet->getActiveSheet(); $sheet->setCellValue('A1', 'Hello World'); ``` 3. 创建一个`Csv`写入器对象,并将`Spreadsheet`对象传递给它。然后,使用`save()`方法将数据保存为CSV文件。你可以指定保存的文件路径和文件名。例如,你可以使用以下代码将数据保存为名为"output.csv"的CSV文件: ```php $writer = new Csv($spreadsheet); $writer->save('output.csv'); ``` 请注意,以上代码只是一个示例,你可以根据自己的需求进行修改和扩展。确保在使用PhpSpreadsheet之前,你已经安装了它并将其包含在你的项目中。 希望这可以帮助到你! #### 引用[.reference_title] - *1* [fastadmin+phpspreadsheet实现导出导入](https://blog.csdn.net/Jian_Sir/article/details/130004153)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值