PHP上传多个Excel表格里的数据到数据库然后在页面显示

//上传excel
public function uploadExcel()
{
//获取当前的请求信息,或者使用助手函数request()
$request = \think\Request::instance();
//引入导入Excel第三方库
vendor('PHPExcel.Classes.PHPExcel.PHPExcel');
//实例化PHPExcel类
$excel = new \PHPExcel();
//获得上传文件的信息,file里面的是input框里的名字
$files = request()->file('files');
foreach ($files as $file) {
//数据为空返回错误
if (empty($file)) {
//退出当前循环,继续下一循环
continue;
}
//得到文件原名
$fileInfo=$file->getInfo();
$fileOldName=strtolower($fileInfo['name']);

//移动到框架应用根目录/public/uploads/目录下
$info = $file->validate(['ext' => 'xlsx,xls'])->move(ROOT_PATH.'public'.DS.'uploads');
//获取上传到后台的文件名
$fileName = $info->getSaveName();
//获取文件路径
$filePath = ROOT_PATH.'public'.DIRECTORY_SEPARATOR.'uploads'.DIRECTORY_SEPARATOR.$fileName;
//获取文件后缀
$suffix = $info->getExtension();
//判断哪种类型
if ($suffix == 'xlsx') {
$reader = \PHPExcel_IOFactory::createReader('Excel2007');
} else {
$reader = PHPExcel_IOFactory::createReader('Excel5');
}
//表格列名
$cellName = array('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'AA', 'AB', 'AC', 'AD', 'AE', 'AF', 'AG', 'AH', 'AI', 'AJ', 'AK', 'AL', 'AM', 'AN', 'AO', 'AP', 'AQ', 'AR', 'AS', 'AT', 'AU', 'AV', 'AW', 'AX', 'AY', 'AZ');

//载入excel文件
$excel = $reader->load("$filePath", $encode = 'utf-8');
//读取第一张表
$sheet = $excel->getSheet(0);
//获取总行数
$row_num = $sheet->getHighestRow();
//获取总列数
//$col_num = $sheet->getHighestColumn();
$columnH = $sheet->getHighestColumn(); //取得最大的列号
$columnCnt = array_search($columnH, $cellName);
//获取合并单元格信息
$info=$sheet->getMergeCells();
$data = []; //数组形式获取表格数据
for($_row=1; $_row<=$row_num; $_row++){ //读取内容
for($_column=0; $_column<=$columnCnt; $_column++){
//根据表格的行和列得到表格的值
$cellId = $cellName[$_column].$_row;
$cellValue = $sheet->getCell($cellId)->getValue();

//富文本转换字符串
if(is_object($cellValue)){
$cellValue = $cellValue->__toString();
}
$rkey=$_row-1;
$data[$rkey][$cellName[$_column]] = $cellValue;
}

}

//转化成json字符串
$str=json_encode($data);
$arr[]=['tableContent'=>$str,'tableName'=>$fileOldName];
}
//批量插入数据
$res=Db::table('bbs_name')->insertAll($arr);
}

//从数据库中得到Excel的数据
public function getExcel()
{
$data = Db::name('name')->select();
dump(json_encode($data));
}
posted @ 2019-05-17 10:53  ymd666  阅读(1028)  评论(0编辑  收藏  举报