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应该对应的是列数。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