thinkphp phpexcel导入
上次做了一个基于tp3.2.3的phpexcel导出,这次是phpexcel导入,准备材料phpexcel(不知道下载地址的查看我上一篇博文),虽说是基于thinkphp3.2.3来的,也只不过是引入phpexcel用了tp框架的引入方式而已,其他都是适用于任何代码的,闲话不多说,上代码。
两个步骤
1、上传页面:和普通文件上传一样,这里就不附代码了(不知道的童鞋,补补html/css)
2、数据处理-》插入数据库操作,(单sheet表格)
public function import(){
if(empty ( $_FILES ['excel'] ['name'] )){
exit( '请上传excel文件' );
}else{
$tmp_file = $_FILES ['excel'] ['tmp_name'];
$file_types = explode ( ".", $_FILES ['excel'] ['name'] );
$file_type = $file_types [count ( $file_types ) - 1];
//判别是不是.xls文件,判别是不是excel文件
if (strtolower ( $file_type ) != "xls"){
exit( '不是Excel文件,重新上传' );
}
//设置上传路径
$savePath = './Public/excel/';
if(!file_exists($savePath)){
exit( 'excel目录不存在!');
}
//以时间来命名上传的文件
$str = date ( 'Ymdhis' );
$file_name = $str . "." . $file_type;
//是否上传成功
if (!move_uploaded_file($tmp_file,$savePath.$file_name)){
exit ( '上传失败' );
}
Vendor('PHPExcel.Classes.PHPExcel.IOFactory'); //引入phpexcel
//获取excel文件内容生成数组
$objReader = \PHPExcel_IOFactory::createReader('Excel5');
$objReader->setReadDataOnly(true);
$objPHPExcel = $objReader->load($savePath.$file_name); //载入上传的excel
$objWorksheet = $objPHPExcel->getSheet(0);
$highestRow = $objWorksheet->getHighestRow();
$highestColumn = $objWorksheet->getHighestColumn();
$highestColumnIndex = \PHPExcel_Cell::columnIndexFromString($highestColumn);
$excelData = array();
for ($row = 1; $row <= $highestRow; $row++) {
for ($col = 0; $col < $highestColumnIndex; $col++) {
$excelData[$row][] =(string)$objWorksheet->getCellByColumnAndRow($col, $row)->getValue();
}
}
//此处打印$excelData可查看是否有数据
//数组重组
$data = array();
foreach ($excelData as $k=>$v){
$count = count($v);
for($i = 0;$i < $count;$i++){
$data[$k][$excelData['1'][$i]] = $v[$i];
}
}
$newData = array();
//再次重组数组,写入数据库
foreach($data as $k=>$v){
$newData[$k]['order_sn'] = $data[$k]['订单号'];
$newData[$k]['goods_num'] = $data[$k]['商品编号'];
$newData[$k]['goods_name'] = $data[$k]['商品名称'];
$newData[$k]['goods_price'] = $data[$k]['商品单价'];
$newData[$k]['order_totalprice'] = $data[$k]['订单总额'];
$newData[$k]['order_time'] = $data[$k]['下单时间'];
}
//此处打印$newData,即能明白,以下为数据库插入操作,省略
........................
echo('上传成功!');
}
}
测试文档就不上传了,示例中的字段等是根据我的数据库字段和测试文档来的,童鞋们测试的时候请注意区分,此例为excel单表格单一sheet上传,下面是多sheet上传,其实也差不多,只是多了几个步骤
3、数据处理-》插入数据库操作,(多sheet表格)
public function import(){
if(empty ( $_FILES ['excel'] ['name'] )){
exit( '请上传excel文件' );
}else{
$tmp_file = $_FILES ['excel'] ['tmp_name'];
$file_types = explode ( ".", $_FILES ['excel'] ['name'] );
$file_type = $file_types [count ( $file_types ) - 1];
//判别是不是.xls文件,判别是不是excel文件
if (strtolower ( $file_type ) != "xls"){
exit( '不是Excel文件,重新上传' );
}
//设置上传路径
$savePath = './Public/excel/';
if(!file_exists($savePath)){
exit( 'excel目录不存在!');
}
//以时间来命名上传的文件
$str = date ( 'Ymdhis' );
$file_name = $str . "." . $file_type;
//是否上传成功
if (!move_uploaded_file($tmp_file,$savePath.$file_name)){
exit ( '上传失败' );
}
Vendor('PHPExcel.Classes.PHPExcel.IOFactory'); //引入phpexcel
//获取excel文件内容生成数组
$objReader = \PHPExcel_IOFactory::createReader('Excel5');
$objReader->setReadDataOnly(true);
$objPHPExcel = $objReader->load($savePath.$file_name); //载入上传的excel
$sheetCount = $objPHPExcel->getSheetCount(); //获取excel中有个sheet表格
for($j=0;$j<$sheetCount;$j++){
$objWorksheet = $objPHPExcel->getSheet($j);
$highestRow = $objWorksheet->getHighestRow();
$highestColumn = $objWorksheet->getHighestColumn();
$highestColumnIndex = \PHPExcel_Cell::columnIndexFromString($highestColumn);
$excelData = array();
for ($row = 1; $row <= $highestRow; $row++) {
for ($col = 0; $col < $highestColumnIndex; $col++) {
$excelData[$row][] =(string)$objWorksheet->getCellByColumnAndRow($col, $row)->getValue();
}
}
//此处打印$excelData可查看是否有数据
//数组重组
$data = array();
foreach ($excelData as $k=>$v){
$count = count($v);
for($i = 0;$i < $count;$i++){
$data[$k][$excelData['1'][$i]] = $v[$i];
}
}
$newData = array();
//再次重组数组,写入数据库
foreach($data as $k=>$v){
$newData[$k]['order_sn'] = $data[$k]['订单号'];
$newData[$k]['goods_num'] = $data[$k]['商品编号'];
$newData[$k]['goods_name'] = $data[$k]['商品名称'];
$newData[$k]['goods_price'] = $data[$k]['商品单价'];
$newData[$k]['order_totalprice'] = $data[$k]['订单总额'];
$newData[$k]['order_time'] = $data[$k]['下单时间'];
}
//数据库插入操作,以下省略……
}
echo('上传成功!');
}
}
其实不管是单sheet表格还是多sheet表格,都是类似的,只是多处理了几步而已,文中示例稍微简单了些,只是给童鞋们介绍这个流程和原理,具体的要根据自己实际情况来操作。
thinkphp phpexcel导入的更多相关文章
- Thinkphp 用PHPExcel 导入Excel
搞了个简单的Excel导入, 用的是PHPExcel(百科:用来操作Office Excel文档的一个PHP类库, 基于微软的OpenXML标准和PHP语言) 好, 不说了, 开始吧... 首先得有P ...
- thinkphp中使用PHPEXCEL导入数据
导入方法比较简单 但必须考虑到Excel本身单元格格式问题 例如以0开头的字符串读出来被去掉了前导0 成为float型而丢失一位 必须进行处理 <?php /** * Author lizhao ...
- ThinkPHP第二十三天(Category表结构、PHPExcel导入数据函数)
1.category分类表表结构id,name,pid,sort,结合category.class.php类使用. 2.PHPExcel导入数据函数示例 function excel_to_mysql ...
- tp phpexcel 导入后台访问方法
public function addall(){ $Water = M('Waterrate'); $config = array( 'maxSize' => 0, 'rootPath' =& ...
- phpexcel导入数据提示失败
phpexcel导入excel时明明只有几行数据,却提示506行失败,原来是excel中有506行"无效数据"(看起来是空的,但是和没有数据不一样).
- phpexcel导入数据库 基于thinkphp3.2
public function studentImportExcel(){ if (!empty ( $_FILES)){ $upload = new \Think\Upload(); ...
- 使用PHPExcel导入导出excel格式文件
使用PHPExcel导入导出excel格式文件 作者:zccst 因为导出使用较多,以下是导出实现过程. 第一步,将PHPExcel的源码拷贝到项目的lib下 文件包含:PHPExcel.ph ...
- ThinkPhp3.2.3 使用phpExcel导入数据
public function uploadExcel(){ if (!empty($_FILES)){ $upload = new \Think\Upload(); // 实例化上传类 $uploa ...
- 黄聪:超实用的PHPExcel[导入][导出]实现方法总结
首先需要去官网https://github.com/PHPOffice/PHPExcel/下载PHPExcel,下载后只需要Classes目录下的文件即可. 1.PHPExcel导出方法实现过程 /* ...
随机推荐
- 关于微信的jsapi_ticket的获取方法;
对于一个从前端转到后端的开发人员来说,这个玩意儿开始的时候是有点郁闷:不过明白原理之后就简单了, 获取jsapi_ticket:必须先获取access_token; 微信开发文档说access_tok ...
- mongoose 查询子文档的方法
{ "__v": 1, "_id": "538f5f0f6195a184108c8bd8", "title": &quo ...
- 投资学第一章 investments-introduction
转载请注明来自souldak,微博:@evagle 砖搬多了有点累,今天学学投资学. 这章主要是一些重要的概念. real assets / financial assets , fixed-in ...
- 母版页中ContentPlaceHolder 控件的作用
文章转自 http://wenku.baidu.com/link?url=7sLN0ihgZQ1XfX47b_y8qbpIVjS5T75Q1xvaoyIQ6OiKIgvzyVyRccnU9e9fqo ...
- UISearchBar--改变内部输入框的背景颜色
思路是获取UISearchBar的子视图,判断他是否是输入框(注意不要先入为主地认为是UITextField),最后修改背景色.至于UISearchBar的子视图结构,在不同的iOS版本可能会不一样, ...
- 如何在一个工作站里创建多个工程(同一个xcode下面创建多个工程)
第一步,理解: 怎么会有一个xcode下面创建两个工程这一说呢,一个工程代表一个项目,意思就是有两个项目了.错.其实在一个窗口下面并不是两个工程,而是一个workspace 即一个工作站.在工作站里面 ...
- 155Min Stack
题目地址:155Min Stack 最近为了提高数据结构和算法能力,保证每天一到leetcode的题目.从easy开始,感觉这道题目还蛮好,记录一下. 题目大意:就是维护一个栈,获得栈中元素的的最小值 ...
- BZOJ 3230: 相似子串( RMQ + 后缀数组 + 二分 )
二分查找求出k大串, 然后正反做后缀数组, RMQ求LCP, 时间复杂度O(NlogN+logN) -------------------------------------------------- ...
- windows8 安装IIS 和 添加网站(转)
Internet Information Services(IIS,互联网信息服务),是由微软公司提供的基于运行Microsoft Windows的互联网基本服务.最初是Windows NT版本的可选 ...
- java——多线程——单例模式的static方法和非static方法是否是线程安全的?
单例模式的static方法和非static方法是否是线程安全的? 答案是:单例模式的static方法和非static方法是否是线程安全的,与单例模式无关.也就说,如果static方法或者非static ...