搞了个简单的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. DDD~Unity在DDD中的使用

    回到目录 上一讲介绍了DDD中的领域层,并提到下次要讲Unity,所以这篇文章当然就要介绍它了,呵呵,Unity是Microsoft.Practices中的一部分,主要实现了依赖注入的功能,或者叫它控 ...

  2. 《Node.js实战(双色)》作者之一——吴中骅访谈录

  3. 学习ASP.NET MVC(四)——我的第一个ASP.NET MVC 实体对象

    今天我将根据数据库中的表结构添加一些类.这些类将成为这个ASP.NET MVC应用程序中“模型”的一部分.       我们使用Entity Framework(实体框架)来定义和使用这些模型类,并且 ...

  4. CCNA网络工程师学习进程(1)网络的基本概述

        在互联网快速发展的今天,了解互联网成为一项必须的技能,因此在学习编程之余学习如何配置网络还是很有必要的. 本系列博客计划分为三个部分,包括思科CCNA.CCNP和华为的网络工程师认证有关的知识 ...

  5. SDWebImage清除图片缓存

    背景: 使用 SDWebImage 库,由于内存中一直缓存着加载的图片,而导致内存过高(我们无法手动管理内存),弹出内存警告而导致程序很卡或者直接crash掉. 我的解决方法: 在AppDelegat ...

  6. Linux快速入门01-基础概念

    4年多前,刚到上海时报过一个关于Oracle的培训班,在那里接触到了Linux,不过一直都没真正去试着使用它.现在经过慢慢的成长,越来越觉得,Linux是每一个服务端工程师必须掌握的系统,即使是现在最 ...

  7. Oracle 11g系列:数据库

    1.创建Oracle数据库 创建Oracle数据库的最常用工具为Database Configuration Assistant(数据库配置助手),依次选择[开始]|[所有程序]|[Oracle-Or ...

  8. Java多线程系列--“基础篇”10之 线程优先级和守护线程

    概要 本章,会对守护线程和线程优先级进行介绍.涉及到的内容包括:1. 线程优先级的介绍2. 线程优先级的示例3. 守护线程的示例 转载请注明出处:http://www.cnblogs.com/skyw ...

  9. 面试题目: PHP 有哪些优缺点?

    当面试官噼里啪啦的问你一大堆问题后,突然问你,PHP有哪些优缺点?你蒙了没? 反正我是蒙了,不管你信不信! 现在,关于PHP优缺点,大致的说几点: 1.  语法简单的,上手很快,而且还有很多很便捷的开 ...

  10. javascript学习5

    JavaScript Array(数组)对象 数组对象的作用是:使用单独的变量名来存储一系列的值. 实例 创建数组 创建数组,为其赋值,然后输出这些值. For...In 声明 使用 for...in ...