实现导出导入 Excel

<?php

namespaceapp\cadmin\controller;

usethink\Controller;

usethink\Db;

usethink\Loader;

usePHPExcel;

usePHPExcel_IOFactory;

usePHPExcel_Cell;

usePHPExcel_Writer_Excel5;

usePHPExcel_Writer_Excel2007;

classExcelextendsController

{

publicfunctionindex()

{

return123;

}

publicfunctionexcel(){

if(request()->isPost()){

Loader::import('PHPExcel.PHPExcel');

Loader::import('PHPExcel.PHPExcel.PHPExcel_IOFactory');

Loader::import('PHPExcel.PHPExcel.PHPExcel_Cell');

//实例化PHPExcel

$objPHPExcel=newPHPExcel();

$file=request()->file('excel');

if($file){

$file_types=explode(".",$_FILES['excel']['name']);// ["name"] => string(25) "excel文件名.xls"

$file_type=$file_types[count($file_types)-1];//xls后缀

dump($file_type);

die;

$file_name=$file_types[count($file_types)-2];//xls去后缀的文件名

/*判别是不是.xls文件,判别是不是excel文件*/

if(strtolower($file_type)!="xls"&&strtolower($file_type)!="xlsx"){

echo'不是Excel文件,重新上传';

die;

}

$info=$file->rule('uniqid')->move(ROOT_PATH.'public'.DS.'excel');//上传位置

$path=ROOT_PATH.'public'.DS.'excel'.DS;

$file_path=$path.$info->getSaveName();//上传后的EXCEL路径

//获取上传的excel表格的数据,形成数组

$re=$this->actionRead($file_path,'utf-8');

array_splice($re,1,0);

unset($re[0]);

/*将数组的键改为自定义名称*/

$keys=array('id','username','nickname','password','salt','avatar','email','loginfailure','logintime','createtime','updatetime','token','status');

foreach($reas$i=>$vals){

$re[$i]=array_combine($keys,$vals);

}

//遍历数组写入数据库

for($i=1;$i<count($re);$i++){

$data=$re[$i];

$res=db('admin')->insert($data);

}

}

}

}

publicfunctionactionRead($filename,$encode='utf-8')

{

$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;

}

//导出

publicfunctionout($hid){

$path=dirname(__FILE__);//找到当前脚本所在路径

Loader::import("PHPExcel.PHPExcel");

Loader::import("PHPExcel.PHPExcel.Writer.IWriter");

Loader::import("PHPExcel.PHPExcel.Writer.Abstract");

Loader::import("PHPExcel.PHPExcel.Writer.Excel5");

Loader::import("PHPExcel.PHPExcel.Writer.Excel2007");

Loader::import("PHPExcel.PHPExcel.IOFactory");

$objPHPExcel=newPHPExcel();

$objWriter=newPHPExcel_Writer_Excel5($objPHPExcel);

$objWriter=newPHPExcel_Writer_Excel2007($objPHPExcel);

// 实例化完了之后就先把数据库里面的数据查出来

// $sql = db('coach')->select();

$sql=Db::name('bactivity b')->join("user u","b.uid=u.uid")->where('hid',$hid)->select();

// 设置表头信息

$objPHPExcel->setActiveSheetIndex(0)

->setCellValue('A1','uuname')

->setCellValue('B1','uphone')

->setCellValue('C1','time');

// ->setCellValue('D1', 'password')

// ->setCellValue('E1', 'salt')

// ->setCellValue('F1', 'avatar')

// ->setCellValue('G1', 'email')

// ->setCellValue('H1', 'loginfailure')

// ->setCellValue('I1', 'logintime')

// ->setCellValue('J1', 'createtime')

// ->setCellValue('K1', 'updatetime')

// ->setCellValue('L1', 'token')

// ->setCellValue('M1', 'status');

$i=2;//定义一个i变量,目的是在循环输出数据是控制行数

$count=count($sql);//计算有多少条数据

for($i=2;$i<=$count+1;$i++){

$objPHPExcel->getActiveSheet()->setCellValue('A'.$i,$sql[$i-2]['uuname']);

$objPHPExcel->getActiveSheet()->setCellValue('B'.$i,$sql[$i-2]['uphone']);

$objPHPExcel->getActiveSheet()->setCellValue('C'.$i,$sql[$i-2]['time']);

// $objPHPExcel->getActiveSheet()->setCellValue('D' . $i, $sql[$i-2]['password']);

// $objPHPExcel->getActiveSheet()->setCellValue('E' . $i, $sql[$i-2]['salt']);

// $objPHPExcel->getActiveSheet()->setCellValue('F' . $i, $sql[$i-2]['avatar']);

// $objPHPExcel->getActiveSheet()->setCellValue('G' . $i, $sql[$i-2]['email']);

// $objPHPExcel->getActiveSheet()->setCellValue('H' . $i, $sql[$i-2]['loginfailure']);

// $objPHPExcel->getActiveSheet()->setCellValue('I' . $i, $sql[$i-2]['logintime']);

// $objPHPExcel->getActiveSheet()->setCellValue('J' . $i, $sql[$i-2]['createtime']);

// $objPHPExcel->getActiveSheet()->setCellValue('K' . $i, $sql[$i-2]['updatetime']);

// $objPHPExcel->getActiveSheet()->setCellValue('L' . $i, $sql[$i-2]['token']);

// $objPHPExcel->getActiveSheet()->setCellValue('M' . $i, $sql[$i-2]['status']);

}

$objPHPExcel->getActiveSheet()->setTitle('admin');//设置sheet的名称

$objPHPExcel->setActiveSheetIndex(0);//设置sheet的起始位置

$objWriter=PHPExcel_IOFactory::createWriter($objPHPExcel,'Excel5');//通过PHPExcel_IOFactory的写函数将上面数据写出来

$PHPWriter=PHPExcel_IOFactory::createWriter($objPHPExcel,"Excel2007");

header('Content-Disposition: attachment;filename="活动报名表.xlsx"');

header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');

$PHPWriter->save("php://output");//表示在$path路径下面生成demo.xlsx文件

}

}

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,980评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,178评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,868评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,498评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,492评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,521评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,910评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,569评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,793评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,559评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,639评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,342评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,931评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,904评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,144评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,833评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,350评论 2 342

推荐阅读更多精彩内容