-
平常开发中,经常会遇到有一些只是查询或者直接参与计算的参考数据。如果存储在数据库中,后续的更新会比较麻烦。所以建议可以直接使用excel文件,将参考数据以表格的形式存储在excel文件中。
-
参考文件可以类似于这种表格。
-
读取参考文件的代码如下。
-
可以读取已经路径下的excel文件中,所有工作簿中的所有表格数据,将其生成map集合,以便查询以及获取。同时可以将数据在项目启动时,加载至全局缓存中,方便书写一下计算方法或者查询方法,增加代码的耦合度。
public class FileFormat {
/**
* 读取excel文件<br>
* 后缀名为xls的excel文件
* @param filePath 文件绝对路径
* @return 文件内容的map集合
*/
public static Map<String, Map<String, Map<String, String>>> readExcel(String filePath) throws IOException {
FileInputStream in = new FileInputStream(filePath);
Map<String, Map<String, Map<String, String>>> result = new HashMap<String, Map<String, Map<String, String>>>();
HSSFWorkbook workbook = new HSSFWorkbook(in);
for(int sheetIndex=0;sheetIndex<workbook.getNumberOfSheets();sheetIndex++){
Map<String, Map<String, String>> re1 = new HashMap<String, Map<String, String>>();
HSSFSheet sheet = workbook.getSheetAt(sheetIndex);
HSSFRow row0 =sheet.getRow(0);
for(int rowIndex=1;rowIndex<=sheet.getLastRowNum();rowIndex++){
HSSFRow row = sheet.getRow(rowIndex);
String key1 = row.getCell(0).getRichStringCellValue().getString();
if(row==null){
continue;
}
Map<String, String> re2 = new HashMap<>();
for(int cellnum=1;cellnum<row.getLastCellNum();cellnum++){
HSSFCell cell = row.getCell(cellnum);
if(cell!=null){
cell.setCellType(Cell.CELL_TYPE_STRING);
re2.put(row0.getCell(cellnum).getRichStringCellValue().getString()+"", cell.getRichStringCellValue().getString()+"");
}
}
re1.put(key1, re2);
}
result.put(sheet.getSheetName(), re1);
}
workbook.close();
return result;
}
}