@Component
public class ReadExcelUtil {
private ArrayList<String> excelAllowType = new ArrayList<String>(){{
add("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
add("application/vnd.ms-excel");
add("application/vnd.ms-excel.sheet.macroenabled.12");
}};
public String readFileContent(MultipartFile file, Integer titleRowNum, Integer contentRowNum) throws Exception {
String contentType = file.getContentType();
if("text/plain".equals(contentType)){
return readTxt(file);
}else if(excelAllowType.contains(contentType)){
if (titleRowNum == null || contentRowNum == null) {
throw new Exception("参数错误!");
}
return readExcel(file, titleRowNum, contentRowNum);
}else {
throw new Exception("非法的文件格式!");
}
}
public String readExcel(MultipartFile excelFile, int titleRowNum, int contentRowNum) throws Exception {
String contentType = excelFile.getContentType();
if(!excelAllowType.contains(contentType)){
throw new Exception("非法的文件格式!");
}
DataFormatter formatter = new DataFormatter();
ArrayList<Object> list = new ArrayList<>();
InputStream inputStream = null;
try {
inputStream = excelFile.getInputStream();
Workbook sheets = WorkbookFactory.create(inputStream);
for (Sheet sheet : sheets) {
ArrayList<Object> sheetList = new ArrayList<>();
Row rowCells = sheet.getRow(titleRowNum);
ArrayList<String> titles = new ArrayList<>();
if(rowCells == null){
continue;
}
for (int i = 0; i < rowCells.getLastCellNum(); i++) {
titles.add(getCellValue(sheet, formatter, rowCells.getCell(i)));
}
for(int x = contentRowNum; x <= sheet.getLastRowNum(); x++){
Row row = sheet.getRow(x);
if(row != null){
HashMap<String, Object> map = new HashMap<>();
for(int i = 0; i < row.getLastCellNum(); i++){
map.put(titles.get(i), getCellValue(sheet, formatter, row.getCell(i)));
}
sheetList.add(map);
}
}
list.add(sheetList);
}
ObjectMapper objectMapper = new ObjectMapper();
if(list != null && list.size() == 1){
return objectMapper.writeValueAsString(list.get(0));
}
return objectMapper.writeValueAsString(list);
} finally {
if(inputStream != null){
inputStream.close();
}
}
}
public String readTxt(MultipartFile txtFile) throws IOException {
StringBuilder result = new StringBuilder();
InputStream inputStream = null;
InputStreamReader inputStreamReader = null;
BufferedReader bufferedReader = null;
try {
inputStream = txtFile.getInputStream();
inputStreamReader = new InputStreamReader(inputStream);
bufferedReader = new BufferedReader(inputStreamReader);
String str;
while ((str = bufferedReader.readLine()) != null) {
result.append(str);
}
return result.toString();
}finally {
if(bufferedReader != null){
bufferedReader.close();
}
if(inputStreamReader != null){
inputStreamReader.close();
}
if(inputStream != null){
inputStream.close();
}
}
}
public String getCellValue(Sheet sheet, DataFormatter formatter, Cell cell){
List<CellRangeAddress> mergedRegions = sheet.getMergedRegions();
for (CellRangeAddress mergedRegion : mergedRegions) {
if(mergedRegion.isInRange(cell)){
return formatter.formatCellValue(sheet.getRow(mergedRegion.getFirstRow())
.getCell(mergedRegion.getFirstColumn()));
}
}
return formatter.formatCellValue(cell);
}
}
application.properties
lurenwu.export.ground-info-excel-allow-type=application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,application/vnd.ms-excel,application/vnd.ms-excel.sheet.macroenabled.12