您的位置:首页 > 编程语言 > PHP开发

tp-导入

2015-10-09 15:22 841 查看
我一直忘记了,我上次不知道从哪个地方找到一个导入的功能,今天归纳一下哒。

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下来,下次还可以用嘛。

上面引用类的路径图:





那个所需要的类我已经打包放在百度云上面了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: