| | |
| | | import com.fgkj.dao.BattTestData; |
| | | import com.google.gson.reflect.TypeToken; |
| | | |
| | | import org.apache.poi.xssf.usermodel.*; |
| | | import sun.misc.BASE64Decoder; |
| | | import sun.misc.BASE64Encoder; |
| | | |
| | |
| | | }; |
| | | try { |
| | | // 创建一个工作薄 |
| | | HSSFWorkbook wb = new HSSFWorkbook(); |
| | | HSSFSheet sheet1 = wb.createSheet("数据总表"); |
| | | //HSSFWorkbook wb = new HSSFWorkbook(); |
| | | //更改类型为 新的excel格式,支持更长的横向长度 |
| | | XSSFWorkbook wb = new XSSFWorkbook(); |
| | | XSSFSheet sheet1 = wb.createSheet("数据总表"); |
| | | // HSSFRow row = sheet1.createRow(2); |
| | | HSSFPatriarch patriarch = sheet1.createDrawingPatriarch(); |
| | | XSSFDrawing patriarch = sheet1.createDrawingPatriarch(); |
| | | int rownum = 1; |
| | | |
| | | sheet1.createRow(rownum); |
| | |
| | | } |
| | | } |
| | | |
| | | createMonInfoSheet(wb,mon_vol_list ,mon_tmp_list,groupinfo); |
| | | createMonInfoSheet2(wb,splitTime,timeCompareList,monVolCompareList ,monTempCompareList,monVolComparePic,monTempComparePic); |
| | | createMonInfoSheet_XSSF(wb,mon_vol_list ,mon_tmp_list,groupinfo); |
| | | createMonInfoSheet2_XSSF(wb,splitTime,timeCompareList,monVolCompareList ,monTempCompareList,monVolComparePic,monTempComparePic); |
| | | |
| | | if (qth.getCode()==1) { |
| | | rownum += 2; |
| | |
| | | // 转码防止乱码 |
| | | resp.addHeader("Content-Disposition", "attachment;filename=" |
| | | + new String(excelName.getBytes("gb2312"), "ISO8859-1") |
| | | + ".xls"); |
| | | + ".xlsx"); |
| | | OutputStream out = resp.getOutputStream(); |
| | | wb.write(out); |
| | | out.close(); |
| | |
| | | } |
| | | |
| | | //System.out.println("data.length"+datas.length+"\t datas[0].length:"+datas[0].length); |
| | | } |
| | | } |
| | | |
| | | public void createMonInfoSheet_XSSF(XSSFWorkbook wb,String[][] mon_vol_list ,String[][] mon_tmp_list,List<Batttestdata> groupinfo){ |
| | | XSSFSheet sheet = wb.createSheet("单体数据表"); |
| | | if(mon_vol_list != null && mon_tmp_list != null && groupinfo != null){ |
| | | int mon_count = mon_tmp_list.length; //总单体数量 |
| | | int total_col = mon_vol_list.length; //总记录条数 |
| | | |
| | | |
| | | List<String> tabTh = new ArrayList<String>(){{ |
| | | this.add("时间(HH:MM:SS)");this.add("在线电压(V)");this.add("组端电压(V)");this.add("电流(A)");this.add("测试容量(AH)"); |
| | | }}; |
| | | for(int i=1;i<=mon_count;i++){ |
| | | tabTh.add("单体电压"+i+"(V)"); |
| | | } |
| | | for(int i=0;i<=mon_count;i++){ |
| | | if(i == 0){ |
| | | tabTh.add(""); |
| | | continue; |
| | | } |
| | | tabTh.add("单体温度"+i+"(℃)"); |
| | | } |
| | | |
| | | String[][] datas = new String[total_col][tabTh.size()]; |
| | | |
| | | //System.out.println("datas.length"+datas.length+"\t datas[0].length:"+datas[0].length+"==mon_vol_list.length:"+mon_vol_list.length+"\tmon_vol_list[0].length"+mon_vol_list[0].length+"\tmon_tmp:"+mon_tmp_list[0].length); |
| | | |
| | | |
| | | for(int j=0;j < datas.length;j++){ |
| | | int currnum = 0; |
| | | datas[j][currnum++] = formatTestLong(groupinfo.get(j).getTest_timelong()); |
| | | datas[j][currnum++] = formartDouble(groupinfo.get(j).getOnline_vol(),2)+""; |
| | | datas[j][currnum++] = formartDouble(groupinfo.get(j).getGroup_vol(),2)+""; |
| | | datas[j][currnum++] = formartDouble(groupinfo.get(j).getTest_curr(),1)+""; |
| | | datas[j][currnum++] = formartDouble(groupinfo.get(j).getTest_cap(),1)+""; |
| | | |
| | | for(int i=0;i<mon_vol_list[j].length;i++){ |
| | | datas[j][currnum++] = mon_vol_list[j][i]; |
| | | } |
| | | datas[j][currnum++] = ""; |
| | | for(int i=0;i<mon_tmp_list.length;i++){ |
| | | datas[j][currnum++] = mon_tmp_list[i][j]; |
| | | } |
| | | } |
| | | //System.out.println("mon_vol_list"+mon_vol_list.length+"\t mon_tmp_list:"+mon_tmp_list.length); |
| | | |
| | | int maxcol = 254; //设置最大列数 |
| | | |
| | | int countReLine = (int) Math.ceil((double)total_col/maxcol); |
| | | int totalrow = countReLine *(tabTh.size()+1); //excel总行数 |
| | | for(int i=0;i<totalrow;i++){ |
| | | sheet.createRow(i); |
| | | } |
| | | |
| | | //System.out.println("countReLine:"+countReLine); |
| | | |
| | | int currRow = 0; //当前行 |
| | | int arr_index = 0; //当前列 |
| | | for(int i=0;i<countReLine;i++){ |
| | | for(int col = 0;col <= maxcol && col<=datas.length && arr_index<datas.length;col++){ |
| | | if(col == 0){ |
| | | for(int k=0;k<tabTh.size();k++){ |
| | | sheet.getRow(k+currRow).createCell(col).setCellValue(tabTh.get(k)); |
| | | } |
| | | }else{ |
| | | for(int k = 0;k<datas[arr_index].length;k++){ |
| | | sheet.getRow(k+currRow).createCell(col).setCellValue(datas[arr_index][k]); |
| | | } |
| | | arr_index++; |
| | | } |
| | | } |
| | | currRow += tabTh.size()+1; |
| | | } |
| | | } |
| | | } |
| | | |
| | |
| | | }*/ |
| | | |
| | | } |
| | | |
| | | private void createMonInfoSheet2_XSSF(XSSFWorkbook wb,String splitTime, String[] timeCompareList,String[][] monVolCompareList, String[][] monTempCompareList, String monVolComparePic, String monTempComparePic) { |
| | | |
| | | bytes=new ArrayList<byte[]>(); |
| | | //处理图片 |
| | | try { |
| | | if (ServletUtils.isNotNull(monVolComparePic)) { |
| | | String[] url = monVolComparePic.split(","); |
| | | bytes.add(new BASE64Decoder().decodeBuffer(url[1])); |
| | | } |
| | | if (ServletUtils.isNotNull(monTempComparePic)) { |
| | | String[] url = monTempComparePic.split(","); |
| | | bytes.add(new BASE64Decoder().decodeBuffer(url[1])); |
| | | } |
| | | }catch (Exception e){ |
| | | e.printStackTrace(); |
| | | } |
| | | |
| | | XSSFSheet sheet = wb.createSheet("单体电压对比表"); |
| | | //图片元素 |
| | | XSSFDrawing patriarch = sheet.createDrawingPatriarch(); |
| | | |
| | | //字体格式-加粗 |
| | | XSSFCellStyle cellStyle = wb.createCellStyle(); |
| | | XSSFFont font = wb.createFont(); |
| | | font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); |
| | | cellStyle.setFont(font); |
| | | |
| | | //一行一行的填充数据 |
| | | int rowNum = 0; |
| | | XSSFRow firstRow = sheet.createRow(rowNum++); |
| | | XSSFCell cell = firstRow.createCell(0); |
| | | cell.setCellValue("单体电压对比图"); |
| | | cell.setCellStyle(cellStyle); |
| | | |
| | | //插入对比图片 |
| | | int picNum = 0; |
| | | HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0, 512, 255,(short) 0, rowNum, (short) 10, rowNum+25); |
| | | anchor.setAnchorType(3); |
| | | patriarch.createPicture(anchor,wb.addPicture(bytes.get(picNum),HSSFWorkbook.PICTURE_TYPE_PNG)).resize(1); |
| | | picNum ++;rowNum+=25; |
| | | |
| | | //插入数据 |
| | | XSSFRow firstDataRow = sheet.createRow(rowNum++); |
| | | XSSFCell dataCell = firstDataRow.createCell(0); |
| | | dataCell.setCellValue("基准时间:"+splitTime+"分钟"); |
| | | dataCell.setCellStyle(cellStyle); |
| | | //数据行抬头 |
| | | XSSFRow rowDataTitle = sheet.createRow(rowNum++); |
| | | for (int i = 0; i < monVolCompareList.length+1; i++) { |
| | | XSSFCell cellTemp = rowDataTitle.createCell(i); |
| | | if(i==0){ |
| | | cellTemp.setCellValue("时间(HH:MM:SS)"); |
| | | }else{ |
| | | cellTemp.setCellValue("单体对比电压"+(i)+"(V)"); |
| | | } |
| | | cellTemp.setCellStyle(cellStyle); |
| | | } |
| | | //数据行[1,1,1],[2,2,2] |
| | | for (int i = 0; i < monVolCompareList[0].length; i++) { |
| | | XSSFRow row = sheet.createRow(rowNum++); |
| | | for (int j = 0; j < monVolCompareList.length+1; j++) { |
| | | row.createCell(0).setCellValue(timeCompareList[i]); |
| | | if(j!=0){ |
| | | row.createCell(j).setCellValue(monVolCompareList[j-1][i]); |
| | | } |
| | | } |
| | | } |
| | | |
| | | //第二个sheet |
| | | XSSFSheet sheet1 = wb.createSheet("单体温度对比表"); |
| | | //图片元素 |
| | | XSSFDrawing patriarch1 = sheet1.createDrawingPatriarch(); |
| | | |
| | | //字体格式-加粗 |
| | | XSSFCellStyle cellStyle1 = wb.createCellStyle(); |
| | | XSSFFont font1 = wb.createFont(); |
| | | font1.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); |
| | | cellStyle1.setFont(font1); |
| | | |
| | | //一行一行的填充数据 |
| | | int rowNum1 = 0; |
| | | XSSFRow firstRow1 = sheet1.createRow(rowNum1++); |
| | | XSSFCell cell1 = firstRow1.createCell(0); |
| | | cell1.setCellValue("单体温度对比图"); |
| | | cell1.setCellStyle(cellStyle); |
| | | |
| | | //插入对比图片 |
| | | HSSFClientAnchor anchor1 = new HSSFClientAnchor(0, 0, 512, 255,(short) 0, rowNum1, (short) 10, rowNum1+25); |
| | | anchor1.setAnchorType(3); |
| | | patriarch1.createPicture(anchor1,wb.addPicture(bytes.get(picNum),HSSFWorkbook.PICTURE_TYPE_PNG)).resize(1); |
| | | rowNum1+=25; |
| | | |
| | | //插入数据 |
| | | XSSFRow firstDataRow1 = sheet1.createRow(rowNum1++); |
| | | XSSFCell dataCell1 = firstDataRow1.createCell(0); |
| | | dataCell1.setCellValue("基准时间:"+splitTime+"分钟"); |
| | | dataCell1.setCellStyle(cellStyle1); |
| | | //数据行抬头 |
| | | XSSFRow rowDataTitle1 = sheet1.createRow(rowNum1++); |
| | | for (int i = 0; i < monTempCompareList.length+1; i++) { |
| | | XSSFCell cellTemp = rowDataTitle1.createCell(i); |
| | | if(i==0){ |
| | | cellTemp.setCellValue("时间(HH:MM:SS)"); |
| | | }else{ |
| | | cellTemp.setCellValue("单体对比温度"+(i)+"(℃)"); |
| | | } |
| | | cellTemp.setCellStyle(cellStyle1); |
| | | } |
| | | //数据行[1,1,1],[2,2,2] |
| | | for (int i = 0; i < monTempCompareList[0].length; i++) { |
| | | XSSFRow row = sheet1.createRow(rowNum1++); |
| | | for (int j = 0; j < monTempCompareList.length+1; j++) { |
| | | row.createCell(0).setCellValue(timeCompareList[i]); |
| | | if(j!=0){ |
| | | row.createCell(j).setCellValue(monTempCompareList[j-1][i]); |
| | | } |
| | | } |
| | | } |
| | | |
| | | } |
| | | |
| | | //导出CT机样式报表 |
| | | private void ExprotCTReport(HttpServletRequest req, HttpServletResponse resp) { |