PHP 批量操作 Excel
自己封装了一个批量操作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的更多相关文章
- ExcelWeb脚本助手,自定义脚本,批量操作Excel与网页
ExcelWeb脚本助手,是一款可以自定义脚本操控Excel和浏览器的工具.提供了简单实用的Excel与Browser的API调用,通过自建脚本或自建项目,随意定制. 可以非常方便的根据Excel中的 ...
- GrapeCity Documents for Excel 文档API组件 V2.2 新特性介绍
GrapeCity Documents for Excel 文档API组件 V2.2 正式发布,本次新版本包含诸多重量级产品功能,如:将带有形状的电子表格导出为 PDF.控制分页和电子表格内容.将Ex ...
- GrapeCity Documents for Excel 与 Apache POI 功能对比
GrapeCity Documents for Excel 与 Apache POI 功能对比 GrapeCity Documents for Excel 是什么? GrapeCity Documen ...
- ansible结合zabbix_api批量添加主机
批量添加zabbix监控 .使用ansible配置zabbix客户端 ①修改服务器的IP(域名),为了方便使用ansible来批量操作 等同于如下sed语句 sed -i 's#Server=1.1. ...
- GrapeCity Documents (服务端文档API组件) V3.0 正式发布
近日,葡萄城GrapeCity Documents(服务端文档API组件)V3.0 正式发布! 该版本针对 Excel 文档.PDF 文档和 Word 文档的 API 全面更新,加入了用于生成 Exc ...
- 给大家发个Python和Django的福利吧,不要钱的那种~~~
前言一: 这篇是一个发放福利的文章,但是发放之前,我还是想跟大家聊聊我为什么要发这样的福利. 我第一份工作是做的IT桌面支持,日常工作就是给同事修修电脑.装装软件.开通账号.维护内部系统之类的基础工作 ...
- c# 创建Excel com加载项图片对象批量操作
技术含量较低,主要是通过VBA代码转换成c#代码而来,从而实现图片批量插入.删除.另存为的批量操作,增加文档使用的通用性. 插件主要界面如下: 主要代码如下: private void button8 ...
- 结合Excel批量操作网页,模拟登陆
有这样一个场景,客户的一批账户密码保存在Excel中,需要逐一登录,进行某些操作 从头开始来的话很麻烦,读取Excel,安装Web控件,主要是控件操作没有很方便,有没有类似原始js调用.jqurey调 ...
- js读取excel进行批量操作
推荐这款插件 http://oss.sheetjs.com/js-xls/ 具体用法大家查看api! <!DOCTYPE html> <html> <head> & ...
随机推荐
- HDU 4622 Reincarnation Hash解法详解
今天想学字符串hash是怎么弄的.就看到了这题模板题 http://acm.hdu.edu.cn/showproblem.php?pid=4622 刚开始当然不懂啦,然后就上网搜解法.很多都是什么后缀 ...
- Hadoop TaskScheduler源码分析
TaskScheduler是MapReduce中的任务调度器.在MapReduce中,JobTracker接收JobClient提交的Job,将它们按InputFormat的划分以及其他相关配置,生成 ...
- Sqoop架构
Sqoop 架构 Sqoop 架构是非常简单的,它主要由三个部分组成:Sqoop client.HDFS/HBase/Hive.Database.下面我们来看一下 Sqoop 的架构图. 用户向 Sq ...
- ZK配置文件
The number of milliseconds of each tick, 最小时间单位,很多运行时的时间 #间隔都是使用tickTime的倍数来表示的,例如initLimit=10就是tick ...
- Windows安全认证是如何进行的?[Kerberos篇]
最近一段时间都在折腾安全(Security)方面的东西,比如Windows认证.非对称加密.数字证书.数字签名.TLS/SSL.WS-Security等.如果时间允许,我很乐意写一系列的文章与广大网友 ...
- C#对INI文件读写
C#本身没有对INI格式文件的操作类,可以自定义一个IniFile类进行INI文件读写. using System; using System.Collections.Generic; using S ...
- Linux - 数值运算
Shell - 数值运算 因为shell脚本是属于弱语言,没有变量类型的概念,所以定义变量会默认为字符串.就算看上去是一个数字,当直接进行计算时,就会出错: x=1 echo $x+=1 # 输出1+ ...
- 锁丶threading.local丶线程池丶生产者消费者模型
一丶锁 线程安全: 线程安全能够保证多个线程同时执行时程序依旧运行正确, 而且要保证对于共享的数据,可以由多个线程存取,但是同一时刻只能有一个线程进行存取. import threading v = ...
- A promise tomorrow is worth a lot less than trying today.
A promise tomorrow is worth a lot less than trying today.明日的承诺远不及今日的行动.
- Eucalyptus-利用镜像启动一个Centos实例
1.前言 使用kvm制作Eucalyptus镜像(Centos6.5为例)——http://www.cnblogs.com/gis-luq/p/3990795.html 上一篇我们讲述了如何利用kvm ...