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 ...
随机推荐
- lua随机数的问题
在看 lua 的 math.random 函数的时候发现一个问题,就是在没有重新设置随机种子的时候, random 返回的前几个随机数并不是那么特别随机,尤其当随机范围很小的时候,比如 100 左右的 ...
- [常见问题]Project facet Java versin 1.8 is not support.
发生这个问题的原因是我们的java编译环境(JDK版本),与tomcat运行环境(JDK或JRE版本)不一致导致的. 到eclipse的设置中找到compile项(或右键项目进入),看一下编译环境的J ...
- 【管理心得之三十二】PMP杂谈---------爱情必胜术
这次一反常态,没有场景设计,我想借此文普及一下PMP是什么? 但我不知道这样枯燥的话题能否能引起你的兴趣,我不得不套用“标题党”<爱情必胜术>来博你眼球. 我真没有说谎,此文是献给那些孤身 ...
- Java面试(3)-- Java关系运算符
class Demo03{ public static void main(String[] args){ //关系运算符 == //例1 int a = 10; int b = 10; double ...
- ASP.NET MVC3 模板页的使用
占位符的使用: 下面是一个模板页 _Layout.cshtml <!DOCTYPE html> <html> <head> @RenderSection(" ...
- 每天一个linux命令(33):df 命令
linux中df命令的功能是用来检查linux服务器的文件系统的磁盘空间占用情况.可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息. 1.命令格式: df [选项] [文件] 2.命 ...
- 高并发、海量数据处理尽量少使用using也能提升效率
请看下面两段: 第一种方式: MemoryStream stream = new MemoryStream(); string text = "aasasdfasdfad;sas;fkqew ...
- 再读GFS论文
http://loopjump.com/gfs_paper_note/ 再读GFS的一些笔记.主要涉及GFS架构.Chunk大小选择的一些折中考量.元数据管理及锁.写数据流程.GFS一致性模型的理解. ...
- 使用ZeroClipboard解决跨浏览器复制到剪贴板的问题
Zero Clipboard的实现原理Zero Clipboard 利用透明的Flash让其漂浮在复制按钮之上,这样其实点击的不是按钮而是 Flash ,这样将需要的内容传入Flash,再通过Flas ...
- [转载]TFS安装配置教程
最近公司新开发一个项目要用微软的TFS2013进行项目的源代码管理,以前只是用过SVN,从来没有用过TFS,所以在网上百度.谷歌了好一阵子来查看怎么安装和配置,还好花了一天时间总算是初步的搞定了,下面 ...