tp-导入
2015-10-09 15:22
841 查看
我一直忘记了,我上次不知道从哪个地方找到一个导入的功能,今天归纳一下哒。
excel的格式基本是这样子的:
controller代码:
这个代码好长类:还要引入tp的导入类
哈哈 其实没有这么长的啦,是我懒,就所有的都copy下来,下次还可以用嘛。
上面引用类的路径图:
那个所需要的类我已经打包放在百度云上面了
excel的格式基本是这样子的:
//html代码: <include file="Common:left" /> <!-- 主容器 start --> <div id="container" class="container-fluid"> <div class="row-fluid"> <!-- 主内容 start --> <div id="content" class="span10"> <!-- 标题 start --> <div class="pageTit page-header"> <h1>导入产品</h1> <div class="opt"> <a class="btn btn-info" href="{:U('admin/goods/index')}">返回产品列表</a> </div> </div> <!-- 标题 end --> <!-- 内容区块 start --> <div class="formBox"> <form id="addform" action="{:U('Game/Code/upload')}" method="post" enctype="multipart/form-data"> <input name="id" type="hidden" value="{$goods_info.id}" /> <div class="control-group"> <label>Excel表格:</label> <input type="file" name="excelData" value="" datatype="*4-50" nullmsg="请填写产品!" errormsg="不能少于4个字符大于50个汉字"/> <span class="Validform_checktip"></span> </div> <div class="control-group"> <img style="display:none;" src="images/loading.gif" /> <input type="submit" class="btn btn-primary Sub" value="导入" /> </div> </form> </div> <!-- 内容区块 end --> </div> </div> <!-- 脚部 end --> </body> </html>
controller代码:
这个代码好长类:还要引入tp的导入类
//导入数据页面 public function import() { $this->display('daoru'); } //上传方法 public function upload() { header("Content-Type:text/html;charset=utf-8"); $upload = new \Think\Upload();// 实例化上传类 $upload->maxSize = 3145728 ;// 设置附件上传大小 $upload->exts = array('xls', 'xlsx');// 设置附件上传类 $upload->savePath = '/'; // 设置附件上传目录 // 上传文件 $info = $upload->uploadOne($_FILES['excelData']); $filename = './Uploads'.$info['savepath'].$info['savename']; $exts = $info['ext']; //print_r($info);exit; if(!$info) {// 上传错误提示错误信息 $this->error($upload->getError()); }else{// 上传成功 $this->goods_import($filename, $exts); } } //导入数据方法 protected function goods_import($filename, $exts='xls') { //导入PHPExcel类库,因为PHPExcel没有用命名空间,只能inport导入 import("Org.Util.PHPExcel"); //创建PHPExcel对象,注意,不能少了\ $PHPExcel=new \PHPExcel(); //如果excel文件后缀名为.xls,导入这个类 if($exts == 'xls'){ import("Org.Util.PHPExcel.Reader.Excel5"); $PHPReader=new \PHPExcel_Reader_Excel5(); }else if($exts == 'xlsx'){ import("Org.Util.PHPExcel.Reader.Excel2007"); $PHPReader=new \PHPExcel_Reader_Excel2007(); } //载入文件 $PHPExcel=$PHPReader->load($filename); //获取表中的第一个工作表,如果要获取第二个,把0改为1,依次类推 $currentSheet=$PHPExcel->getSheet(0); //获取总列数 $allColumn=$currentSheet->getHighestColumn(); //获取总行数 $allRow=$currentSheet->getHighestRow(); //循环获取表中的数据,$currentRow表示当前行,从哪行开始读取数据,索引值从0开始 for($currentRow=1;$currentRow<=$allRow;$currentRow++){ //从哪列开始,A表示第一列 for($currentColumn='A';$currentColumn<=$allColumn;$currentColumn++){ //数据坐标 $address=$currentColumn.$currentRow; //读取到的数据,保存到数组$arr中 $data[$currentRow][$currentColumn]=$currentSheet->getCell($address)->getValue(); } } $this->save_import($data); } //保存导入数据 public function save_import($data) { //print_r($data);exit; $Goods = M('zj_code'); $add_time = date('Y-m-d H:i:s', time()); foreach ($data as $k=>$v){ if($k >= 2){ $theNum=$v['A']; $info[$k-2]['theNum'] = $theNum; $codename=$v['B']; $info[$k-2]['codename'] = '珠江啤酒专享星星2号500元优惠券2'; $code=$v['C']; $info[$k-2]['code'] = $code; $info[$k-2]['codestarttime'] = strtotime('2015/09/30 00:00:00'); $info[$k-2]['codeendtime'] = strtotime('2016/6/30 23:59:59'); //print_r($info);exit; $result = $Goods->add($info[$k-2]); } } if($result){ $this->success('产品导入成功', 'Game/Code/index'); }else{ $this->error('产品导入失败'); } //print_r($info); } //导出数据方法 protected function goods_export($goods_list=array()) { //print_r($goods_list);exit; $goods_list = $goods_list; $data = array(); foreach ($goods_list as $k=>$goods_info){ $data[$k][id] = $goods_info['id']; $data[$k][title] = $goods_info['title']; $data[$k][PNO] = $goods_info['PNO']; $data[$k][old_PNO] = $goods_info['old_PNO']; $data[$k][price] = $goods_info['price']; $data[$k][brand_id] = get_title('brand',$goods_info['brand_id']); $data[$k][category_id] = get_title('category',$goods_info['category_id']); $data[$k][type_ids] = get_type_title($goods_info['id']); $data[$k][add_time] = $goods_info['add_time']; } //print_r($goods_list); //print_r($data);exit; foreach ($data as $field=>$v){ if($field == 'id'){ $headArr[]='产品ID'; } if($field == 'title'){ $headArr[]='产品名称'; } if($field == 'PNO'){ $headArr[]='零件号'; } if($field == 'old_PNO'){ $headArr[]='原厂参考零件号'; } if($field == 'price'){ $headArr[]='原厂参考面价'; } if($field == 'type_ids'){ $headArr[]='品牌'; } if($field == 'brand_id'){ $headArr[]='类别'; } if($field == 'category_id'){ $headArr[]='适用机型'; } if($field == 'add_time'){ $headArr[]='添加时间'; } } $filename="goods_list"; $this->getExcel($filename,$headArr,$data); } private function getExcel($fileName,$headArr,$data){ //导入PHPExcel类库,因为PHPExcel没有用命名空间,只能inport导入 import("Org.Util.PHPExcel"); import("Org.Util.PHPExcel.Writer.Excel5"); import("Org.Util.PHPExcel.IOFactory.php"); $date = date("Y_m_d",time()); $fileName .= "_{$date}.xls"; //创建PHPExcel对象,注意,不能少了\ $objPHPExcel = new \PHPExcel(); $objProps = $objPHPExcel->getProperties(); //设置表头 $key = ord("A"); //print_r($headArr);exit; foreach($headArr as $v){ $colum = chr($key); $objPHPExcel->setActiveSheetIndex(0) ->setCellValue($colum.'1', $v); $objPHPExcel->setActiveSheetIndex(0) ->setCellValue($colum.'1', $v); $key += 1; } $column = 2; $objActSheet = $objPHPExcel->getActiveSheet(); //print_r($data);exit; foreach($data as $key => $rows){ //行写入 $span = ord("A"); foreach($rows as $keyName=>$value){// 列写入 $j = chr($span); $objActSheet->setCellValue($j.$column, $value); $span++; } $column++; } $fileName = iconv("utf-8", "gb2312", $fileName); //重命名表 //$objPHPExcel->getActiveSheet()->setTitle('test'); //设置活动单指数到第一个表,所以Excel打开这是第一个表 $objPHPExcel->setActiveSheetIndex(0); header('Content-Type: application/vnd.ms-excel'); header("Content-Disposition: attachment;filename=\"$fileName\""); header('Cache-Control: max-age=0'); $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); $objWriter->save('php://output'); //文件通过浏览器下载 exit; }
哈哈 其实没有这么长的啦,是我懒,就所有的都copy下来,下次还可以用嘛。
上面引用类的路径图:
那个所需要的类我已经打包放在百度云上面了
相关文章推荐
- php一些单选、复选框的默认选择方法
- js和php几种编码方法对特殊符号的编码对照表
- php学习基础篇之mysql DDL DML 2
- 33个超级有用必须要收藏的PHP代码样例
- phpstorm 中文版 支持BUG调试 IDE
- php 操作数组 (合并,拆分,追加,查找,删除等)
- PHP+table生成柱状图
- 一个最符合中国国情的工作流设计参考(包括PHP实现)
- php中删除、清空session的方式总结
- PHP+JS动态显示服务器时间,本地时间
- PHP MYSQL数据字典
- ThinkPHP去除url中的index.php
- PHP中获取当前页面的完整URL
- ftp主动与被动
- PHP中htmlentities,htmlspecialchars,urlencode和base64_encode的使用及区别
- PHP正则表达式的快速学习方法
- ThinkPHP让../Public在模板不解析(直接输出)的方法[原创]_php实例_脚本之家
- PHP异步执行技巧
- Xampp+Chrome+Sublime Text3+Xdebug调试PHP代码
- PHP中Closure类的使用方法及详解