/**
* 读取excel里面的内容保存为数组
* @param string $file_path 导入文件的路径
* @param array $read_column 要返回的字段
* @return array
* @throws \PhpOffice\PhpSpreadsheet\Exception
* @throws \PhpOffice\PhpSpreadsheet\Reader\Exception
*/
public function readExcel($file_path = '/', $read_column = array())
{
$reader = IOFactory::createReader('Xlsx');
$reader->setReadDataOnly(TRUE);
//载入excel表格
$spreadsheet = $reader->load($file_path);
// 读取第一個工作表
$sheet = $spreadsheet->getSheet(0);
// 取得总行数
$highest_row = $sheet->getHighestRow();
// 取得总列数
$highest_column = $sheet->getHighestColumn();
//读取内容
$data_origin = array();
$data = array();
for ($row = 2; $row <= $highest_row; $row++) { //行号从2开始
for ($column = 'A'; $column <= $highest_column; $column++) { //列数是以A列开始
$str = $sheet->getCell($column . $row)->getValue();
//保存该行的所有列
$data_origin[$column] = $str;
}
//取出指定的数据
foreach ($read_column as $key => $val) {
$data[$row - 2][$val] = $data_origin[$key];
}
}
return $data;
}
//调用示例
public function test(){
//获取表单上传文件 例如上传了a.xslx
$file = Request::file('file');
//生成保存文件名(generate_password 方法生成随机数,getOriginalExtension 方法获取上传文件的扩展名)
$new_name = generate_password(18).'.'.$file->getOriginalExtension();
$save_path = '../runtime/uploads/'.date('Ymd',time()).'/'; //文件保存路径
$info = $file->move($save_path,$new_name);
if($info){
//成功上传后 获取上传的数据
//要获取的数据字段
$read_column = [
'A' => 'real_name',
'B' => 'sex',
'C' => 'grade',
'D' => 'class',
'E' => 'roll_number',
'F' => 'mobile',
'G' => 'id_card',
'H' => 'user_name',
'I' => 'passwd',
];
//读取数据
$data = $this->readExcel($save_path.$info->getFilename(),$read_column);
dump($data);
}
暂无评论