对于新手来说,可以把表格中的数据导入进数据库那是十分好玩的一件事,我自己实现了一下网上的写法,基于PHPexcel实现的表格导入,踩了2个小时的坑,最终实例!

因为在thinkcmf中自己添加了phpexcel所以可以直接拿过来用,如果没有则可以自己添加,直接百度phpexcel就可以了,就是下面的文件夹和文件

对于thinkcmf来说它建有自己单独的model类我们可以把下面的代码放到单独的model类里面可以重复使用,下面上代码

--------------------------------------------------我 是 分 割 线--------------------------------------------------------------------------------

.新建可以处理phpexcel的model类ExcelModel.class.php。

 <?php
namespace Think\Model;//自己新建一个model类
use Think\Model;
class ExcelModel extends Model {
protected $tableName = 'products_log'; public function __construct() { /*导入phpExcel核心类 SPAPP_PATH为存放phpexcel路径的定义,在入口文件index.php定义*/
require_once SPAPP_PATH.'Core/Library/Vendor/PHPExcel/PHPExcel.php';
require_once SPAPP_PATH.'Core/Library/Vendor/PHPExcel/PHPExcel/Writer/Excel5.php'; // 用于其他低版本xls
require_once SPAPP_PATH.'Core/Library/Vendor/PHPExcel/PHPExcel/Writer/Excel2007.php'; // 用于 excel-2007 格式
} //导入excel内容转换成数组,import方法要用到
public function import($filePath){
$this->__construct();
$PHPExcel = new \PHPExcel();//实例化,一定要注意命名空间的问题加\ /**默认用excel2007读取excel,若格式不对,则用之前的版本进行读取*/
$PHPReader = new \PHPExcel_Reader_Excel2007();
if(!$PHPReader->canRead($filePath)){
$PHPReader = new \PHPExcel_Reader_Excel5();
if(!$PHPReader->canRead($filePath)){
echo 'no Excel';
return;
}
} $PHPExcel = $PHPReader->load($filePath);
$currentSheet = $PHPExcel->getSheet(0); //读取excel文件中的第一个工作表
$allColumn = $currentSheet->getHighestColumn(); //取得最大的列号
$allRow = $currentSheet->getHighestRow(); //取得一共有多少行
$erp_orders_id = array(); //声明数组 /**从第二行开始输出,因为excel表中第一行为列名*/
for($currentRow = 2;$currentRow <= $allRow;$currentRow++){ /**从第A列开始输出*/
for($currentColumn= 'A';$currentColumn<= $allColumn; $currentColumn++){
//这部分注释不要,取出的数据不便于我们处理
// $val = $currentSheet->getCellByColumnAndRow(ord($currentColumn) - 65,$currentRow)->getValue();/**ord()将字符转为十进制数*/
// if($val!=''){
// $erp_orders_id[] = $val;
// }
//数据坐标
$address = $currentColumn . $currentRow;
//读取到的数据,保存到数组$arr中
$data[$currentRow][$currentColumn] = $currentSheet->getCell($address)->getValue();
/**如果输出汉字有乱码,则需将输出内容用iconv函数进行编码转换,如下将gb2312编码转为utf-8编码输出*/
//echo iconv('utf-8','gb2312', $val)."\t"; }
}
return $data;
}

.新建html用于文件上传student_excel.html,直接上form表单了,一定要加enctype="multipart/form-data"。

 <form method="post" class="form-horizontal js-ajax-form" action="{:U('Student/student_excelpost')}" enctype="multipart/form-data">
<fieldset>
<div class="control-group">
<label class="control-label">导入excel文件:</label>
<div class="controls">
<input type="file" name="file_stu">
<span class="form-required">*</span>
</div>
</div>
</fieldset>
<div class="form-actions">
<button type="submit" class="btn btn-primary js-ajax-submit">导入</button>
</div>
</form>

.上传过去php来判断表格,处理表格,返回结果

 //表格数据
public function student_excelpost(){
//获取上传的文件名、扩展名等信息
if (! empty ( $_FILES ['file_stu'] ['name'] ))
{
//保存的是文件上传到服务器临时文件夹之后的文件名
$tmp_file = $_FILES ['file_stu'] ['tmp_name'];
//分割文件名和扩展名
$file_types = explode ( ".", $_FILES ['file_stu'] ['name'] );
//获取扩展名
$file_type = $file_types [count ( $file_types ) - 1]; /*判别是不是.xls文件,判别是不是excel文件*/
if (strtolower ( $file_type ) != "xlsx" && strtolower ( $file_type ) != "xls")
{
$this->error ( '不是Excel文件,重新上传' );
} /*设置上传路径*/
$savePath = Excel_PATH.'Excel/'; /*以时间来命名上传的文件*/
$str = date ( 'Ymdhis' );
$file_name = $str . "." . $file_type; /*是否上传成功*/
if (! copy ( $tmp_file, $savePath . $file_name ))
{
$this->error ( '上传失败' );
}
}
$data = D("Think/Excel")->import( $savePath . $file_name ); $res = array(); //声明数组 // echo'<pre>';
// var_dump($data);
// exit;
//查询user表,对应信息相互关联
foreach($data as $i=>$val){
// var_dump($val[B]);
$s['class_name'] = $val[A];
$s['student_name'] = $val[B];
$s['student_number'] = $val[C];
$s['student_tel'] = $val[D];
if($val[E] == '男'){
$s['student_sex'] = 1;
}else{
$s['student_sex'] = 0;
}
$s['student_birthday'] = $val[F];
$s['student_national'] = $val[G];
$s['student_native'] = $val[H];
$s['student_email'] = $val[I];
$s['student_from'] = $val[J];
$s['student_alone'] = $val[K];
$s['student_exp'] = $val[L];
$s['student_think'] = $val[M];
$s['student_love'] = $val[N];
$s['student_tschool'] = $val[O];
$s['student_tmajor'] = $val[P];
$s['student_contact'] = $val[Q];
$s['student_consider'] = $val[R];
$s['student_affect'] = $val[S];
$s['student_imp'] = $val[T];
// echo'<pre>';
// var_dump($s);$this->student_model(为数据库实例,本人在上面定义这里可以直接拿过来用)
$rs = $this->student_model->add($s);
}
if($rs){
$this->success("数据添加成功!", U('Student/student'));
}else{
$this->error("数据添加失败!");
}
// exit;
} }

以上便是phpexcel的运用实例,具体不难,实践一遍即可知晓,有什么不足的地方还请大家指教

本人邮箱1428937236@qq.com,欢迎骚扰,上面的phpexcel懒得下载的可以来我的百度云,链接如下

http://pan.baidu.com/s/1gfoRWsV

thinkcmf,thinkphp,表格导入(PHPexcel)的实现,新手向的更多相关文章

