Collection<Map<Integer, Object>> dataMaps = InfluxdbClient.ToListMapCSV(query);
ArrayList<Map<Integer, Object>> list = new ArrayList<>(dataMaps);
ExcelWriter excelWriter = EasyExcel.write("E:/zgzk/xm/niml_recas/file/csv/file.csv").build();
List<String> headL = new ArrayList<>();
headL.add("time");
headL.add("I");
headL.add("V");
headL.add("AP");
headL.add("IQ");
List<List<String>> headList = new ArrayList<>();
for(String h: headL){
List<String> list1 = new ArrayList<>();
list1.add(h);
headList.add(list1);
}
doUpdate2(0,headList,list,excelWriter,"ccc");
excelWriter.finish();
}
private void doUpdate2(int index, List<List<String>> headList , List list, ExcelWriter excelWriter,String sheetName){
if(list.size()>0){
WriteSheet writesheet = EasyExcel.writerSheet(index, sheetName).head(headList).build();
excelWriter.write(list,writesheet);
}
}
public static Collection<Map<Integer, Object>> ToListMapCSV(List<FluxTable> tableList){
// 使用自定义格式进行格式化
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")
.withZone(ZoneOffset.of("+08:00"));
Map<String,Map<Integer,Object>> resMap = new LinkedHashMap<>();
for (FluxTable table : tableList) {
List<FluxRecord> records = table.getRecords();
for (FluxRecord record : records) {
Instant time = record.getTime();
ZonedDateTime zonedDateTime = ZonedDateTime.ofInstant(time,ZoneOffset.of("+08:00"));
String timeStr = formatter.format(zonedDateTime);
Map<Integer,Object> map = resMap.get(timeStr);
Integer index = 0;
switch (record.getField()){
case "I":
index = 1;
break;
case "V":
index = 2;
break;
case "AP":
index = 3;
break;
case "IQ":
index = 4;
break;
}
if(map==null){
map = new HashMap<>();
// map.put(record.getField(),record.getValue());
map.put(index,record.getValue());
resMap.put(timeStr,map);
}else{
map.put(index,record.getValue());
}
if (!map.containsKey("time")){
map.put(0,timeStr);
}
}
}
Collection<Map<Integer, Object>> values = resMap.values();
return values;
}
主要是因为Map中的key之前没有设置为Integer类型,这个key应该对应的是列数。