搞了个简单的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. bootstrap表格

    Bootstrap 实例 - 边框表格 < 建立日期 2015-5-27 录入人员 test1 处理人员 test2 问题报障人   部门/城市公司   联系电话   问题类型   处理状态   ...

  2. 运行第一个PHP程序

    由于PHP比较简单,所以闲来无事学习一下PHP的程序. 之前安装XAMPP出现各种错误,于是下载了PHPStudy,真的十分简单方便,感谢网站开发者. 可以在网站的软件下载中下载,附上首页链接:htt ...

  3. Kafka 分布式环境搭建

    这篇文章将介绍如何搭建kafka环境,我们会从单机版开始,然后逐渐往分布式扩展.单机版的搭建官网上就有,比较容易实现,这里我就简单介绍下即可,而分布式的搭建官网却没有描述,我们最终的目的还是用分布式来 ...

  4. SQL Server时间粒度系列----第3节旬、月时间粒度详解

    本文目录列表: 1.SQL Server旬时间粒度2.SQL Server月有关时间粒度 3.SQL Server函数重构 4.总结语 5.参考清单列表   SQL Server旬时间粒度       ...

  5. Java基础知识强化之IO流笔记54:IO流练习之 LineNumberReader的特有的功能使用

    1. LineNumberReader的特有的功能:  BufferedReader |--LineNumberReader  public int getLineNumber():获得当前行号.   ...

  6. Android中调用文件管理器并返回选中文件的路径

    实际项目中经常需要调用文件管理器,选择下载路径或者上传的本地文件路径.今天就给大家做个demo示范该功能的实现过程. 一.实现效果预览 以下为三星S6的样机测试效果,当然不同手机调用后的效果不一样. ...

  7. H5 字符实体

    41-字符实体 (greater than) © 版权符号 --> 我   爱你 到此为止我们的HTML的基础标签就学习完毕了, 例如我们学习了<h1>标签, <table&g ...

  8. 【转载】C# 获取系统时间及时间格式

    https://www.cnblogs.com/xjtrab/articles/1878353.html

  9. jquery与php的HTML转义与反转义

    1.jquery (1)Html转义 var tmp = '<a href="https://www.baidu.com/">连接</a>'; var tm ...

  10. EF 调用oracle 存储过程

    EF是如何调用的存储过程的,本人也是翻遍了个大网站,查阅了很多资料.终于解决了遇到的问题. 第一步:创建存储过程,在这里我就不多说了,不是文章说的重点. declare O_VOUCHER_ACT_D ...