tp3.2excel导入mysql_tp3.2 利用PHPExcel导入excel文件并存入数据库

之前写了导出的分享帖,现在写一下导入的方法。我用的是mysql数据库。

具体思路:1.上传需要导入的文件。

2.利用PHPExcel处理导入的文件。

3.处理PHPExcel转换的数组,并存入数据库。

直接把源码都贴上。//导入excel文件

public function assign_excel()

{

$data = I('post.') ? I('post.') : I('get.');

if(IS_File){

if (!empty ( $_FILES)) {

// 上传文件

$upload = new \Think\Upload();                      // 实例化上传类

$upload->maxSize = 10485760;                 // 设置附件上传大小

$upload->exts = array('xls', 'xlsx');       // 设置附件上传类型

$upload->rootPath = './Uploads/';             // 设置附件上传根目录

$upload->autoSub = false;                         // 将自动生成以photo后面加时间的形式文件夹,关闭

$info = $upload->upload();                                   // 上传文件

$exts = $info['file']['ext'];                                 // 获取文件后缀

$filename = $upload->rootPath . $info['file']['savename'];        // 生成文件路径名

if (!$info) {                                                     // 上传错误提示错误信息

$this->error($upload->getError());

} else {                                                           // 上传成功

import("Vendor.excel.PHPExcel");                             // 导入PHPExcel类库,因为PHPExcel没有用命名空间,只能inport导入

//$PHPExcel = new \PHPExcel();                                 // 创建PHPExcel对象,注意,不能少了\

if ($exts == 'xls') {                                        // 如果excel文件后缀名为.xls,导入这个类

import("Vendor.excel.PHPExcel.Reader.Excel5");

$PHPReader = new \PHPExcel_Reader_Excel5();

} else

if ($exts == 'xlsx') {

import("Vendor.excel.PHPExcel.Reader.Excel2007");

$PHPReader = new \PHPExcel_Reader_Excel2007();

}

$PHPExcel = $PHPReader->load($filename);    // 载入文件

$currentSheet = $PHPExcel->getSheet(0);        // 获取表中的第一个工作表,如果要获取第二个,把0改为1,依次类推

$allColumn = $currentSheet->getHighestColumn();   // 获取总列数

$allRow = $currentSheet->getHighestRow();              // 获取总行数

for ($currentRow = 0; $currentRow <= $allRow; $currentRow++) {// 循环获取表中的数据,$currentRow表示当前行,从哪行开始读取数据,索引值从0开始

for ($currentColumn = 'A'; $currentColumn <= $allColumn; $currentColumn++) {// 从哪列开始,A表示第一列

$address = $currentColumn . $currentRow;             // 数据坐标

$ExlData[$currentRow][$currentColumn] = $currentSheet->getCell($address)->getValue();// 读取到的数据,保存到数组$ExlData中

}

}

unset($ExlData[0]);//清楚数组0的空值,这一组没有数据

unset($ExlData[1]);//excel表头,第一行

ini_set('max_execution_time', '500');//设置导入最大时长。

$arr = array_values($ExlData);//重新排序数组键名

foreach($arr as $k=>$v){

if($v["A"] != null){//不导入空值

//处理时间格式错误

import("Vendor.excel.PHPExcel.Shared.Date");

$shared = new \PHPExcel_Shared_Date();

if(trim($v["J"])=="通过"){$zt = 2;}else{$zt = 1;}

if(trim($v["L"])=="流标"){$zb = 0;}else{$zb = 1;}

if($v["C"] !=null){$c = date("Y-m-d",$shared ->ExcelToPHP($v["C"]));}else{$c=null;}

if($v["D"] !=null){$d = date("Y-m-d",$shared ->ExcelToPHP($v["D"]));}else{$d=null;}

$data['a_user'] = $v["A"];

$data['a_xh'] = $v["B"];

$data['a_btime'] =$c;

$data['a_itime'] =$d;

$data['a_dh'] = $v["E"];

$data['a_content'] = $v["F"];

$data['a_khphone'] = $v["G"];//客户联系方式

$data['a_dtime'] = $v["H"];

$data['a_fzt'] = $v["I"];//完成情况

$data['a_zt'] = $zt;//状态,是否审核

$data['a_dprice'] = $v["K"];

$data['a_zb'] =$zb;

$data['a_ftime'] = date("Y-m-d ",$shared ->ExcelToPHP($v["M"]));

$data['a_bz'] = $v["N"];

$data['a_utime'] = date("Y-m-d H:i:s",time());

//dump($data);exit();

$re = M("commit")->add($data);//导入数据库

if($re){

unset($data);

}else{

die("");

}

}else{

die("");

}

}

}

}

}

//删除单条

if(I("get.del") != null){

$map['a_id'] = I("get.a_id");

M("commit")->where($map)->delete();

}

//后台管理导入任务的价格统计条件

$map2["a_zb"] = array("neq" ,0);

$map2["a_zt"] = 2;

//分页

$count = M("commit")->count(); // 查詢滿足要求的總記錄數

$p = getpage($count, 20);

$list = M("commit")->order('a_utime')->limit($p->firstRow, $p->listRows)->select();

$price =M("commit")->where($map2)->sum("a_dprice");//统计检索出任务的价格

foreach ($data as $key => $val) {// 保持分页参数

$p->parameter[$key] = urlencode($val);

}

$this->assign('data', $data);// 参数保持

$this->assign('price', $price);

$this->assign('list', $list); // 賦值數據集

$this->assign('page', $p->show()); // 賦值分頁輸出

$this->display("assign/assign_excel");

}这里有很多坑,请注意。

1.在运行时如果报未发现xxx类,找到对应位置,更改文件名为xxx.class.php。如,未发现PHPExcel_Reader_Excel5类。则找到位置,把这个类文件名改为Excel5.class.php

2.一定要注意转换的数组,最好打印看一下。dump($ExlData);

3.最重要的是时间,一开始老是发现时间不对。phpexcel有函数转换为php的时

间戳函数。//处理时间格式错误

import("Vendor.excel.PHPExcel.Shared.Date");

$shared = new \PHPExcel_Shared_Date();

if($v["C"] !=null){$c = date("Y-m-d",$shared ->ExcelToPHP($v["C"]));}else{$c=null;}

if($v["D"] !=null){$d = date("Y-m-d",$shared ->ExcelToPHP($v["D"]));}else{$d=null;}自己也是小白一枚,有什么问题希望大伙多多指教!

phpexcel源码百度云:http://pan.baidu.com/s/1nuEvJz7

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值