对于新手来说,可以把表格中的数据导入进数据库那是十分好玩的一件事,我自己实现了一下网上的写法,基于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. IndexAction.java (Java之负基础实战)

    生成Get and Set 方法: 例如:public String view; 右击view > Source > Generate Getters and Setters...

  2. swift版 关于微信支付的那点事

    今天心情那真是想要强奸吉娃娃的冲动  说白了就是不想做和工作沾边的任何事  但是也不能闲着啊  时间那么贵 之前就想把微信支付做一下  主要就是怕自己忘记了 今天难得有时间  就来简单的记录一下  旨 ...

  3. Scrum

    Scrum[编辑] 维基百科,自由的百科全书   Scrum是一种敏捷软件开发的方法学,用于迭代式增量软件开发过程.Scrum在英语是橄榄球运动中争球的意思. 虽然Scrum是为管理软件开发项目而开发 ...

  4. datatable 使用详细说明

    要注意的是,要被dataTable处理的table对象,必须有thead与tbody,而且,结构要规整(数据不一定要完整),这样才能正确处理.以下是在进行dataTable绑定处理时候可以附加的参数: ...

  5. Spring4.14 事务异常 NoUniqueBeanDefinitionException: No qualifying bean of type [....PlatformTransactionManager]

    环境为Spring + Spring mvc + mybatis:其中Spring版本为4.1.4 spring配置文件: <?xml version="1.0" encod ...

  6. EFCore扩展:IQueryable(linq)或sql执行的查询缓存与清理

    前言 上一篇讲述了执行sql和配置的一些功能,这篇说明IQueryable(linq)或执行sql的查询缓存与清理,包括扩展到将缓存存储到Redis中. 扩展类库源码: github:https:// ...

  7. [html5]学习笔记一 新增的非主体结构元素

    html新增加的非主体结构元素,主要是用来表示附加信息的,包括header,footer,hgroup,address元素. 1.header元素 header元素是一种具有引导和导航作用的结构元素, ...

  8. WinForm 文件操作

    文件及文件夹操作 C/S:WinForm可以操作客户端文件 Client ServerB/S:浏览器服务 Brower Server 命名空间:using system .IO; 1. File类:文 ...

  9. linux文件相关的命令

    1.linux下的文件分为字符设备文件和块设备文件 2.文件的属性有读写权限.执行权限.访问时间.修改时间.状态改变时间等. 状态改变时间指修改了文件的读写权限或者所有者等操作. 3.ls -l 执行 ...

  10. 使用LVS实现负载均衡原理及安装配置详解

    负载均衡集群是 load balance 集群的简写,翻译成中文就是负载均衡集群.常用的负载均衡开源软件有nginx.lvs.haproxy,商业的硬件负载均衡设备F5.Netscale.这里主要是学 ...