  1. 基于ThinkPHP开发的PHPExcel导入

    首先,我们还是要导入PHPExcel类文件...至于怎么导入.可以参考我写的导出的那篇文章(http://www.cnblogs.com/hopelooking/p/6230303.html) 但是我 ...

  2. ThinkPHP+uploadify+upload+PHPExcel 无刷新导入数据

    前端HTML+JQuery  备注Jquery需要1.x版本,不能用2.x版本 1.引入必要文件及上传input <load file="__PUBLIC__/js/jquery-1. ...

  3. 把EXECL表格导入到WORD中

    一般我们在编写开发文档时需要进行表格导入导出,这里提供几种方法供参考. 法一: 打开EXECL,WORD软件,在需要导入表格的地方选择“插入” ,找到“对象选项: ”在对象对话框中点击“由文件创建”, ...

  4. 使用 EPPlus 封装的 excel 表格导入功能 (.net core c#)

    使用 EPPlus 封装的 excel 表格导入功能 前言 最近做系统的时候有很多 excel导入 的功能,以前我前后端都做的时候是在前端解析,然后再做个批量插入的接口 我觉着这样挺好的,后端部分可以 ...

  5. 使用 EPPlus 封装的 excel 表格导入功能 (二) delegate 委托 --永远滴神

    使用 EPPlus 封装的 excel 表格导入功能 (二) delegate 委托 --永远滴神 前言 接上一篇 使用 EPPlus 封装的 excel 表格导入功能 (一) 前一篇的是大概能用但是 ...

  6. Thinkphp框架下PHPExcel实现Excel数据的批量化导入导出

    第一步:下载官方的PHPExcel文件,下载地址https://github.com/PHPOffice/PHPExcel 第二步:解压打开,将PHPExcel\Classes\全部文件拷贝到thin ...

  7. thinkphp中使用PHPEXCEL导入数据

    导入方法比较简单 但必须考虑到Excel本身单元格格式问题 例如以0开头的字符串读出来被去掉了前导0 成为float型而丢失一位 必须进行处理 <?php /** * Author lizhao ...

  8. 基于ThinkPHP开发的PHPExcel导出

    首先我们需要去PHPExcel官网下载开源包 下载好了以后只需要把里面的classes文件夹解压出来就可以用了! 在ThinkPHP中,文件的命名空间还是很重要的,我试着按照其他的第三方命名写name ...

  9. thinkphp中使用PHPEXCEL导出数据

    thinkphp中导出二维数组到Excel 1.解决时间长度导致EXCEL出现###问题 2.解决长数值型 带来的科学记数法导出问题 订单号不再变为科学记数法 而是直接字符串类型 代码如下: < ...

随机推荐

  1. zepto js 源码 解读

    /* Zepto v1.0-1-ga3cab6c - polyfill zepto detect event ajax form fx - zeptojs.com/license */ ;(funct ...

  2. delphi的ArrayList

    本文转载自Top.hand<delphi的ArrayList>   delphi可以用Classes.TList类来实现ArrayList功能.注意:add()方法存入的类型是TPoint ...

  3. iOS 之 Property List

    1. 概念 用于存储串行化对象,xml格式,存储到plist文件中. 2. 用途 存储用户设置. 3. 优点 程序运行时可动态创建和读写. 4. 使用说明 4.1. 获取plist文件 NSStrin ...

  4. Windows与Linux文件系统互访的几种方法

    首先,我们知道基于文件的几种服务:ftp,sftp,这两种服务都是文件传输服务,偏重于网络传输,并不是实时互访.通常,我们需要在远程和本地 同时操作同一个目录,如:在Windows下使用各种强大的ID ...

  5. GCD教程(二):多核心的性能

    接上一篇,原帖地址:http://www.dreamingwish.com/dream-2012/of-of-of-performance-of-of-of-of-of-of-of-gcd-intro ...

  6. 用php 进行对文件的操作 (下)

    继续来说文件操作 新建一个文件夹或是删除一个文件夹,并不是只有右击一种方法,还可以用代码来操作 先来看没有运行代码之前的目录下有哪些文件 点击运行代码后再来看有没有增加名为aa的文件夹 添加成功 再来 ...

  7. Android 自定义通用的loadingview

    介绍 好久没有写博客啦,最近在接近新年了,年前的工作都要收尾,所以特别忙,周末抽空写了个通用的加载view,写篇博客分享出来. 功能 1.显示加载视图,加载失败的时候显示加载失败视图,数据为空时显示数 ...

  8. 只为粗暴看一下ES6的字符串模板的性能

    网上查找"ES6 字符串模板 +性能"5分钟无果遂写了一个暴力测试. 测试对象: +=方式,字符串累加计算方式 +s1+s2...+sn方式,即传统连加拼接字符串方式 s.push ...

  9. 深圳尚学堂:Swift中的“!”和“?”

    Swift中的"!"和"?"Swift,苹果于2014年WWDC发布的新开发语言,用于搭建基于苹果平台的应用程序.Swift是一款易学易用的编程语言,而且它还是 ...

  10. API网关Ocelot 使用Polly 处理部分失败问题

    在实现API Gateway过程中,另外一个需要考虑的问题就是部分失败.这个问题发生在分布式系统中当一个服务调用另外一个服务超时或者不可用的情况.API Gateway不应该被阻断并处于无限期等待下游 ...