有的时候发来数据的文件是excel格式的,而又需要把它们转成json格式传递给服务端
主要分为:1.获取excel文件 2.获取文件的工作表sheet 3.获取指定单元格的数据 (该版本属于逻辑简单好理解的)4.获取的值转成json
主要使用的jar包的坐标:(我创建的是maven项目),而解析json的包就是 org.json
分步骤来是依次封装的几个方法:
第一步:获取excel文件和工作表sheet ,默认获取第一个sheet,也可以根据工作需要修改参数获取其他的sheet
/*
* 该方法用于获取指定excel文件的工作表
*/
private static Sheet getSheet(String path) {
File file = new File("Excel文件所在的位置");
Workbook workbook = null;
try {
workbook = WorkbookFactory.create(file);
} catch (Exception e) {
e.printStackTrace();
}
Sheet sheet = workbook.getSheetAt(0);
return sheet;
}
第二步:获取指定单元格的数据,该方法中两个getRow()是因为我需要一次性获取同一列两个单元格的值,循环是为了可以一次性获取若干个列
/*
* 该方法用于获取工作表中一定范围单元格的值
* 参数 start表示起始单元格所在位置,end表示结束单元格所在位置
*/
private static Map getValue(int start,int end) {
Sheet sheet = getSheet("");
Map map = new HashMap<>();
for(int i=start;i<=end;i++){
//获取标题最底行
String a = sheet.getRow(3).getCell(i-1).getStringCellValue();
//获取材料所在行
String b = sheet.getRow(5).getCell(i-1).getStringCellValue();
map.put(a,b);
}
return map;
}
返回值格式是map格式,因为后续的转json操作是直接把map转成json格式
/*
* 该方法用于把map数据转为json格式
*/
private static JSONObject MapToJson(Map map) {
JSONObject jsonObject = new JSONObject(map);
return jsonObject;
}
在不同的节点put值时,我是这样做的,好理解。调用了上面提到的方法
最后可以打印下 j ,把结果放到json在线检测上看一下是不是正确
注意的点:
这是我设计的比较简单的,其中不包括 如:
合并单元格验证-------我是直接按照行列坐标读取值,比较死板
数据先装进Map再转成json--------我是一节一节的先转成json,再拼接组装,比较重复
……
LG