csv和excel php 解析_PHP 高效导入导出Excel(csv)方法之fgetcsv()和fputcsv()函数

CSV,是Comma Separated Value(逗号分隔值)的英文缩写,通常都是纯文本文件。

一、CSV数据导入函数fgetcsv()

fgetcsv() 函数从文件指针中读入一行并解析 CSV 字段。

与 fgets() 类似,不同的是 fgetcsv() 解析读入的行并找出 CSV 格式的字段,然后返回一个包含这些字段的数组。

fgetcsv() 出错时返回 FALSE,包括碰到文件结束时。

具体使用时封装函数如下:

/**

* 导入Excel数据表格

* @param string $fileName 文件名

* @param int $line 读取几行,默认全部读取

* @param int $offset 从第几行开始读,默认从第一行读取

* @return bool|array

*/

public function importCsv($fileName, $line=0, $offset=0){

//set_time_limit(0);//防止超时

//ini_set("memory_limit", "512M");//防止内存溢出

$handle = fopen($fileName,'r');

if(!$handle){

return '文件打开失败';

}

$i = 0;

$j = 0;

$arr = [];

while($data = fgetcsv($handle)){

//小于偏移量则不读取,但$i仍然需要自增

if($i < $offset && $offset){

$i++;

continue;

}

//大于读取行数则退出

if($i > $line && $line){

break;

}

foreach ($data as $key => $value) {

$content = iconv("gbk","utf-8//IGNORE",$value);//转化编码

$arr[$j][] = $content;

}

$i++;

$j++;

}

return $arr;

}

二、CSV数据导出函数fputcsv()

前言:Excel表格最高支持104W行,导出数据达到上万的量,PHPExcel就显得有点无力了,经常卡死或者内存溢出,若做普通的数据导出功能,建议使用fputcsv()函数,因为此函数要比PHPexcel要高效的多,二十万数据导出大概需要2到3秒。

fputcsv() 函数将行格式化为 CSV 并写入一个打开的文件。

该函数返回写入字符串的长度。若出错,则返回 false。

具体使用时封装函数如下:

(注意点:

参数:$exportUrl分两种情况,根据需求选择其一

1.$exportUrl = 'php://output' 表示表示直接输出到浏览器自动下载。

2.$exportUrl = "服务器目录地址/文件名.csv" 表示输出到指定路径文件下。举例:$exportUrl = "/data/a.csv")。

/**

* 导出Excel数据表格

* @param array $dataList 要导出的数组格式的数据

* @param array $headList 导出的Excel数据第一列表头

* @param string $fileName 输出Excel表格文件名

* @param string $exportUrl 直接输出到浏览器or输出到指定路径文件下

* @return bool|false|string

*/

public static function toExcel($dataList,$headList,$fileName,$exportUrl){

//set_time_limit(0);//防止超时

//ini_set("memory_limit", "512M");//防止内存溢出

header('Content-Type: application/vnd.ms-excel');

header('Content-Disposition: attachment;filename="'.$fileName.'.csv"');

header('Cache-Control: max-age=0');

//打开PHP文件句柄,php://output 表示直接输出到浏览器,$exportUrl表示输出到指定路径文件下

$fp = fopen($exportUrl, 'a');

//输出Excel列名信息

foreach ($headList as $key => $value) {

//CSV的Excel支持GBK编码,一定要转换,否则乱码

$headList[$key] = iconv('utf-8', 'gbk', $value);

}

//将数据通过fputcsv写到文件句柄

fputcsv($fp, $headList);

//计数器

$num = 0;

//每隔$limit行,刷新一下输出buffer,不要太大,也不要太小

$limit = 100000;

//逐行取出数据,不浪费内存

$count = count($dataList);

for ($i = 0; $i < $count; $i++) {

$num++;

//刷新一下输出buffer,防止由于数据过多造成问题

if ($limit == $num) {

ob_flush();

flush();

$num = 0;

}

$row = $dataList[$i];

foreach ($row as $key => $value) {

$row[$key] = iconv('utf-8', 'gbk', $value);

}

fputcsv($fp, $row);

}

return $fileName;

}

使用Sqlserver Management Studio 导入导出 Excel的方法

之前 帮同事  导入sql server数据     本来打算用 C# 写程序导入的 后来发现网上的方法  貌似 都会对版本  限制来限制去的 看的我好头晕(吐槽一下  难道就没有一个 普遍的方法嘛, ...

从SQL Server中导入&sol;导出Excel的基本方法&lpar;转&rpar;

