thinkphp3.1中的phpexcel导入怎么用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了thinkphp3.1中的phpexcel导入怎么用相关的知识,希望对你有一定的参考价值。
首先,去phpExcel官方网站下载PHPExcel,官方地址为;http://phpexcel.codeplex.com/.我下的是1.8.0版本的.解压后发现还是蛮大的,有十几M,不知道其他版本是不是会小点.这里写图片描述
把解压好的PHPExcel文件放在ThinkPHP的Vender文件夹下(专门放第三方类库的),如下图
这里写图片描述
其次,创建Excel转换数组类,并把它放在ThinkPHP\\Extend\\Library\\ORG\\Util目录下
class ExcelToArrary
public function __construct()
Vendor("PHPExcel.Classes.PHPExcel");//引入phpexcel类(留意路径,不了解路径可以查看下手册)
Vendor("PHPExcel.Classes.PHPExcel.IOFactory"); //引入phpexcel类(留意路径)
public function read($filename,$encode,$file_type)
if(strtolower ( $file_type )==\'xls\')//判断excel表类型为2003还是2007
Vendor("PHPExcel.Classes.PHPExcel.Reader.Excel5"); //引入phpexcel类(留意路径)
$objReader = PHPExcel_IOFactory::createReader(\'Excel5\');
elseif(strtolower ( $file_type )==\'xlsx\')
Vendor("PHPExcel.Classes.PHPExcel.Reader.Excel2007");//引入phpexcel类(留意路径)
$objReader = PHPExcel_IOFactory::createReader(\'Excel2007\');
$objReader->setReadDataOnly(true);
$objPHPExcel = $objReader->load($filename);
$objWorksheet = $objPHPExcel->getActiveSheet();
$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();
return $excelData;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
如右图这里写图片描述
现在来说Excel,表格的结构样式和mysql样式要类似,表格样式如下(本人对Excel使用只是一般,所以如果有Excel大神做的报表,不知后果如何).
这里写图片描述
前端页面相关代码:
<div>
<form method="post" action=":U(\'Index/upload\')" enctype="multipart/form-data">
<font>导入Excel数据:</font>
<label for="file_stu">上传</label>
<input name="file_stu" type="file" id="file_stu" />
<h3>温馨提示:</h3>
<p>请确认您的Excel表格类型是xls的,以免出现兼容问题.</p>
<inputtypeinputtype="submit" class="sure" value="导入" />
</form>
</div>
1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
9
10
最后,控制器部分使用了Thinkphp自带的上传类,使用unlink()函数是为了删除上传的excel表格,以免文件夹存入过多文件,调试代码时可先注释掉.或者不写也行,把删除文件的工作交给你们的运维.代码中foreach循环部分$v[]里的0, 1,2可以改动以下看看与Excel表格里的内容是什么关系.可以把数组打印出来看一看,你就很清楚了
相关代码:
public function upload()
import(\'ORG.Util.ExcelToArrary\');//导入excelToArray类
if (! empty ( $_FILES [\'file_stu\'] [\'name\'] ))
import(\'ORG.Net.UploadFile\');
$upload = new UploadFile();// 实例化上传类
$upload->maxSize = 3145728 ;// 设置附件上传大小
$upload->allowExts = array(\'xls\', \'xlsx\');// 设置附件上传类型
$upload->savePath = \'./Uploads/\';// 设置附件上传目录
if(!$upload->upload()) // 上传错误提示错误信息
$this->error($upload->getErrorMsg());
else// 上传成功 获取上传文件信息
$info = $upload->getUploadFileInfo();
else
$this->error(\'(⊙o⊙)~没传数据就导入?!你在逗我?!\');
//dump($info);die;
$ExcelToArrary=new ExcelToArrary();//实例化
$res=$ExcelToArrary->read($info[0][\'savepath\'].$info[0][\'savename\'],"UTF-8",$info[0][\'extension\']);//传参,判断office2007还是office2003
$res = array_slice($res,1); //为了去掉Excel里的表头,也就是$res数组里的$res[0];
//dump($res);
foreach ( $res as $k => $v ) //循环excel表
$data[$k][\'mobile\'] = $v [0];//创建二维数组
$data[$k][\'name\'] = $v [1];
$data[$k][\'duty\'] = $v [2];
//dump($data);die;
$result=M(\'appkey\')->addAll($data);
if(!$result)
$this->error(\'导入数据库失败\');
exit();
else
$filename = \'./Uploads/\'.$info[0][\'savename\'];//上传文件绝对路径,unlink()删除文件函数
if (unlink($filename))
$this->success ( \'导入成功\' );
else
$this->error(\'缓存删除失败\');
参考技术A
一、上传Excel文件,使用PHP里自带的上传方法 “\\Think\\Upload();”,可以很方便的实现。为此我整理下使用这个方法的最简单方式
/*** TODO 上传文件方法
* @param $fileid form表单file的name值
* @param $dir 上传到uploads目录的$dir文件夹里
* @param int $maxsize 最大上传限制,默认1024000 byte
* @param array $exts 允许上传文件类型 默认array('gif','jpg','jpeg','bmp','png')
* @return array 返回array,失败status=0 成功status=1,filepath=newspost/2014-9-9/a.jpg
*/
function uploadfile($fileid,$dir,$maxsize=5242880,$exts=array('gif','jpg','jpeg','bmp','png'),$maxwidth=430)
$upload = new \\Think\\Upload();// 实例化上传类
$upload->maxSize = $maxsize;// 设置附件上传大小,单位字节(微信图片限制1M
$upload->exts = $exts;// 设置附件上传类型
$upload->rootPath = './uploads/'; // 设置附件上传根目录
$upload->savePath = $dir.'/'; // 设置附件上传(子)目录
// 上传文件
$info = $upload->upload();
if(!$info) // 上传错误提示错误信息
return array(status=>0,msg=>$upload->getError());
else// 上传成功
return array(status=>1,msg=>'上传成功',filepath=>$info[$fileid]['savepath'].$info[$fileid]['savename']);
这里默认上传到ThinkPHP入口文件index.php所在的文件夹uploads,此方法返回一个数据,状态status=1时为成功,也建议大家在写功能模块时或做封装时,整个系统的在架构初期应该有约定,在必要的情况下返回值用数组形式,成功返回
return array(status=>1,data=>....,info=>.....)失败时可以返回
array(status->0,info=>'可以说明出错的原因',....)这样用统一的方式有利于规范开发,团队协作时看代码时可以提高效率,减少思维运转,说远了,上传的方法调用方式如下:
//excel 文件if(!empty($_FILES['xls']['name']))
$upload=uploadfile('xls','tempxls',5242880,array('xls','xlsx'));
if($upload['status'])
$path=$upload['filepath'];
else
$this->error($upload['msg']);
二、获取Excel数据
1.首先需要引入PHPExcel的类库
require_once 'module/PHPExcel/Classes/PHPExcel/IOFactory.php';2.获取Excel第0张表即(Sheet1)
//获取excel文件$objPHPExcel = \\PHPExcel_IOFactory::load("uploads/$path");
$objPHPExcel->setActiveSheetIndex(0);
$sheet0=$objPHPExcel->getSheet(0);
3.获取行数,并把数据读取出来$data数组
$rowCount=$sheet0->getHighestRow();//excel行数$data=array();
for ($i = 2; $i <= $rowCount; $i++)
$item['name']=$this->getExcelValue($sheet0,'A'.$i);
$item['sex']=$this->getExcelValue($sheet0,'B'.$i);
$item['contact']=$this->getExcelValue($sheet0,'C'.$i);
$item['remark']=$this->getExcelValue($sheet0,'D'.$i);
$item['addtime']=$this->getExcelValue($sheet0,'E'.$i);
$data[]=$item;
三、最后保存到数据
$success=0;$error=0;
$sum=count($data);
foreach($data as $k=>$v)
if(M('temp_area3')->data($v)->add())
$success++;
else
$error++;
echo "总$sum条,成功$success条,失败$error条。";
thinkphp3.2和phpexcel导入
最简单的导入
$file_name= ‘./Upload/excel/123456.xls‘; import("Org.Util.PHPExcel"); import("Org.Util.PHPExcel.IOFactory"); $objReader = \PHPExcel_IOFactory::createReader(‘Excel5‘); $objPHPExcel = $objReader->load($file_name,$encode=‘utf-8‘); $sheet = $objPHPExcel->getSheet(0); $highestRow = $sheet->getHighestRow(); // 取得总行数 $highestColumn = $sheet->getHighestColumn(); // 取得总列数 $s = $objPHPExcel->getActiveSheet()->getCell("A2")->getValue();
以上是关于thinkphp3.1中的phpexcel导入怎么用的主要内容,如果未能解决你的问题,请参考以下文章