| | |
| | | //生成历史数据中的报表 |
| | | private void createExcel(List<byte[]> bytes,Title title,Qth qth,String[][] datas,BattMaintDealarm bmd,String[][] mon_vol_list ,String[][] mon_tmp_list,List<BatttestdataId> groupinfo,String splitTime,String[] timeCompareList,String[][] monVolCompareList,String[][] monTempCompareList,String monVolComparePic, String monTempComparePic,HttpServletResponse resp, |
| | | HttpServletRequest req) { |
| | | String[] arrTh = new String[]{ |
| | | "单体编号","起始单体电压(V)","截止单体电压(V)","实际容量(AH)","剩余容量(AH)","实际容量百分比(%)","单体内阻(mΩ)","起始单体温度(℃)","终止单体温度(℃)" |
| | | }; |
| | | String[] picName = new String[]{ |
| | | "组端电压曲线","电池电流曲线","终止单体电压","终止单体温度","单体内阻","单体均衡电流","单体电压","单体实际容量","单体剩余容量","单体实际容量百分比","单体电压曲线","单体温度曲线","单体剩余容量曲线" |
| | | }; |
| | | //根据当前的语言环境设置不同的日志记录 |
| | | String lang = ActionUtil.getLang(); |
| | | String[] arrTh = null; |
| | | String[] picName = null; |
| | | if (lang.contains("zh")) { |
| | | arrTh = new String[]{ |
| | | "单体编号", "起始单体电压(V)", "截止单体电压(V)", "实际容量(AH)", "剩余容量(AH)", "实际容量百分比(%)", "单体内阻(mΩ)", "起始单体温度(℃)", "终止单体温度(℃)" |
| | | }; |
| | | picName = new String[]{ |
| | | "组端电压曲线", "电池电流曲线", "终止单体电压", "终止单体温度", "单体内阻", "单体均衡电流", "单体电压", "单体实际容量", "单体剩余容量", "单体实际容量百分比", "单体电压曲线", "单体温度曲线", "单体剩余容量曲线" |
| | | }; |
| | | } else { |
| | | arrTh = new String[]{ |
| | | "Unit number", "Starting unit voltage(V)", "Cutoff cell voltage(V)", "Actual Capacity(AH)", "remaining capacity(AH)", "Actual capacity percentage(%)", "Individual internal resistance(mΩ)", "Starting monomer temperature(℃)", "Termination monomer temperature(℃)" |
| | | }; |
| | | picName = new String[]{ |
| | | "Group terminal voltage curve", "Battery current curve", "Termination unit voltage", "Termination monomer temperature", "Individual internal resistance", "Individual balanced current", "Individual voltage", "Actual capacity of individual units", "Remaining capacity of single unit", "Actual capacity percentage of individual units", "Individual voltage curve", "Individual temperature curve", "Individual residual capacity curve" |
| | | }; |
| | | } |
| | | |
| | | try { |
| | | // 创建一个工作薄 |
| | | HSSFWorkbook wb = new HSSFWorkbook(); |
| | | HSSFSheet sheet1 = wb.createSheet("数据总表"); |
| | | HSSFSheet sheet1 = null; |
| | | if (lang.contains("zh")) { |
| | | sheet1 = wb.createSheet("数据总表"); |
| | | } else { |
| | | sheet1 = wb.createSheet("Data Summary Table"); |
| | | } |
| | | // HSSFRow row = sheet1.createRow(2); |
| | | HSSFPatriarch patriarch = sheet1.createDrawingPatriarch(); |
| | | int rownum = 1; |
| | | if (lang.contains("zh")) { |
| | | sheet1.createRow(rownum); |
| | | sheet1.getRow(rownum).createCell(1).setCellValue("电池组名称"); |
| | | sheet1.getRow(rownum).createCell(2).setCellValue(bmd.getBinf().getStationName() + "-" + bmd.getBinf().getBattGroupName()); |
| | | rownum++; |
| | | |
| | | sheet1.createRow(rownum); |
| | | sheet1.getRow(rownum).createCell(1).setCellValue("电池组名称"); |
| | | sheet1.getRow(rownum).createCell(2).setCellValue(bmd.getBinf().getStationName()+"-"+bmd.getBinf().getBattGroupName()); |
| | | rownum++; |
| | | sheet1.createRow(rownum); |
| | | sheet1.getRow(rownum).createCell(1).setCellValue("电池品牌:" + bmd.getBinf().getBattProducer()); |
| | | sheet1.getRow(rownum).createCell(2).setCellValue("安装日期:" + formartDate(bmd.getBinf().getBattInUseDate(), "yyyy-MM-dd")); |
| | | sheet1.getRow(rownum).createCell(3).setCellValue("单体数量:" + bmd.getBinf().getMonCount()); |
| | | sheet1.getRow(rownum).createCell(4).setCellValue("单体电压:" + bmd.getBinf().getMonVolStd() + "V"); |
| | | sheet1.getRow(rownum).createCell(5).setCellValue("单体标称容量:" + formartDouble(bmd.getBinf().getMonCapStd(), 0) + "AH"); |
| | | sheet1.getRow(rownum).createCell(6).setCellValue("单体标称内阻:" + formartDouble(bmd.getBinf().getMonResStd(), 3) + "mΩ"); |
| | | sheet1.getRow(rownum).createCell(7).setCellValue("单体标称电导:" + formartDouble(bmd.getBinf().getMonSerStd(), 0)); |
| | | |
| | | sheet1.createRow(rownum); |
| | | sheet1.getRow(rownum).createCell(1).setCellValue( "电池品牌:"+bmd.getBinf().getBattProducer()); |
| | | sheet1.getRow(rownum).createCell(2).setCellValue( "安装日期:"+formartDate(bmd.getBinf().getBattInUseDate(),"yyyy-MM-dd")); |
| | | sheet1.getRow(rownum).createCell(3).setCellValue( "单体数量:"+bmd.getBinf().getMonCount()); |
| | | sheet1.getRow(rownum).createCell(4).setCellValue( "单体电压:"+bmd.getBinf().getMonVolStd()+"V"); |
| | | sheet1.getRow(rownum).createCell(5).setCellValue( "单体标称容量:"+formartDouble(bmd.getBinf().getMonCapStd(),0)+"AH"); |
| | | sheet1.getRow(rownum).createCell(6).setCellValue( "单体标称内阻:"+formartDouble(bmd.getBinf().getMonResStd(),3)+"mΩ"); |
| | | sheet1.getRow(rownum).createCell(7).setCellValue( "单体标称电导:"+formartDouble(bmd.getBinf().getMonSerStd(),0)); |
| | | rownum++; |
| | | sheet1.createRow(rownum); |
| | | sheet1.getRow(rownum).createCell(1).setCellValue("测试类型:" + BattTestData.battState(bmd.getSdata().getTestType())); |
| | | sheet1.getRow(rownum).createCell(2).setCellValue("测试时间:" + formartDate(bmd.getSdata().getTestStarttime(), "yyyy-MM-dd HH:mm:ss")); |
| | | sheet1.getRow(rownum).createCell(3).setCellValue("测试电流:" + bmd.getSdata().getTestCurr() + "A"); |
| | | sheet1.getRow(rownum).createCell(4).setCellValue("测试时长:" + formatTestLong(bmd.getSdata().getTestTimelong())); |
| | | sheet1.getRow(rownum).createCell(5).setCellValue("结束时间:" + formartDate(new Date(bmd.getSdata().getTestStarttime().getTime() + bmd.getSdata().getTestTimelong() * 1000), "yyyy-MM-dd HH:mm:ss")); |
| | | sheet1.getRow(rownum).createCell(6).setCellValue("测试容量:" + formartDouble(bmd.getSdata().getTestCap(), 0) + "AH"); |
| | | //stationIp存放的终止原因 |
| | | sheet1.getRow(rownum).createCell(7).setCellValue("终止原因:" + (bmd.getSdata().getTestType() == 2 ? "" : bmd.getBinf().getStationIP())); |
| | | |
| | | rownum++; |
| | | sheet1.createRow(rownum); |
| | | sheet1.getRow(rownum).createCell(1).setCellValue( "测试类型:"+BattTestData.battState(bmd.getSdata().getTestType())); |
| | | sheet1.getRow(rownum).createCell(2).setCellValue( "测试时间:"+formartDate(bmd.getSdata().getTestStarttime(),"yyyy-MM-dd HH:mm:ss")); |
| | | sheet1.getRow(rownum).createCell(3).setCellValue( "测试电流:"+bmd.getSdata().getTestCurr()+"A"); |
| | | sheet1.getRow(rownum).createCell(4).setCellValue( "测试时长:"+formatTestLong(bmd.getSdata().getTestTimelong())); |
| | | sheet1.getRow(rownum).createCell(5).setCellValue( "结束时间:"+formartDate(new Date(bmd.getSdata().getTestStarttime().getTime()+bmd.getSdata().getTestTimelong()*1000),"yyyy-MM-dd HH:mm:ss")); |
| | | sheet1.getRow(rownum).createCell(6).setCellValue( "测试容量:"+formartDouble(bmd.getSdata().getTestCap(),0)+"AH"); |
| | | //stationIp存放的终止原因 |
| | | sheet1.getRow(rownum).createCell(7).setCellValue( "终止原因:"+(bmd.getSdata().getTestType()==2?"":bmd.getBinf().getStationIP())); |
| | | rownum++; |
| | | sheet1.createRow(rownum); |
| | | sheet1.getRow(rownum).createCell(1).setCellValue("报告日期:"); |
| | | sheet1.getRow(rownum).createCell(2).setCellValue(formartDate(new Date(), "yyyy-MM-dd HH:mm:ss")); |
| | | rownum += 4; |
| | | |
| | | rownum++; |
| | | sheet1.createRow(rownum); |
| | | sheet1.getRow(rownum).createCell(1).setCellValue( "报告日期:"); |
| | | sheet1.getRow(rownum).createCell(2).setCellValue(formartDate(new Date(),"yyyy-MM-dd HH:mm:ss")); |
| | | rownum+=4; |
| | | int picnum = 0; |
| | | |
| | | int picnum = 0; |
| | | |
| | | for(int i=0;i<picName.length;i++){ |
| | | sheet1.createRow(rownum-1); |
| | | sheet1.getRow(rownum-1).createCell(1).setCellValue(picName[i]); |
| | | //rownum++; |
| | | HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0, 512, 255,(short) 1, rownum, (short) 10, rowNumAdd * (picnum + 1)); |
| | | anchor.setAnchorType(3); |
| | | patriarch.createPicture(anchor,wb.addPicture(bytes.get(picnum),HSSFWorkbook.PICTURE_TYPE_PNG)).resize(1); |
| | | picnum ++;rownum+=rowNumAdd; |
| | | } |
| | | for (int i = 0; i < picName.length; i++) { |
| | | sheet1.createRow(rownum - 1); |
| | | sheet1.getRow(rownum - 1).createCell(1).setCellValue(picName[i]); |
| | | //rownum++; |
| | | HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0, 512, 255, (short) 1, rownum, (short) 10, rowNumAdd * (picnum + 1)); |
| | | anchor.setAnchorType(3); |
| | | patriarch.createPicture(anchor, wb.addPicture(bytes.get(picnum), HSSFWorkbook.PICTURE_TYPE_PNG)).resize(1); |
| | | picnum++; |
| | | rownum += rowNumAdd; |
| | | } |
| | | |
| | | /*sheet1.createRow(rownum); |
| | | sheet1.getRow(rownum).createCell(1).setCellValue("单体实际容量"); |
| | |
| | | patriarch.createPicture(anchor,wb.addPicture(bytes.get(picnum),HSSFWorkbook.PICTURE_TYPE_PNG)).resize(1); |
| | | picnum ++;rownum+=25;*/ |
| | | |
| | | sheet1.createRow(rownum); |
| | | sheet1.getRow(rownum).createCell(1).setCellValue("最高单体电压"); |
| | | sheet1.getRow(rownum).createCell(2).setCellValue("最低单体电压"); |
| | | sheet1.getRow(rownum).createCell(3).setCellValue("平均单体电压"); |
| | | sheet1.getRow(rownum).createCell(4).setCellValue("落后单体电压值"); |
| | | sheet1.getRow(rownum).createCell(5).setCellValue("落后单体数量"); |
| | | sheet1.getRow(rownum).createCell(6).setCellValue("落后单体数量百分比"); |
| | | rownum++; |
| | | sheet1.createRow(rownum); |
| | | sheet1.getRow(rownum).createCell(1).setCellValue("最高单体电压"); |
| | | sheet1.getRow(rownum).createCell(2).setCellValue("最低单体电压"); |
| | | sheet1.getRow(rownum).createCell(3).setCellValue("平均单体电压"); |
| | | sheet1.getRow(rownum).createCell(4).setCellValue("落后单体电压值"); |
| | | sheet1.getRow(rownum).createCell(5).setCellValue("落后单体数量"); |
| | | sheet1.getRow(rownum).createCell(6).setCellValue("落后单体数量百分比"); |
| | | rownum++; |
| | | |
| | | sheet1.createRow(rownum); |
| | | sheet1.getRow(rownum).createCell(1).setCellValue(title.getMax()); |
| | | sheet1.getRow(rownum).createCell(2).setCellValue(title.getMin()); |
| | | sheet1.getRow(rownum).createCell(3).setCellValue(title.getAvg()); |
| | | sheet1.getRow(rownum).createCell(4).setCellValue(title.getClow()); |
| | | sheet1.getRow(rownum).createCell(5).setCellValue(title.getLc()); |
| | | sheet1.getRow(rownum).createCell(6).setCellValue(title.getLp()+"%"); |
| | | rownum+=2; |
| | | sheet1.createRow(rownum); |
| | | sheet1.getRow(rownum).createCell(1).setCellValue(title.getMax()); |
| | | sheet1.getRow(rownum).createCell(2).setCellValue(title.getMin()); |
| | | sheet1.getRow(rownum).createCell(3).setCellValue(title.getAvg()); |
| | | sheet1.getRow(rownum).createCell(4).setCellValue(title.getClow()); |
| | | sheet1.getRow(rownum).createCell(5).setCellValue(title.getLc()); |
| | | sheet1.getRow(rownum).createCell(6).setCellValue(title.getLp() + "%"); |
| | | rownum += 2; |
| | | } else { |
| | | sheet1.createRow(rownum); |
| | | sheet1.getRow(rownum).createCell(1).setCellValue("Battery pack name"); |
| | | sheet1.getRow(rownum).createCell(2).setCellValue(bmd.getBinf().getStationName() + "-" + bmd.getBinf().getBattGroupName()); |
| | | rownum++; |
| | | |
| | | sheet1.createRow(rownum); |
| | | sheet1.getRow(rownum).createCell(1).setCellValue("Battery brand:" + bmd.getBinf().getBattProducer()); |
| | | sheet1.getRow(rownum).createCell(2).setCellValue("install date:" + formartDate(bmd.getBinf().getBattInUseDate(), "yyyy-MM-dd")); |
| | | sheet1.getRow(rownum).createCell(3).setCellValue("Number of monomers:" + bmd.getBinf().getMonCount()); |
| | | sheet1.getRow(rownum).createCell(4).setCellValue("Individual voltage:" + bmd.getBinf().getMonVolStd() + "V"); |
| | | sheet1.getRow(rownum).createCell(5).setCellValue("Individual nominal capacity:" + formartDouble(bmd.getBinf().getMonCapStd(), 0) + "AH"); |
| | | sheet1.getRow(rownum).createCell(6).setCellValue("Individual nominal internal resistance:" + formartDouble(bmd.getBinf().getMonResStd(), 3) + "mΩ"); |
| | | sheet1.getRow(rownum).createCell(7).setCellValue("Individual nominal conductivity:" + formartDouble(bmd.getBinf().getMonSerStd(), 0)); |
| | | |
| | | rownum++; |
| | | sheet1.createRow(rownum); |
| | | sheet1.getRow(rownum).createCell(1).setCellValue("Test Type:" + BattTestData.battState(bmd.getSdata().getTestType())); |
| | | sheet1.getRow(rownum).createCell(2).setCellValue("Test Time:" + formartDate(bmd.getSdata().getTestStarttime(), "yyyy-MM-dd HH:mm:ss")); |
| | | sheet1.getRow(rownum).createCell(3).setCellValue("Test Curr:" + bmd.getSdata().getTestCurr() + "A"); |
| | | sheet1.getRow(rownum).createCell(4).setCellValue("Test TimeLong:" + formatTestLong(bmd.getSdata().getTestTimelong())); |
| | | sheet1.getRow(rownum).createCell(5).setCellValue("Stop Time:" + formartDate(new Date(bmd.getSdata().getTestStarttime().getTime() + bmd.getSdata().getTestTimelong() * 1000), "yyyy-MM-dd HH:mm:ss")); |
| | | sheet1.getRow(rownum).createCell(6).setCellValue("Test Cap:" + formartDouble(bmd.getSdata().getTestCap(), 0) + "AH"); |
| | | //stationIp存放的终止原因 |
| | | sheet1.getRow(rownum).createCell(7).setCellValue("Stop Reason:" + (bmd.getSdata().getTestType() == 2 ? "" : bmd.getBinf().getStationIP())); |
| | | |
| | | rownum++; |
| | | sheet1.createRow(rownum); |
| | | sheet1.getRow(rownum).createCell(1).setCellValue("Report Date:"); |
| | | sheet1.getRow(rownum).createCell(2).setCellValue(formartDate(new Date(), "yyyy-MM-dd HH:mm:ss")); |
| | | rownum += 4; |
| | | |
| | | int picnum = 0; |
| | | |
| | | for (int i = 0; i < picName.length; i++) { |
| | | sheet1.createRow(rownum - 1); |
| | | sheet1.getRow(rownum - 1).createCell(1).setCellValue(picName[i]); |
| | | //rownum++; |
| | | HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0, 512, 255, (short) 1, rownum, (short) 10, rowNumAdd * (picnum + 1)); |
| | | anchor.setAnchorType(3); |
| | | patriarch.createPicture(anchor, wb.addPicture(bytes.get(picnum), HSSFWorkbook.PICTURE_TYPE_PNG)).resize(1); |
| | | picnum++; |
| | | rownum += rowNumAdd; |
| | | } |
| | | |
| | | /*sheet1.createRow(rownum); |
| | | sheet1.getRow(rownum).createCell(1).setCellValue("单体实际容量"); |
| | | rownum++; |
| | | anchor = new HSSFClientAnchor(0, 0, 512, 255,(short) 1, rownum, (short) 10, 25 * (picnum + 1)); |
| | | anchor.setAnchorType(3); |
| | | patriarch.createPicture(anchor,wb.addPicture(bytes.get(picnum),HSSFWorkbook.PICTURE_TYPE_PNG)).resize(1); |
| | | picnum ++;rownum+=25; |
| | | |
| | | sheet1.createRow(rownum); |
| | | sheet1.getRow(rownum).createCell(1).setCellValue("单体剩余容量"); |
| | | rownum++; |
| | | anchor = new HSSFClientAnchor(0, 0, 512, 255,(short) 1, rownum, (short) 10, 25 * (picnum + 1)); |
| | | anchor.setAnchorType(3); |
| | | patriarch.createPicture(anchor,wb.addPicture(bytes.get(picnum),HSSFWorkbook.PICTURE_TYPE_PNG)).resize(1); |
| | | picnum ++;rownum+=25; |
| | | |
| | | sheet1.createRow(rownum); |
| | | sheet1.getRow(rownum).createCell(1).setCellValue("单体实际容量百分比"); |
| | | rownum++; |
| | | anchor = new HSSFClientAnchor(0, 0, 512, 255,(short) 1, rownum, (short) 10, 25 * (picnum + 1)); |
| | | anchor.setAnchorType(3); |
| | | patriarch.createPicture(anchor,wb.addPicture(bytes.get(picnum),HSSFWorkbook.PICTURE_TYPE_PNG)).resize(1); |
| | | picnum ++;rownum+=25; |
| | | |
| | | sheet1.createRow(rownum); |
| | | sheet1.getRow(rownum).createCell(1).setCellValue("单体电压曲线"); |
| | | rownum++; |
| | | anchor = new HSSFClientAnchor(0, 0, 512, 255,(short) 1, rownum, (short) 10, 25 * (picnum + 1)); |
| | | anchor.setAnchorType(3); |
| | | patriarch.createPicture(anchor,wb.addPicture(bytes.get(picnum),HSSFWorkbook.PICTURE_TYPE_PNG)).resize(1); |
| | | picnum ++;rownum+=25; |
| | | |
| | | sheet1.createRow(rownum); |
| | | sheet1.getRow(rownum).createCell(1).setCellValue("组端电压曲线"); |
| | | rownum++; |
| | | anchor = new HSSFClientAnchor(0, 0, 512, 255,(short) 1, rownum, (short) 10, 25 * (picnum + 1)); |
| | | anchor.setAnchorType(3); |
| | | patriarch.createPicture(anchor,wb.addPicture(bytes.get(picnum),HSSFWorkbook.PICTURE_TYPE_PNG)).resize(1); |
| | | picnum ++;rownum+=25; |
| | | |
| | | sheet1.createRow(rownum); |
| | | sheet1.getRow(rownum).createCell(1).setCellValue("电池电流曲线"); |
| | | rownum++; |
| | | anchor = new HSSFClientAnchor(0, 0, 512, 255,(short) 1, rownum, (short) 10, 25 * (picnum + 1)); |
| | | anchor.setAnchorType(3); |
| | | patriarch.createPicture(anchor,wb.addPicture(bytes.get(picnum),HSSFWorkbook.PICTURE_TYPE_PNG)).resize(1); |
| | | picnum ++;rownum+=25;*/ |
| | | |
| | | sheet1.createRow(rownum); |
| | | sheet1.getRow(rownum).createCell(1).setCellValue("Maximum individual voltage"); |
| | | sheet1.getRow(rownum).createCell(2).setCellValue("Minimum unit voltage"); |
| | | sheet1.getRow(rownum).createCell(3).setCellValue("Average individual voltage"); |
| | | sheet1.getRow(rownum).createCell(4).setCellValue("Backward unit voltage value"); |
| | | sheet1.getRow(rownum).createCell(5).setCellValue("Number of lagging units"); |
| | | sheet1.getRow(rownum).createCell(6).setCellValue("Percentage of lagging units"); |
| | | rownum++; |
| | | |
| | | sheet1.createRow(rownum); |
| | | sheet1.getRow(rownum).createCell(1).setCellValue(title.getMax()); |
| | | sheet1.getRow(rownum).createCell(2).setCellValue(title.getMin()); |
| | | sheet1.getRow(rownum).createCell(3).setCellValue(title.getAvg()); |
| | | sheet1.getRow(rownum).createCell(4).setCellValue(title.getClow()); |
| | | sheet1.getRow(rownum).createCell(5).setCellValue(title.getLc()); |
| | | sheet1.getRow(rownum).createCell(6).setCellValue(title.getLp() + "%"); |
| | | rownum += 2; |
| | | } |
| | | sheet1.createRow(rownum); |
| | | for(int i = 0 ;i<arrTh.length;i++){ |
| | | sheet1.getRow(rownum).createCell(i+1).setCellValue(arrTh[i]); |
| | | for (int i = 0; i < arrTh.length; i++) { |
| | | sheet1.getRow(rownum).createCell(i + 1).setCellValue(arrTh[i]); |
| | | } |
| | | rownum++; |
| | | |
| | | if(datas!=null && datas.length>0){ |
| | | for(int i=0;i<datas[0].length;i++){ |
| | | if (datas != null && datas.length > 0) { |
| | | for (int i = 0; i < datas[0].length; i++) { |
| | | sheet1.createRow(rownum); |
| | | for(int j=0;j<datas.length;j++){ |
| | | sheet1.getRow(rownum).createCell(j+1).setCellValue(datas[j][i]); |
| | | for (int j = 0; j < datas.length; j++) { |
| | | sheet1.getRow(rownum).createCell(j + 1).setCellValue(datas[j][i]); |
| | | } |
| | | rownum++; |
| | | } |
| | | } |
| | | |
| | | createMonInfoSheet(wb,mon_vol_list ,mon_tmp_list,groupinfo); |
| | | createMonInfoSheet2(bytes,wb,splitTime,timeCompareList,monVolCompareList ,monTempCompareList,monVolComparePic,monTempComparePic); |
| | | createMonInfoSheet(wb, mon_vol_list, mon_tmp_list, groupinfo); |
| | | createMonInfoSheet2(bytes, wb, splitTime, timeCompareList, monVolCompareList, monTempCompareList, monVolComparePic, monTempComparePic); |
| | | |
| | | if (qth.getCode()==1) { |
| | | if (qth.getCode() == 1) { |
| | | rownum += 2; |
| | | //锅底 驼峰 Qg Qt Qh 电池性能 |
| | | sheet1.createRow(rownum); |