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);
}
浙公网安备 33010602011771号