Thinkphp 用PHPExcel 导入Excel
搞了个简单的Excel导入, 用的是PHPExcel(百科:用来操作Office Excel文档的一个PHP类库, 基于微软的OpenXML标准和PHP语言)
好, 不说了, 开始吧...
首先得有PHPExcel类库, 点这里下载 https://github.com/Zmwherein/PHPExcel.git
然后把它放在 \ThinkPHP\Library\Vendor(个人喜好, 能引入就行了)
如图:
PHPExcel.php 类似一个入口文件. 可以进去看看里面写的方法是怎个跑法..
这是界面:

首先来判断下有没有文件上传了(其实这里的应该还能优化写得更好的, 不过暂时个人能力有限)
public function import()
{
// p($data_in_db);
if ( ! empty($_FILES))
{
$upload = new \Think\Upload();
$upload -> maxSize = 3145728 ;
$upload -> exts = array('xlsx', 'xls');
$upload -> rootPath = './'; // 设置附件上传根目录
$upload -> savePath = '/Upload/excel/'; // 设置附件上传(子)目录
$upload -> subName = false;
$upload -> saveName = 'time'; $info = $upload -> uploadOne($_FILES['import']); if( ! $info)
{
$this->error($upload->getError());
}
接着跑下去 , 导入的是PHPExcel.php和PHPExcel/IOFactory.php这两个文件
//导入PHPExcel 和 IOFactory类
Vendor('PHPExcel.PHPExcel');
Vendor('PHPExcel.PHPExcel.IOFactory');
因为是导入嘛,所以就调用createReader方法
$objReader = \PHPExcel_IOFactory::createReader('Excel5');
设置路径, 上传的文件在哪, 也就是加载个文件出来
$objPHPExcel = $objReader -> load($file_path, $encode='utf-8');
这里说的是遍历行数, 从A到E(自己定义的,要取哪就取哪) 这里i要从2开始, 因为第一行是表头, 不是数据
$sheet = $objPHPExcel -> getSheet(0);
$highestRow = $sheet -> getHighestRow(); // 取得总行数
// p($highestRow);
// $highestColumn = $sheet->getHighestColumn(); // 取得总列数 for($i=2;$i<=$highestRow;$i++)
{
$data['user_name'] = $objPHPExcel -> getActiveSheet() -> getCell("A".$i)->getValue();
$data['company'] = $objPHPExcel -> getActiveSheet() -> getCell("B".$i)->getValue();
$data['mobile'] = $objPHPExcel -> getActiveSheet() -> getCell("C".$i)->getValue();
$data['category'] = $objPHPExcel -> getActiveSheet() -> getCell("D".$i)->getValue();
$data['mark'] = $objPHPExcel -> getActiveSheet() -> getCell("E".$i)->getValue(); $allData[] = $data;
}
// p($allData);
测试表是这样的

现在打印个$allData出来看看

看, 数据出来了...
接下来要导入到数据库里面了->导入前得作个小判断. 比如我想如果数据库里的电话跟我想要导入的数据有相同的话, 就不要导入 类似这样的-> 大神们还有没有什么好一点的方法
if (empty($allData))
{
$this -> error(C('MESSAGE.ERROR_NODATA'));
}
$data_in_db = M('Excel') -> field('mobile') -> select();//表Excel里所有数据
foreach ($data_in_db as $key => $val)
{
foreach ($allData as $k => $v)
{
if ($val['mobile'] == $v['mobile'])
{
unset($allData[$k]);
}
}
}
导入时, 有两种方法 一是拼接sql 二是用foreach循环来导入
实测第一种要快得多!!!强烈建议拼接sql导入...不过如果导入的数据过大, 拼接起来的sql会很长, 因此数据会比较大...
有时会报执行文件超时的错误 或者是遇到1153 – Got a packet bigger than ‘max_allowed_packet’ bytes OR
服务器直接挂了 这样的报错
这样你就要需要修改my.ini 里的max_allowed_packet把它稍设大一点就可以了,重启MySql
OK..等待片刻, 差不多2W的数据就导进去了(^_^)


以上是我写的插入语句
$sql = "INSERT INTO `db_excel` (". implode(',',array_keys($allData[0])) .") VALUES ";
foreach ($allData as $key => $val)
{
$sql .= "(";
$sql .= "'".implode("','", $val)."'";
$sql .= "),";
}
$sql = rtrim($sql,',');
// 出错返回false 否则返回成功行数
$res = D('Excel') -> execute($sql);
if ($res === false)
{
$this -> error(C('MESSAGE.ERROR_IMPORT'));
}
else if ($res > 0)
{
$this -> success(C('MESSAGE.SUCCESS_IMPORT'), U('Excel/index'));
}
else if ($res === 0)
{
$this -> success(C('MESSAGE.SUCCESS_IMPORT_0'), U('Excel/index'));
}
好了. 以上是利用PHPExcel导入Excel文件.
还有很多不足且需要修改的地方, 还望恳请各位指出.
Thinkphp 用PHPExcel 导入Excel的更多相关文章
- ThinkPHP使用PHPExcel实现Excel数据导入导出完整实例
这篇文章主要介绍了ThinkPHP使用PHPExcel实现Excel数据导入导出,非常实用的功能,需要的朋友可以参考下 本文所述实例是使用在Thinkphp的开发框架上,要是使用在其他框架也是同样的方 ...
- thinkphp整合系列之phpexcel导入excel数据
一:导入phpexcel /ThinkPHP/Library/Vendor/PHPExcel 二:导入excel的函数 /** * 导入excel文件 * @param string $file ex ...
- thinkphp 结合phpexcel实现excel导入
控制器文件: class ExcelAction extends Action { public function __construct() { import('ORG.Util.ExcelToAr ...
- 使用PHPExcel导入Excel到MySql
.连接数据库的connection.php文件 <?php //修改下面代码来联接数据库 // mysql_connect打开一个到 MySQL 服务器的连接,如果成功则返回一个 MySQL 连 ...
- phpexcel导入excel文件报the filename xxx is not recognised as an OLE file错误。
工作中频繁会用phpexcel类导入excel文件的数据到数据库,目前常用的excel文件格式有:xls.csv.xlsx. 刚开始,针对xls文件,使用如下程序,能正常运行: $objReader ...
- YII使用PHPExcel导入Excel文件的方法
1.下载phpexcel,将压缩包中的classes复制到protected/extensions下并修改为PHPExcel. 2.修改YII配置文件config/main.php 'import'= ...
- 使用phpexcel导入excel文件种的时期数据时数据导入格式
在使用phpexcel导入类似于 YYYY-MM-DD HH:ii:ss格式的数据时,导入成功以后会发现导入的数据其实是类似于42085.746516204格式的数据( excel在存储时间类型的数据 ...
- phpexcel导入excel表格
html代码 <form action="{:U('Mall/updExcel')}" method="POST" enctype="multi ...
- Thinkphp使用phpexcel导入文件并写入数据库
现实中,我们往往很多地方都需要这样批量导入数据,除了phpexcel还有csv等方法可以解决 下面详细介绍一下使用方法 首先在官方下载安装包解压到本地,然后复制保存到tp框架下的vendor目录下 h ...
随机推荐
- MVVM架构~Knockoutjs系列之验证机制的引入
返回目录 对于Knockoutjs本身来说,没有提供验证模块,不过,有第三方的扩展,就像你为jquery库作extensions一样,这讲中我将介绍一个Knockout插件扩展,knockout.va ...
- Atitit ocr识别原理 与概论 attilax总结
Atitit ocr识别原理 与概论 attilax总结 1.1. Ocr的过程与流程1 1.2. OCR不同技术细分略有不同,但大概原理是一样的. 即主要技术过程是:二值化(又叫归一化)----- ...
- fir.im Weekly - 进击的 Swift
最近 Swift 开源了,众开发者们欢呼雀跃.感谢开源,这是最好的时代.本期 fir.im Weekly 准备了一些关于 Swift 的"新鲜"干货分享,也包括一些优秀的 GitH ...
- javascript_basic_03之函数、循环、数组
1.函数:函数(Function),方法(Method),过程(Procedure): 2.默认为假的情况: ①if(0){}:②if(0.0){}:③if(null){}:④if("&qu ...
- 高并发、海量数据处理尽量少使用using也能提升效率
请看下面两段: 第一种方式: MemoryStream stream = new MemoryStream(); string text = "aasasdfasdfad;sas;fkqew ...
- replicate复制函数
按指定次数重复字符表达式 REPLICATE ( character_expression, integer_expression) character_expression 字符数据型的字母数字表达 ...
- poj2186Popular Cows(Kosaraju算法--有向图的强连通分量的分解)
/* 题目大意:有N个cows, M个关系 a->b 表示 a认为b popular:如果还有b->c, 那么就会有a->c 问最终有多少个cows被其他所有cows认为是popul ...
- java中final注意的问题
public class Test{ public static void main(String[] args){ Person p = new Person(); } } /* 4.修饰的变量是一 ...
- Unity3D默认的快捷键
shift +方向键 向“向方向键前进” Windows系统Unity3D中的快捷键 组合键 键 功能 File 文件 Ctrl N New Scene 新建场景 Ctrl ...
- Java多线程系列--“基础篇”05之 线程等待与唤醒
概要 本章,会对线程等待/唤醒方法进行介绍.涉及到的内容包括:1. wait(), notify(), notifyAll()等方法介绍2. wait()和notify()3. wait(long t ...