spring boot 将前端传入的MultipartFile转换成inputStream并使用poi读取内部数据
下面是使用poi插件的依赖
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.9</version>
</dependency>
这个看起来东西好像代码多了些(完善)
@RequestMapping(value = "/excel", method = RequestMethod.POST)
public String loadExcel(MultipartFile file, HttpServletRequest request)throws IOException {
// InputStream ips = new FileInputStream("C:\\Users\\Xuliangyong\\Desktop\\aaa.xls");
// InputStream ips = new FileInputStream(file2);
//multipartfile转换成inputstream
InputStream ips = null;
File file1 = null;
file1 = File.createTempFile("temp", null);
file.transferTo(file1);
ips =new FileInputStream(file1);
file1.deleteOnExit();
//-------------------------------读取excel第一行 如何想读取全部excel就再加一重for循环
HSSFWorkbook wb = new HSSFWorkbook(ips);
HSSFSheet sheet = wb.getSheetAt(0);
Iterator ite = sheet.rowIterator();
HSSFRow row = (HSSFRow) ite.next();
System.out.println("");
for (Iterator itet = row.cellIterator(); itet.hasNext(); ) {
HSSFCell cell = (HSSFCell) itet.next();
switch (cell.getCellType()) {
case HSSFCell.CELL_TYPE_BOOLEAN:
//得到Boolean对象的方法
System.out.print(cell.getBooleanCellValue() + " ");
break;
case HSSFCell.CELL_TYPE_NUMERIC:
//先看是否是日期格式
if (HSSFDateUtil.isCellDateFormatted(cell)) {
//读取日期格式
System.out.print(cell.getDateCellValue() + " ");
} else {
//读取数字
System.out.print(cell.getNumericCellValue() + " ");
}
break;
case HSSFCell.CELL_TYPE_FORMULA:
//读取公式
System.out.print(cell.getCellFormula() + " ");
break;
case HSSFCell.CELL_TYPE_STRING:
//读取String
System.out.print(cell.getRichStringCellValue().toString() + " ");
break;
}
}
return "aa";
}
简写
@RequestMapping(value = "/insertData", method = RequestMethod.POST)
public void excelLoad(MultipartFile uploadFile, HttpServletRequest request) throws IOException {
List<String> dataList = new ArrayList<String>();
InputStream ips = null;
File file1 = null;
file1 = File.createTempFile("temp", null);
uploadFile.transferTo(file1);
ips =new FileInputStream(file1);
file1.deleteOnExit();
HSSFWorkbook wb = new HSSFWorkbook(ips);//XSSF支持XLSX格式表格
HSSFSheet sheet = wb.getSheetAt(0);
//就是将所有类型直接读出来,不进行判断数据类型,但是会出现读取电话号码等信息出现E10后缀
//所以就将所有数据都以string读出就行了 //sheet.getRow(i).getCell(j).setCellType(XSSFCell.CELL_TYPE_STRING); 这样就能解决了
//获得总列数
int coloumNum=sheet.getRow(0).getPhysicalNumberOfCells();
int rowNum=sheet.getLastRowNum();//获得总行数
for (int i = 0; i <= rowNum; i++) {
for (int j = 0; j < coloumNum; j++) {
sheet.getRow(i).getCell(j).setCellType(XSSFCell.CELL_TYPE_STRING);
// dataList.add(sheet.getRow(i).getCell(j).toString());
dataList.add(sheet.getRow(i).getCell(j).getStringCellValue());
}
// dataList中每次循环都是存着一行数据
excelToMysqlService.lushuju(dataList,userId);
dataList.clear();
}
}
这样是不是简单很多了