搞了个简单的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的更多相关文章

  1. ThinkPHP使用PHPExcel实现Excel数据导入导出完整实例

    这篇文章主要介绍了ThinkPHP使用PHPExcel实现Excel数据导入导出,非常实用的功能,需要的朋友可以参考下 本文所述实例是使用在Thinkphp的开发框架上,要是使用在其他框架也是同样的方 ...

  2. thinkphp整合系列之phpexcel导入excel数据

    一:导入phpexcel /ThinkPHP/Library/Vendor/PHPExcel 二:导入excel的函数 /** * 导入excel文件 * @param string $file ex ...

  3. thinkphp 结合phpexcel实现excel导入

    控制器文件: class ExcelAction extends Action { public function __construct() { import('ORG.Util.ExcelToAr ...

  4. 使用PHPExcel导入Excel到MySql

    .连接数据库的connection.php文件 <?php //修改下面代码来联接数据库 // mysql_connect打开一个到 MySQL 服务器的连接,如果成功则返回一个 MySQL 连 ...

  5. phpexcel导入excel文件报the filename xxx is not recognised as an OLE file错误。

    工作中频繁会用phpexcel类导入excel文件的数据到数据库,目前常用的excel文件格式有:xls.csv.xlsx. 刚开始,针对xls文件,使用如下程序,能正常运行: $objReader ...

  6. YII使用PHPExcel导入Excel文件的方法

    1.下载phpexcel,将压缩包中的classes复制到protected/extensions下并修改为PHPExcel. 2.修改YII配置文件config/main.php 'import'= ...

  7. 使用phpexcel导入excel文件种的时期数据时数据导入格式

    在使用phpexcel导入类似于 YYYY-MM-DD HH:ii:ss格式的数据时,导入成功以后会发现导入的数据其实是类似于42085.746516204格式的数据( excel在存储时间类型的数据 ...

  8. phpexcel导入excel表格

    html代码 <form action="{:U('Mall/updExcel')}" method="POST" enctype="multi ...

  9. Thinkphp使用phpexcel导入文件并写入数据库

    现实中,我们往往很多地方都需要这样批量导入数据,除了phpexcel还有csv等方法可以解决 下面详细介绍一下使用方法 首先在官方下载安装包解压到本地,然后复制保存到tp框架下的vendor目录下 h ...

随机推荐

  1. Nodejs·进程

    之前对这部分的内容很感兴趣,没想到读起来有点晦涩,还是因为对服务器的知识不是很了解. 说道服务器一般人都会想到tomcat或者Jboss或者weblogic,现在流行起来的Node总让人不太放心,JS ...

  2. Kafka与Logstash的数据采集对接 —— 看图说话,从运行机制到部署

    基于Logstash跑通Kafka还是需要注意很多东西,最重要的就是理解Kafka的原理. Logstash工作原理 由于Kafka采用解耦的设计思想,并非原始的发布订阅,生产者负责产生消息,直接推送 ...

  3. Atitit.软件中见算法 程序设计五大种类算法

    Atitit.软件中见算法 程序设计五大种类算法 1. 算法的定义1 2. 算法的复杂度1 2.1. Algo cate2 3. 分治法2 4. 动态规划法2 5. 贪心算法3 6. 回溯法3 7. ...

  4. 将图片的二进制字节字符串在HTML页面以图片形式输出

    具体实现代码如下: 1.新建一个一般处理程序: Image.ashx using System; using System.Collections.Generic; using System.Linq ...

  5. ui-router带参数的ui-sref配置

    ui-router带参数的ui-sref配置 路由 .state('app.user_edit', { url:'user/userid/:userid', templateUrl: 'compone ...

  6. redis + 主从 + 持久化 + 分片 + 集群 + spring集成

    Redis是一个基于内存的数据库,其不仅读写速度快,每秒可以执行大约110000的写操作,81000的读取操作,而且其支持存储字符串,哈希结构,链表,集合丰富的数据类型.所以得到很多开发者的青睐.加之 ...

  7. Android属性动画之ObjectAnimator

    相信对于Android初学者,对于Android中的动画效果一定很感兴趣,今天为大家总结一下刚刚学到的属性动画案例. 首先和一般的Android应用一样,我们先建一个工程,为了方便,我们的布局文件中就 ...

  8. MongoDB的学习--索引

    索引可以用来优化查询,而且在某些特定类型的查询中,索引是必不可少的.为集合选择合适的索引是提高性能的关键. 先来mock数据 for (i = 0; i < 1000000; i++) { db ...

  9. [转载]AxureRP学习成长之路

    [编者按]本文作者@朱军华Ronzhu , 本文借用官网的描述定义,介绍了在学习AxureRP过程当中所要经历的各个阶段,也结合了作者自身学习AxureRP使用的经验,讲一下在各个阶段中的一些学习方法 ...

  10. Nodejs学习笔记(三)——一张图看懂Nodejs建站

    前言:一条线,竖着放,如果做不到精进至深,那就旋转90°,至少也图个幅度宽广. 通俗解释上面的胡言乱语:还没学会爬,就学起走了?! 继上篇<Nodejs学习笔记(二)——Eclipse中运行调试 ...