自己封装了一个批量操作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>';

PHP 批量操作 Excel的更多相关文章

  1. ExcelWeb脚本助手,自定义脚本,批量操作Excel与网页

    ExcelWeb脚本助手,是一款可以自定义脚本操控Excel和浏览器的工具.提供了简单实用的Excel与Browser的API调用,通过自建脚本或自建项目,随意定制. 可以非常方便的根据Excel中的 ...

  2. GrapeCity Documents for Excel 文档API组件 V2.2 新特性介绍

    GrapeCity Documents for Excel 文档API组件 V2.2 正式发布,本次新版本包含诸多重量级产品功能,如:将带有形状的电子表格导出为 PDF.控制分页和电子表格内容.将Ex ...

  3. GrapeCity Documents for Excel 与 Apache POI 功能对比

    GrapeCity Documents for Excel 与 Apache POI 功能对比 GrapeCity Documents for Excel 是什么? GrapeCity Documen ...

  4. ansible结合zabbix_api批量添加主机

    批量添加zabbix监控 .使用ansible配置zabbix客户端 ①修改服务器的IP(域名),为了方便使用ansible来批量操作 等同于如下sed语句 sed -i 's#Server=1.1. ...

  5. GrapeCity Documents (服务端文档API组件) V3.0 正式发布

    近日,葡萄城GrapeCity Documents(服务端文档API组件)V3.0 正式发布! 该版本针对 Excel 文档.PDF 文档和 Word 文档的 API 全面更新,加入了用于生成 Exc ...

  6. 给大家发个Python和Django的福利吧,不要钱的那种~~~

    前言一: 这篇是一个发放福利的文章,但是发放之前,我还是想跟大家聊聊我为什么要发这样的福利. 我第一份工作是做的IT桌面支持,日常工作就是给同事修修电脑.装装软件.开通账号.维护内部系统之类的基础工作 ...

  7. c# 创建Excel com加载项图片对象批量操作

    技术含量较低,主要是通过VBA代码转换成c#代码而来,从而实现图片批量插入.删除.另存为的批量操作,增加文档使用的通用性. 插件主要界面如下: 主要代码如下: private void button8 ...

  8. 结合Excel批量操作网页,模拟登陆

    有这样一个场景,客户的一批账户密码保存在Excel中,需要逐一登录,进行某些操作 从头开始来的话很麻烦,读取Excel,安装Web控件,主要是控件操作没有很方便,有没有类似原始js调用.jqurey调 ...

  9. js读取excel进行批量操作

    推荐这款插件 http://oss.sheetjs.com/js-xls/ 具体用法大家查看api! <!DOCTYPE html> <html> <head> & ...

随机推荐

  1. HDU 5792 L - World is Exploding 。容斥原理 + 树状数组 + 离散化

    题目,要求找出有多少对这样的东西,四个数,并且满足num[a]<num[b] &&num[c]>num[d] 要做这题,首先要懂得用树状数组,我设,下面的小于和大于都是严格 ...

  2. Soup协议-即普通post请求,内容域xml

    1.基础问题 1.1 soup-Simple Object Access Protocal简单对象访问协议 a).承载在http协议之上,http支持传输img/html/文件等,soup请求和响应域 ...

  3. Oracle数据库SQL语句操作大全汇总

    数据库各个表空间增长情况的检查: SQL >SELECT A.TABLESPACE_NAME,( 1-(A.TOTAL)/B.TOTAL)* 100 USED_PERCENT FROM (SEL ...

  4. webpack.config.js====引入Jquery库文件

    1. 安装 cnpm install --save jquery expose-loader 2. 在webpack.config.js中配置 Jquery库是使用的webpack的一个插件Provi ...

  5. 14.JAVA-jar命令使用

    介绍 jar命令用来对*.class文件进行压缩,从而生成jar(archive)归档文件,避免文件过多. 定义一个文件: package common.demo ; public class Tes ...

  6. shiro web环境初始化过程

    在web工程中使用shiro的时候需要配置一个shiro的listenser(EnvironmentLoaderListener)和一个shiro的filter(ShiroFilter). liste ...

  7. vue-extend 选项

    vue-extend 选项 mixins 和extend 很相似,但有区别: var extendNews={ //后来的内容用变量接收 updated:function(){ console.log ...

  8. nvcc 编译显示寄存器使用情况

    NVCC Compiler 里面增加 Command line pattern中${COMMAND}后 增加选项: --ptxas-options=-v

  9. 【extjs6学习笔记】1.11 初始: config

    Ext JS有一个名为config的功能. 该配置允许您使用默认值声明公共属性,这些属性将被其他类成员完全封装. 通过config声明的属性将自动获取get()和set()方法,如果类没有定义这些方法 ...

  10. 使用tooltip显示jquery.validate.unobtrusive验证信息

    通过重写CSS实现使用tooltip显示jquery.validate.unobtrusive验证信息,效果如图: 1. 在ViewModel中定义验证规则 [Display(Name = " ...