由于项目需要,最近看了看对Excel、Word的读取
此处是针对MultipartFile格式的操作
/**
* 读取XLS格式的excel
* @param file
* @return
* @throws IOException
*/
public List<Brainstorm> readXLS(MultipartFile file) throws IOException {
List<Brainstorm> list =new ArrayList<>();
InputStream inputStream = file.getInputStream();
HSSFWorkbook workbook = new HSSFWorkbook(inputStream);
//读取第一张sheet
HSSFSheet sheet = workbook.getSheetAt(0);
String errorMsg="";
//遍历每一行Excel获取内容
for (int rowNum = 1; rowNum <= sheet.getLastRowNum(); rowNum++) {
HSSFRow row = sheet.getRow(rowNum);
if (row!=null){
Brainstorm brainstorm = new Brainstorm();
//使用了getStringCellValue()方法来获取值,POI会判断单元格的类型,如果非字符串类型就会抛出上面的异常。
//所以先使用setCellType()方法先将该单元格的类型设置为STRING
//然后poi会根据字符串读取它
try {
row.getCell(0).setCellType(CellType.STRING);
row.getCell(4).setCellType(CellType.STRING);
row.getCell(5).setCellType(CellType.STRING);
brainstorm.setNumber(row.getCell(0).getStringCellValue());
brainstorm.setName(row.getCell(1).getStringCellValue());
brainstorm.setThumbNumber(Integer.parseInt(row.getCell(2).getStringCellValue()));
brainstorm.setTime(row.getCell(3).getStringCellValue());
brainstorm.setText(row.getCell(4).getStringCellValue());
list.add(brainstorm);
}catch (Exception e) {
return null;
}
}
}
return list;
}
/**
* 读取XLSX格式的excel
* @param file
* @return
* @throws IOException
*/
public List<Brainstorm> readXLSX(MultipartFile file) throws IOException {
ArrayList<Brainstorm> list = new ArrayList<>();
InputStream inputStream = file.getInputStream();
XSSFWorkbook Workbook = new XSSFWorkbook(inputStream);
XSSFSheet sheet = Workbook.getSheetAt(0);
int lastRowNum = sheet.getLastRowNum();
for (int rowNum = 1; rowNum <= lastRowNum; rowNum++) {
XSSFRow row = sheet.getRow(rowNum);
if (row!=null){
Brainstorm brainstorm = new Brainstorm();
//使用了getStringCellValue()方法来获取值,POI会判断单元格的类型,如果非字符串类型就会抛出上面的异常。
//所以先使用setCellType()方法先将该单元格的类型设置为STRING
//然后poi会根据字符串读取它
try {
row.getCell(0).setCellType(CellType.STRING);
row.getCell(2).setCellType(CellType.STRING);
row.getCell(3).setCellType(CellType.STRING);
brainstorm.setNumber(row.getCell(0).getStringCellValue());
brainstorm.setName(row.getCell(1).getStringCellValue());
Double v = Double.parseDouble(row.getCell(2).getStringCellValue());
brainstorm.setThumbNumber(v.intValue());
brainstorm.setTime(row.getCell(3).getStringCellValue());
brainstorm.setText(row.getCell(4).getStringCellValue());
}catch (Exception e) {
return null;
}
list.add(brainstorm);
}
}
return list;
}
/**
* @param file
* @return
* @throws IOException
*/
public BrainstormVO readBrainstormWord(@RequestPart(value = "file") MultipartFile file) throws IOException {
InputStream inputStream = file.getInputStream();
String fileName = file.getOriginalFilename();
String suff = fileName.substring(fileName.lastIndexOf(".") + 1);
String content = "";
String word1 = "docx",word2 = "doc";
if (suff.equals(word1)) {
XWPFDocument xdoc = new XWPFDocument(inputStream);
XWPFWordExtractor extractor = new XWPFWordExtractor(xdoc);
content = extractor.getText();
extractor.close();
} else if (suff.equals(word2)) {
WordExtractor ex = new WordExtractor(inputStream);
content = ex.getText();
System.out.println(content);
ex.close();
} else {
System.out.println("此文件不是word文件");
}
String[] split = content.split("\n");
BrainstormVO brainstormVO = new BrainstormVO();
try {
String[] split2 = split[0].split(":");
brainstormVO.setTitle(split2[1]);
brainstormVO.setClasses(changeString(split[1]));
brainstormVO.setCurriculum(changeString(split[2]));
brainstormVO.setInvitationCode(changeString(split[3]));
brainstormVO.setGrouping(changeString(split[5]));
brainstormVO.setValue(changeString(split[6]));
brainstormVO.setBegin((changeString(split[7])));
brainstormVO.setOut(changeString(split[8]));
brainstormVO.setNum(changeString(split[9]));
}catch (Exception e) {
return null;
}
return brainstormVO;
}
特殊说明:
在读取文档的时候,我使用了实体类一一对应,所以不具有适配性,但是思路大致一致。