### PHPExcel如何读取超大excel文件,有需要的朋友可以参考下。
工作中经常要遇到将xlsx文件中的部分内容导入到数据库。通常我们都是用PHPExcel来读取。
通过下面的方法我们可以很容易将一个excel表格读取成为php数组,之后就可以为所欲为了:
~~~
$input_file="data.xlsx";
$objPHPExcel=PHPExcel_IOFactory::load($input_file);
$sheetData=$objPHPExcel->getSheet(0)->toArray(null,true,true,true);
~~~
如果文章到此结束,那价值就不大了。
很不幸的情况总是存在的,当data.xlsx有上万行,每一行又有很多列,每一列又有很长的字符串,并且有的还有颜色等效果时,用上面的方法经常发生的情况就是内存不足。
好吧,我们还有ini_set来加大内存,还可以用set_time_limit来设置较长的超时,如下:
~~~
set_time_limit(90);
ini_set("memory_limit","1024M");
$input_file="data.xlsx";
$objPHPExcel=PHPExcel_IOFactory::load($input_file);
$sheetData=$objPHPExcel->getSheet(0)->toArray(null,true,true,true);
~~~
但很负责任的说,这些都不是终极的方案。
我曾经试过将内存设置到了2G,超时设置到了90秒,也仍然读不出一个4000行的花花绿绿的表格。原因都出在toArray这个方法上,它会将处理的结果全保存到数组中,这种方式在处理简单表格时还是很方便的,但在处理大表格时,真的是很杯具。
我们的解决方案如下:
~~~
require'lib/PHPExcel.php';
set_time_limit(90);
$input_file="data.xlsx";
$objPHPExcel=PHPExcel_IOFactory::load($input_file);
//读取规则
$sheet_read_arr=array();
$sheet_read_arr["sheet1"]=array("A","B","C","D","F");
$sheet_read_arr["sheet2"]=array("A","B","C","D","F");
//循环所有的页
foreach($sheet_read_arras$key=>$val)
{
$currentSheet=$objPHPExcel->getSheetByName($key);//通过页名称取得当前页
$row_num=$currentSheet->getHighestRow();//当前页行数
//循环从第二行开始,第一行往往是表头
for($i=2;$i<=$row_num;$i++)
{
$cell_values=array();
foreach($valas$cell_val)
{
$address=$cell_val.$i;//单元格坐标
//读取单元格内容
$cell_values[]=$currentSheet->getCell($address)->getFormattedValue();
}
//看看数据
print_r($cell_values);
}
}
~~~
上面的方式算是较复杂的情况了,如果只是想将所有的单元格全读出来,用下面的方法就行了:
~~~
require'lib/PHPExcel.php';
set_time_limit(90);
$input_file="data.xlsx";
$objPHPExcel=PHPExcel_IOFactory::load($input_file);
$sheet_count=$objPHPExcel->getSheetCount();
for($s=0;$s<$sheet_count;$s++)
{
$currentSheet=$objPHPExcel->getSheet($s);//当前页
$row_num=$currentSheet->getHighestRow();//当前页行数www.zzarea.com
$col_max=$currentSheet->getHighestColumn();//当前页最大列号
//循环从第二行开始,第一行往往是表头
for($i=2;$i<=$row_num;$i++)
{
$cell_values=array();
for($j='A';$j<$col_max;$j++)
{
$address=$j.$i;//单元格坐标
$cell_values[]=$currentSheet->getCell($address)->getFormattedValue();
}
//看看数据
print_r($cell_values);
}
}
~~~
我们可以将上面的print_r地方改成组拼sql语句并写入文件,然后用mysql导入,当然也可以直接连接数据库向表中插入记录,这就随意了。
用这种方法可以将上万行的记录很轻松的导入到表中,希望对大家有所帮助。
- 前端工程师
- HTML
- 使用meta实现页面的定时刷新或跳转
- 表单相关
- 表单元素input、按钮、文字完美垂直居中对齐方法
- CSS
- 相关工具网站
- JS
- jQuery
- 第1章 初始jQuery
- 环境搭建
- jQuery对象与DOM对象
- jQuery对象转化成DOM对象
- DOM对象转化成jQuery对象
- 第2章 jQuery选择器
- id选择器
- 类选择器
- 元素选择器
- 全选择器(*选择器)
- 层级选择器
- 基本筛选选择器
- 内容筛选选择器
- 可见性筛选选择器
- 属性筛选选择器
- 子元素筛选选择器
- 表单元素选择器
- 表单对象属性筛选选择器
- 特殊选择器this
- 第3章 jQuery的属性与样式
- 元素的数据存储
- 问题解决方案
- 解决innerHTML包含的js代码不能被执行的问题
- webpackdoc
- 前端开发框架
- Bootstrap 3.3.6
- 起步
- 全局 CSS 样式
- 概览
- 栅格系统
- PHP
- PHP入门篇
- 基础总结
- PHP环境变量$_SERVER和系统常量详细说明
- PHP进阶篇
- 数组
- 函数
- 类
- 字符串操作
- 正则表达式
- 会话控制
- 文件系统
- 日期和时间
- 图形图像操作
- PHP异常处理
- 数据库操作
- WEB在线文件管理器
- PHP文件操作
- 获取首层目录信息
- 获取文件信息
- 列表显示文件及大小
- PHP与MySQL关系大揭秘
- PHP支持哪些数据库
- 数据库扩展
- 连接MySQL数据库
- 执行MySQL查询
- 插入新数据到MySQL中
- MVC架构模式分析与设计
- Smarty模版语法
- Smarty的基本语法
- Smarty的条件判断语句
- Smarty的循环语句
- Smarty的文件引用
- Smarty类和对象赋值与使用
- Smarty函数的使用
- functions函数插件的定义和使用
- modifiers变量调节器插件的定义和使用
- block functions区块函数插件的定义和使用
- Smarty实例
- MVC微型框架的建立
- 网络摘抄
- PHPExcel如何读取超大excel文件
- Composer
- Composer技巧
- PHP 开发者该知道的 5 个 Composer 小技巧
- composer常用命令
- Composer使用方法整理(Cy23)
- 利用Composer一步一步搭建自己的PHP框架
- ThinkPHP
- ThinkPHP中RBAC类详解(一)
- 附:添加注释版RBAC类源码
- 常见问题
- 常见方法
- thinkphp 合并两个字段组合成一个临时字段concat函数
- ThinkPHP Where 条件中使用表达式
- 编程相关工具
- Eclipse
- Eclipse或Zendstudio汉化
- Zend studio
- Zendstudio快捷键
- Zend Studio实用快捷键一览表
- Sublime text
- Sublime text快捷键
- 16 个 Sublime Text 快捷键
- Emmet的用法及相关语法
- VS Code
- 数据库
- MySql
- 问题汇总
- mysql创建存储过程失败1307错误解决
- Mysql出现Field * doesn't have a default value解决办法
- mysql:ADO连接mysql数据库,驱动程序和ODBC数据源问题
- 自己如何正确获取MYSQL的ADO连接字符串
- 网上摘抄
- mysql 存在更新 不存在插入
- Mysql字符串字段中是否包含某个字符串,用 find_in_set
- mysql字段类型对应的数字编号
- 5.7mysql group分组查询错误问题
- mysql常用操作语句
- SQL2005
- SQL常见错误
- 使用 sp_change_users_login 修复产生的孤 立账户 & 还原中的孤立用户
- ASP
- Url编码解码函数合集 含utf-8和gb2312
- 其他前端相关技巧
- 联机查看 Office 文档
- 服务器配置
- windows
- 服务器安装
- XAMPP自带TOMCAT插件可以支持php+java
- IIS
- iis7服务器,客户端无法下载exe文件的解决之道
- Linux
- ubuntu
- Linux安装JDK
- 辅助开发工具
- Git