excel导入数据

private function dataImport($filename, $exts = 'xls')
    {
        //导入PHPExcel类库,因为PHPExcel没有用命名空间,只能inport导入
        vendor('PHPExcel.PHPExcel');
        //创建PHPExcel对象,注意,不能少了
        $PHPExcel = new \PHPExcel();
        if ($exts == 'xls') {
            Vendor('phpexcel.PHPExcel.Reader.Excel5');
            $PHPReader = new \PHPExcel_Reader_Excel5();
        } else if ($exts == 'xlsx') {
            Vendor('phpexcel.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 = 2; $currentRow <= $allRow; $currentRow++) {
            //从哪列开始,A表示第一列
            for ($currentColumn = 'A'; $currentColumn <= $allColumn; $currentColumn++) {
                //数据坐标
                $address = $currentColumn . $currentRow;
                //读取到的数据,保存到数组$data中
                $cell = $currentSheet->getCell($address)->getValue();
                $data[$currentRow - 1][$currentColumn] = $cell;
            }
        }
//        p($data);
        //写入数据库操作
        $this->insertData($data);
    }

以上是将excel表的数据,取出来,放在$data数组里面;

private function insertData($data){
        $main = M('tcm_property_main','js_',C('MAMI_ADMIN_TEST'));
        $eff = M('tcm_effect_characteristic','js_',C('MAMI_ADMIN_TEST'));
//        $info = $main->where(['tcm_id'=>1])->find();
        if(!empty($data)){
            foreach($data as $k=>$v){
                $main->startTrans();
                $eff->startTrans();
                $post['tcm_name'] = $v['A'];//中药名称
                $post['tcm_pinyin_name'] = $v['B'];//中药拼音
                $post['tcm_alias_name'] = $v['C'];//中药别名
                $post['tcm_price'] = $v['D'];//中药价格
                $post['tcm_class'] = $v['E'];//中药分类
                $post['tcm_orgin'] = $v['F'];//中药来源
                $post['tcm_madein'] =$v['G'];//中药产地
                $post['tcm_max_dosage'] = $v['H'];//中药用量
                $res = $main->add($post);
                $epost['tcm_id'] = $res;
                $epost['tcm_fourprop'] = $v['I'];//四气
                $epost['tcm_fivetastes'] = $v['J'];//五味
                $epost['tcm_channel_tropism'] = str_replace([',','、',',',',','、'],',',$v['K']);//归经
                $epost['tcm_fun'] = $v['L'];//功效
                $epost['tcm_use'] = $v['M'];//用法
                $epost['tcm_indication'] = $v['N'];//主治
                $res2 = $eff->add($epost);
                if($res !== false && $res2 !== false){
                    $main->commit();
                    $eff->commit();
                }else{
                    $main->rollback();
                    $eff->rollback();
                }
            }
        }
        return true;
    }

  然后将这些数据插入数据库;

str_replace();对字符串中的一个或多个数据进行字符串替换;

导入数据的步骤:

1、将excel表中的路径排列好,然后根据phpexcel库,读取数据的方法,将里面的数据按照列,行的方式读取出来,并组成一个二维数组;

2、将二维数组的数据插入到数据库,并数组的字段,ABCDE.....,按照数据的结构,进行赋值,然后通过事务插入到数据库;

private function dataImport($filename, $exts = 'xls')
{
//导入PHPExcel类库,因为PHPExcel没有用命名空间,只能inport导入
vendor('PHPExcel.PHPExcel');
//创建PHPExcel对象,注意,不能少了
$PHPExcel = new \PHPExcel();
if ($exts == 'xls') {
Vendor('phpexcel.PHPExcel.Reader.Excel5');
$PHPReader = new \PHPExcel_Reader_Excel5();
} else if ($exts == 'xlsx') {
Vendor('phpexcel.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 = 2; $currentRow <= $allRow; $currentRow++) {
//从哪列开始,A表示第一列
for ($currentColumn = 'A'; $currentColumn <= $allColumn; $currentColumn++) {
//数据坐标
$address = $currentColumn . $currentRow;
//读取到的数据,保存到数组$data中
$cell = $currentSheet->getCell($address)->getValue();
$data[$currentRow - 1][$currentColumn] = $cell;
}
}
// p($data);
//写入数据库操作
$this->insertData($data);
}
posted on 2018-12-27 16:18  IT狼狼  阅读(351)  评论(0)    收藏  举报