从sql server中导入/导出 excel 的基本方法 /*=========== 导入/导出 excel 的基本方法 ===========*/ 从excel文档中,导入数据到sql数据库中,很 ...

thinkphp导入导出excel表单数据

在PHP项目经常要导入导出Excel表单. 先去下载PHPExcel类库文件,放到相应位置. 我在thinkphp框架中的位置为ThinkPHP/Library/Org/Util/ 导入 在页面上传e ...

asp&period;net中导出Excel的方法

一.asp.net中导出Excel的方法: 本文转载 在asp.net中导出Excel有两种方法,一种是将导出的文件存放在服务器某个文件夹下面,然后将文件地址输出在浏览器上:一种是将文件直接将文件输出 ...

导入导出Excel工具类ExcelUtil

前言 前段时间做的分布式集成平台项目中,许多模块都用到了导入导出Excel的功能,于是决定封装一个ExcelUtil类,专门用来处理Excel的导入和导出 本项目的持久化层用的是JPA(底层用hibe ...

NPOI导入导出EXCEL通用类,供参考,可直接使用在WinForm项目中

以下是NPOI导入导出EXCEL通用类,是在别人的代码上进行优化的,兼容xls与xlsx文件格式,供参考,可直接使用在WinForm项目中,由于XSSFWorkbook类型的Write方法限制,Wri ...

jxl导入&sol;导出excel

1.jxl导入/导出excel案例,黏贴即可运行 package junit.test; import java.io.File; import java.io.IOException; import ...

C&num;导入导出Excel表的数据

一:C#导入导出EXCEL文件的类 代码如下: 首先将Microsoft Excel 14.0 Object Library 引用导入 using System; using System.Data; ...

随机推荐

NoSQL生态系统——事务机制,行锁,LSM,缓存多次写操作,RWN

13.2.4 事务机制 NoSQL系统通常注重性能和扩展性,而非事务机制. 传统的SQL数据库的事务通常都是支持ACID的强事务机制.要保证数据的一致性,通常多个事务是不可能交叉执行的,这样就导致了可 ...

String、StringBuffer、StringBuilder的区别

在日常开发过程中String字符串估计是被用到最多的变量了,最近看了一些String.StringBuffer和StringBuilder的东西,三者都可以对字符串进行操作,他们究竟有什么区别,以及适 ...

【Java基础】泛型

Num1:请不要在新代码中使用原生类型 泛型类和接口统称为泛型.每种泛型定义一组参数化的类型,构成格式是:类或接口名称,接着用<>把对应于泛型形式类型的参数的实际参数列表括起来.比如:Li ...

使用Hammer&period;js的H5页面开发DOM的一些小说法

前几天,一个小伙伴说叫我帮他写一个移动端上的一个轮播图,个人一般是不接私活的,毕竟平时工作也是单双休,时间也不很多. 可能大部分程序员,多余的时间都是看看新闻,打游戏,或者学习新的知识,缺少运动吧. ...

php中HTTP&lowbar;X&lowbar;FORWARDED&lowbar;FOR 和 REMOTE&lowbar;ADDR的使用

1.REMOTE_ADDR:浏览当前页面的用户计算机的ip地址2.HTTP_X_FORWARDED_FOR: 浏览当前页面的用户计算机的网关3.HTTP_CLIENT_IP:客户端的ip 在PHP 中 ...

Confluence 6 超过当前许可证期限进行升级

这个页面将会对你在进行 Confluence 升级的时候超过了当前许可证的期限进行升级的情况. 许可证警告 在升级的过程中,你将会在 Confluence 的应用程序日志(log file)中看到类似 ...

Android为TV端助力 Canvas 和 Paint用法

自定义view里面的onDraw方法,在这里我们可以绘制各种图形,onDraw里面有两个API我们需要了解清楚他们的用法:Canvas 和 Paint. Canvas翻译成中文就是画布的意思,Canv ...

iOS 去除百度地图下方的 logo

UIView *mView = _mapView.subviews.firstObject; for (id logoView in mView.subviews)  { if ([logoView  ...

BZOJ4313 &colon; 三维积木

不妨设$R$是唯一可以看到的颜色,考虑一维序列的情况. 设$f[i][j][k][x][y]$表示考虑了前$i$个位置,第$i$个位置的高度是$j$,最高高度是$k$,已经用了$x$个$R$,$y$个 ...

python scrapy爬虫存储数据库方法带去重步骤

import pymongo import requests import random import time import pymysql db = pymongo.MongoClient()[' ...

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值