如何在Spring MVC中使用Java导入xls和xlsx文件

在这种方法中,我使用了xssf类,该类​​用于读取xlsx文件,但我们无法对xls文件执行此操作。对于xls,我们需要具有Hssf类。用户可以在那里导入任何格式。我的要求是,有没有可以使用的任何类而不是xssf和hssf来读取两种文件。在我的示例中,我使用了xssf。

  @RequestMapping(value="/import",method = RequestMethod.POST)

public ModelAndView imports(Model model, @RequestParam("excelFile") MultipartFile excelfile){

try {

List<DepartmentModel> lstUser = new ArrayList<>();

int i = 0;

XSSFWorkbook workbook = new XSSFWorkbook(excelfile.getInputStream());

XSSFSheet worksheet = workbook.getSheetAt(0);

while (i <= worksheet.getLastRowNum()) {

DepartmentModel user = new DepartmentModel();

XSSFRow row = worksheet.getRow(i++);

user.setHrName(row.getCell(0).getStringCellValue());

user.setDepartmentName(row.getCell(1).getStringCellValue());

user.setParentDepartment(row.getCell(2).getStringCellValue());

lstUser.add(user);

}

departmentService.updateList(lstUser);

model.addAttribute("lstUser", lstUser);

} catch (Exception e) {

e.printStackTrace();

}

return new ModelAndView("redirect:/listOfDepartment");

}

我有另一种方法,我使用Hssf读取xls文件。但是只有一个导入按钮用户的iam可以上传任何类型的文件xls,xlsx,但是对于导入按钮,我可以有一个动作,例如转到xssf或hssf方法。所以我喜欢要知道有没有可能在单个方法中拥有底部,或者拥有Xssf和Hssf类的属性的任何其他超类。

回答:

对于同时支持HSSF以及XSSF读取和重写*.xls*.xlsx,你会使用WorkbookFactory创建工作簿。这是能够创造WorkbookInputStream*.xls以及的*.xlsx文件。

 FileInputStream fileinputstream = new FileInputStream("pathToExcelFile.xls_or_.xlsx");

Workbook workbook = WorkbookFactory.create(fileinputstream);

然后,您将尽可能地使用Package

org.apache.poi.ss.usermodel包的接口,而不是特殊的HSSFXSSF类的接口。

apache

poi到目前为止,这并不总是可行的。但是,如果不可能,您可以通过instanceof实际使用的对象(HSSFXSSF)进行检测。

而对于写,你会使用相关的适当的方法instanceofWorkbook

  if (workbook instanceof XSSFWorkbook) {

workbook.write(new FileOutputStream("pathToExcelFile.xlsx"));

} else if (workbook instanceof HSSFWorkbook) {

workbook.write(new FileOutputStream("pathToExcelFile.xls"));

}

workbook.close();

截至apache poi 3.17Workbook.write已关闭OutputStream。现在在apache poi

4.0.*版本中,它不再关闭OutputStream。所以我们需要使用

  FileOutputStream out = null;

if (workbook instanceof XSSFWorkbook) out = new FileOutputStream("pathToExcelFile.xlsx");

else if (workbook instanceof HSSFWorkbook) out = new FileOutputStream("pathToExcelFile.xls");

if (out != null) {

workbook.write(out);

out.close();

}

workbook.close();

以上是 如何在Spring MVC中使用Java导入xls和xlsx文件 的全部内容, 来源链接: utcz.com/qa/415536.html

回到顶部