导入的方式有很多种,下面介绍的方式是在SSM项目中导入Excel文件的具体操作,后台是如何进行文件解析获取的。
首先要了解,我们后台在进行前台的这个文件导入的流程应该是怎么样的?
当前端通过POST提交方式进行上传文件,到服务器中,我们后台首先是要能够获取到服务器里面的文件,在Spirng中,可通过MultipartFile接口对象来获取当前上传的文件,
然后获取到当前文件,进行解析,通过Java输入流的方式获取Excel文件对象,通过MultipartFile对象获取,并存入inputStream中,然后在通过MultipartFile对象获取文件名称,
判断文件扩展名为“.xls还是xlsx的Excel文件”,因为不同扩展名的Excel所用到的解析方法不同,Java里面有一个自带内置解析EXCEL文件的类Workbook,如果没有,需要去导入相对应的
包,对Excel文件进行解析判断,然后再将已存入的inputStream中的Excel解析, workbook= new HSSFWorkbook(inputStream),HSSFWorkbook专门解析.xls文件,然后存入Workbook对象中
再通过workbook里面相对应的方法获取Excel数据行。
具体代码思路:
public Object updateMemberListByExcel(@RequestParam("memberExcel") MultipartFile memberExcel) throws IOException {
ObjectMapper objectMapper =new ObjectMapper();
InputStream inputStream = null;
Map<String, Object> data = new HashMap();
Map<String, Object> map = new HashMap<String, Object>();
String msg=null;
try {
inputStream =memberExcel.getInputStream();//获取前端传递过来的文件对象,存储在“inputStream”中
String fileName = memberExcel.getOriginalFilename();//获取文件名
Workbook workbook =null; //用于存储解析后的Excel文件
//判断文件扩展名为“.xls还是xlsx的Excel文件”,因为不同扩展名的Excel所用到的解析方法不同
String fileType = fileName.substring(fileName.lastIndexOf("."));
if(".xls".equals(fileType)){
workbook= new HSSFWorkbook(inputStream);//HSSFWorkbook专门解析.xls文件
}else if(".xlsx".equals(fileType)){
workbook = new XSSFWorkbook(inputStream);//XSSFWorkbook专门解析.xlsx文件
}
ArrayList<Pxbm>list =new ArrayList<>();
ArrayList<Pxbm>fountList =new ArrayList<>();
ArrayList<Pxbm>spkList =new ArrayList<>();
Sheet sheet; //工作表
Row row; //行
Cell cell; //单元格
Pxbm pxbm1=null;
int count = 0;
int cgcs=0;
int sxl=1;
//循环遍历,获取数据
for(int i=0;i<workbook.getNumberOfSheets();i++){
sheet=workbook.getSheetAt(i);//获取sheet
for(int j=sheet.getFirstRowNum();j<=sheet.getLastRowNum();j++) {//从有数据的第行开始遍历
row = sheet.getRow(j);
if (row != null && row.getFirstCellNum() != j) { //row.getFirstCellNum()!=j的作用是去除首行,即标题行,如果无标题行可将该条件去掉
Pxbm pxbm=new Pxbm();
ArrayList tempList =new ArrayList();
pxbm.setAreaName(row.getCell(0).toString());
pxbm.setXm(row.getCell(1).toString());
pxbm.setSfzhm(row.getCell(2).toString());
pxbm.setDwm(row.getCell(3).toString());
pxbm.setKmm(row.getCell(4).toString());
//上面激素获取到Excel的每一行数据,每一列可根据需求进行操作,这里是已经对整个Excel进行了数据获取,可根据具体业务需求,数据来取值
return map;
}