之前做到这个导入的问题,查了thinkphp上面的方法,自己就想总结一下。
第一步当然是前台布局,布局还是很重要的
导入excel文件其实就是文件上传,只是现在这个文件是excel类型,所以下面我们要做到就是文件上传的步骤了。代码如下
public function upload(){
//文件上传
$upload = new \Think\Upload();// 实例化上传类
$upload->maxSize = 3145728 ;// 设置附件上传大小
$upload->rootPath = './Uploads/excel/'; // 设置附件上传根目录
// 上传文件
$info = $upload->upload();
if(!$info) {
// 上传错误提示错误信息
$this->error($upload->getError());
}else{
// 上传成功 获取上传文件信息
foreach($info as $file){
$filename = './Uploads/excel/'.$file['savepath'].$file['savename'];
$this->importExecl($filename);//传递文件上传的路径给这个方法,进行读取excel文件数据
$this->display("index");
}
}
}
文件上传应该都很简单,下面就是另写一个方法,用来读取excel中的数据
//excel导入
public function importExecl($filename)
{
$file = dirname(__FILE__);
if (!file_exists($file)) {
return array("error" => 0, 'message' => 'file not found!');
}
Vendor("Excel.PHPExcel.IOFactory");//引入excel类文件
$fileType = \PHPExcel_IOFactory::identify($filename);//自动获取文件的类型提供给phpexcel用
$objReader = \PHPExcel_IOFactory::createReader($fileType);//读取文件 读取操作对象
$objPHPexcel = $objReader->load($filename, $encode = 'utf-8');//加载文件
$sheetCount = $objPHPexcel->getSheetCount();//获取excel文件里有多少个sheet
$data = array();
for ($i = 0; $i < $sheetCount; $i++) {
$sheet = $objPHPexcel->getSheet($i);
$highestRow = $sheet->getHighestRow(); // 取得总行数
$highestColumn = $sheet->getHighestColumn(); // 取得总列数
for ($i = 2; $i <= $highestRow; $i++) {
$item['GJAHR'] = $objPHPexcel->getActiveSheet()->getCell("A" . $i)->getValue();
$item['MONAT'] = $objPHPexcel->getActiveSheet()->getCell("B" . $i)->getValue();
$item['KKBER'] = $objPHPexcel->getActiveSheet()->getCell("C" . $i)->getValue();
$item['KUNNR'] = $objPHPexcel->getActiveSheet()->getCell("D" . $i)->getValue();
$item['NAME1'] = $objPHPexcel->getActiveSheet()->getCell("E" . $i)->getValue();
$item['Ckje'] = $objPHPexcel->getActiveSheet()->getCell("F" . $i)->getValue();
$item['Fl'] = $objPHPexcel->getActiveSheet()->getCell("G" . $i)->getValue();
$item['Bf'] = $objPHPexcel->getActiveSheet()->getCell("H" . $i)->getValue();
$item['BZ'] = $objPHPexcel->getActiveSheet()->getCell("I" . $i)->getValue();
$data[] = $item;
}
}
$this->assign('data', $data);
}
代码上面都写了注释,最后就是将获取到的数据在前台页面中显示出来,所以要分配变量(最后得到的是一个二维数组)
我这里呢还有一个保存按钮,是用来将导入进来excel数据保存到对应的数据库中,下面就介绍一下如何保存,代码如下
<script>
$("#impsave").click(function() {//单机保存按钮执行以下操作
var implist = $("#imp").children("tr");
var r = "";
//这里循环得到每隔个单元格中对应的值
for (var i = 0; i < implist.length; i++) {
var GJAHR = implist.eq(i).children().eq(0).text();
var MONAT = implist.eq(i).children().eq(1).text();
var KKBER = implist.eq(i).children().eq(2).text();
var KUNNR = implist.eq(i).children().eq(3).text();
var NAME1 = implist.eq(i).children().eq(4).text();
var Ckje = implist.eq(i).children().eq(5).text();
var Fl = implist.eq(i).children().eq(6).text();
var Bf = implist.eq(i).children().eq(7).text();
var BZ = implist.eq(i).children().eq(8).text();
$.ajax({
type: "post",
url: "{:U('Mediasetcbkhbfdr/insert')}",
data: {GJAHR:GJAHR,MONAT:MONAT,KKBER:KKBER,KUNNR:KUNNR,NAME1:NAME1,Ckje:Ckje,Fl:Fl,Bf:Bf,BZ:BZ},
dataType: "json",
success: function (data) {
if (data) {
r = 1;
}
}
})
}
alert("保存成功!");
})
</script>
到这里就写完了,有什么意见可以留下你的评论哦!