導入的方式有很多種,下面介紹的方式是在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;
}