自己封装了一个批量操作excel文件的方法,通过xls文件地址集合遍历,第三个参数传入一个匿名函数用于每个需求的不同进行的操作,实例中我想要得到列表中含有折字的行,封装成sql语句返回。

xls文件超过一千个的情况下,速度会比较慢,会遇到time_out(超时)的情况,这个时候你可能需要加上这两句话

set_time_limit(0);               // 设置永不超时
ini_set('memory_limit', '13312M'); // 临时设置最大内存占用为12G(我的电脑内存是16G的)

出现文件找不到的情况:

第一、文件名称的目录中包含中文

$FileName = iconv('UTF-8', 'GBK', $file);

第二、文件名称拼接而来

header("Content-type: text/html; charset=utf-8");

如果需要使用 date 的函数,加上这个

date_default_timezone_set('PRC');

下载PHPExcel

// 引入PHPExcel
include './PHPExcel/Classes/PHPExcel/IOFactory.php'; /**
* 批量处理excel
*
* @param $path [xls所在路径]
* @param $xls_arr [xls的地址数组集合]
* @param $function [传送一个匿名函数,调用该方法时会返回三个参数【sheet,key,value】,根据这三个参数编写你的业务逻辑代码]
* @param $is_return_false [单个xls处理文件结果为false的是否返回,默认返回]
* @return array 返回一个数组,每个xls文件的处理结果的集合。
* @throws PHPExcel_Exception
* @throws PHPExcel_Reader_Exception
* @author mengchenchen
*/
function batch_excel($path, $xls_arr, $function, $is_return_false = true)
{
$res = [];
foreach ($xls_arr as $k => $v) {
// 这里吃了大亏,有中文的情况下一定要转换下,不然绝对找不到文件
$fileName = iconv('UTF-8','GBK',$path.$v);
if (!file_exists($fileName))
continue;
$inputFileType = PHPExcel_IOFactory::identify($fileName);
$objReader = PHPExcel_IOFactory::createReader($inputFileType);
$objPHPExcel = $objReader->load($fileName);
$sheet = $objPHPExcel->getSheet(0);
$result = $function($sheet, $k, $v);
if ($is_return_false == false && !$result)
continue;
$res[$k] = $function($sheet, $k, $v);
}
return $res;
} // 使用案例
$res = batch_excel('./xls', $all, function ($sheet, $key, $value) {
$highestRow = $sheet->getHighestRow(); // 行数
$highestColumn = $sheet->getHighestColumn(); // 列
// 从倒数第四行开始,查到最后一行
for ($row = $highestRow > 4 ? $highestRow - 4 : 1; $row <= $highestRow; $row++) {
// 获取每行的数据
$rowData = $sheet->rangeToArray('A' . $row . ':' . $highestColumn . $row, NULL, TRUE, FALSE);
foreach ($rowData as $k => $v) {
// 判断该行是否有 ‘折’
if (strpos($v[0], '折') !== false) {
$num = str_replace(['总费用', '折', ':'], '', $rowData[0][0]);
return "update table set field = {$num} where id = {$key}";
}
}
}
}, false); // 打印结果
echo '<pre>';
var_dump(array_filter($res));
echo '</pre>';

最新文章

  1. 【bzoj2648】 SJY摆棋子
  2. c#读取webconfig
  3. Linux下apache日志分析与状态查看方法
  4. 什么情况下include_path不起作用?
  5. 简述 Ruby 与 DSL 在 iOS 开发中的运用
  6. jquery select操作和联动操作
  7. 利用SQOOP将ORACLE到HDFS
  8. JXL 读取 Excel java中jxl导出数据到excel的例子 上传文件
  9. PHP中利用DOM和simplxml读取xml文档
  10. J2EE进阶(十六)Hibernate 中getHibernateTemplate()方法使用
  11. XMPP系列(六)---创建群组
  12. MR PAGERANK思路
  13. Unity Shader Learning
  14. Linux中断管理 (2)软中断和tasklet
  15. mysql存储过程异常处理
  16. 1.6 flask应用: 代码统计系统
  17. POJ 2395 Out of Hay (Kruskal)
  18. Android环境的搭建及Android Studio的安装
  19. 多线程IO通过并发IO来优化性能
  20. 使用css实现移动端导航条滚动

热门文章

  1. linux读取yaml文件的某个属性值
  2. (转)diff 命令
  3. (转)linux配置网卡的命令
  4. 嵌入式CISC模型机设计
  5. 关于docker下容器和宿主机器时间不一致问题
  6. 一般处理程序ashx
  7. java数据结构和算法07(2-3-4树)
  8. linux下的tomcat开机自启动(亲测),更改静态ip
  9. 生产消费者模式与python+redis实例运用(中级篇)
  10. 实现简单Restful API