thinkcmf,thinkphp,表格导入(PHPexcel)的实现,新手向
对于新手来说,可以把表格中的数据导入进数据库那是十分好玩的一件事,我自己实现了一下网上的写法,基于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)的实现,新手向的更多相关文章
- 基于ThinkPHP开发的PHPExcel导入
首先,我们还是要导入PHPExcel类文件...至于怎么导入.可以参考我写的导出的那篇文章(http://www.cnblogs.com/hopelooking/p/6230303.html) 但是我 ...
- ThinkPHP+uploadify+upload+PHPExcel 无刷新导入数据
前端HTML+JQuery 备注Jquery需要1.x版本,不能用2.x版本 1.引入必要文件及上传input <load file="__PUBLIC__/js/jquery-1. ...
- 把EXECL表格导入到WORD中
一般我们在编写开发文档时需要进行表格导入导出,这里提供几种方法供参考. 法一: 打开EXECL,WORD软件,在需要导入表格的地方选择“插入” ,找到“对象选项: ”在对象对话框中点击“由文件创建”, ...
- 使用 EPPlus 封装的 excel 表格导入功能 (.net core c#)
使用 EPPlus 封装的 excel 表格导入功能 前言 最近做系统的时候有很多 excel导入 的功能,以前我前后端都做的时候是在前端解析,然后再做个批量插入的接口 我觉着这样挺好的,后端部分可以 ...
- 使用 EPPlus 封装的 excel 表格导入功能 (二) delegate 委托 --永远滴神
使用 EPPlus 封装的 excel 表格导入功能 (二) delegate 委托 --永远滴神 前言 接上一篇 使用 EPPlus 封装的 excel 表格导入功能 (一) 前一篇的是大概能用但是 ...
- Thinkphp框架下PHPExcel实现Excel数据的批量化导入导出
第一步:下载官方的PHPExcel文件,下载地址https://github.com/PHPOffice/PHPExcel 第二步:解压打开,将PHPExcel\Classes\全部文件拷贝到thin ...
- thinkphp中使用PHPEXCEL导入数据
导入方法比较简单 但必须考虑到Excel本身单元格格式问题 例如以0开头的字符串读出来被去掉了前导0 成为float型而丢失一位 必须进行处理 <?php /** * Author lizhao ...
- 基于ThinkPHP开发的PHPExcel导出
首先我们需要去PHPExcel官网下载开源包 下载好了以后只需要把里面的classes文件夹解压出来就可以用了! 在ThinkPHP中,文件的命名空间还是很重要的,我试着按照其他的第三方命名写name ...
- thinkphp中使用PHPEXCEL导出数据
thinkphp中导出二维数组到Excel 1.解决时间长度导致EXCEL出现###问题 2.解决长数值型 带来的科学记数法导出问题 订单号不再变为科学记数法 而是直接字符串类型 代码如下: < ...
随机推荐
- keystore 介绍
Keytool 是一个有效的安全钥匙和证书的管理工具. Java 中的 keytool.exe (位于 JDK\Bin 目录下)可以用来创建数字证书,所有的数字证书是以一条一条(采用别名区别)的形式存 ...
- 使用ActionBar实现Tab导航
ActionBar还有常用的功能,实现Tab导航.ActionBar在顶端生成多个Tab标签,当用户单击点击某个Tab标签时,系统根据用户点击事件导航指定Tab页面. 为了使用ActionBar实现T ...
- MySQL XtraBackup备份脚本
#backup.sh #!/bin/sh #on xtrabackup 2.1.8 # 第一次执行它的时候它会检查是否有完全备份,否则先创建一个全库备份 # 当你再次运行它的时候,它会根据脚本中的设 ...
- ORA-01555经典错误
--创建undo表空间时固定表空间的大小 sys@TDB112>create undo tablespace undo_small 2 datafile'/u01/app/oracle/ora ...
- jQuery内容过滤器
jQuery内容过滤器 <h1>this is h1</h1> <div id="p1"> <h2>this is h2</h ...
- XMLSocket的bug
"<cross-domain-policy>" "<site-control permitted-cross-domain-policies=\&quo ...
- JSP 禁用脚本设置
JSP 禁用脚本设置: web.xml: <?xml version="1.0" encoding="UTF-8"?> <web-app xm ...
- 结合swiper使用图片懒加载
本人渣渣一枚,技术一般,记录下笔记,大神勿喷,可以留下优化建议,谢谢 最近刚刚做了个展示型的网站,使用swiper搭的框架,因为图片比较多,所 以首次加载稍微有些慢,虽然压缩过了,但是尽可能的优化吧, ...
- linux脚本: 后台启动程序并重定向输出信息脚本
后台启动程序并重定向输出信息脚本 新建文件mstart, 写入下面代码. #!/bin/bash $1 1>/etc/null 2>&1 & 说明 1>/etc/nu ...
- ES2:ElasticSearch 集群配置
ElasticSearch共有两个配置文件,都位于config目录下,分别是elasticsearch.yml和logging.yml,其中,elasticsearch.yml 用来配置Elastic ...