最近在项目在做Excel下载与上传,本篇博客主要来进行总结,讲知识分类归仓。 代码:
public static void restExcel(Map>> data,String fileName){ int tableMarginRow= 0; String[] title = null; List> tableData = null; HSSFWorkbook wb = new HSSFWorkbook(); //数据样式: HSSFCellStyle cellDataStyle = wb.createCellStyle(); cellDataStyle = wb.createCellStyle(); org.apache.poi.hssf.usermodel.HSSFFont cellDatafont = wb.createFont(); cellDatafont.setFontHeight((short)200); cellDatafont.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL); cellDataStyle.setFont(cellDatafont); cellDataStyle.setBorderBottom((short)1); cellDataStyle.setBorderLeft((short)1); cellDataStyle.setBorderRight((short)1); cellDataStyle.setBorderTop((short)1); cellDataStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); cellDataStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); //新增一个检测信息表 HSSFSheet sheet = wb.createSheet("检测基本信息表"); sheet.setDefaultColumnWidth(20); sheet.setDefaultRowHeightInPoints(17); //创建一行 HSSFRow row = sheet.createRow((int) 0); // 样式 HSSFCellStyle style = wb.createCellStyle(); style.setAlignment(HSSFCellStyle.ALIGN_CENTER); style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); //字体: org.apache.poi.hssf.usermodel.HSSFFont font = wb.createFont(); //合并网格 CellRangeAddress region = new CellRangeAddress(0, 0,0, 10); sheet.addMergedRegion(region); RegionUtil.setBorderBottom(1, region, sheet,wb); // 下边框 RegionUtil.setBottomBorderColor(HSSFColor.BLACK.index, region, sheet, wb); CellRangeAddress region1 = new CellRangeAddress(1,2,0,0); sheet.addMergedRegion(region1); RegionUtil.setBorderBottom(1, region1, sheet,wb); // 下边框 RegionUtil.setBottomBorderColor(HSSFColor.BLACK.index, region1, sheet, wb); region = new CellRangeAddress(1,2,1,1); sheet.addMergedRegion(region); region = new CellRangeAddress(1,2,2,2); sheet.addMergedRegion(region); region = new CellRangeAddress(1,2,3,3); sheet.addMergedRegion(region); region = new CellRangeAddress(1,2,4,4); sheet.addMergedRegion(region); region = new CellRangeAddress(1,1,5,10); sheet.addMergedRegion(region); //基本检测信息表 设置表头 HSSFCell cell = row.createCell(0); style.setFillBackgroundColor(HSSFColor.BLUE.index); cell.setCellValue("检测基本信息表"); style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); style.setFillForegroundColor((short)18); font.setFontHeight((short)250); font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); style.setFont(font); cell.setCellStyle(style); style= wb.createCellStyle(); font = wb.createFont(); row = sheet.createRow(1); style.setAlignment(HSSFCellStyle.ALIGN_CENTER); style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); font.setFontHeight((short)250); style.setFont(font); title = new String[]{"开始日期","检测人","检测仪器","检测背景","仪器序列","气象五参数"}; for( int j1=0;j1<6;j1++){ cell = row.createCell(j1); cell.setCellValue(title[j1]); cell.setCellStyle(style); } title = new String[]{"温度(°C)","湿度(%RH)","气压(hPa)","风向","风速(m/s)","备注"}; row = sheet.createRow(2); for( int j1 =0;j1<11;j1++){ cell = row.createCell(j1); cell.setCellStyle(style); if( j1>4){ cell.setCellValue(title[j1-5]); } } //插入数据 tableData = data.get(testBaseInforTableName); font = wb.createFont(); font.setFontHeight((short)150); style.setFont(font); for(Map columnData : tableData){ row = sheet.createRow(tableMarginRow+3); for( int j1=0;j1<11;j1++){ cell = row.createCell(j1); cell.setCellValue((String)columnData.get(testBaseInforTaleTitle[j1])); cell.setCellStyle(cellDataStyle); } } //仪器校准信息 设置表头 tableMarginRow = tableData.size()+4; region = new CellRangeAddress(tableMarginRow,tableMarginRow,0,11); sheet.addMergedRegion(region); //region = new CellRangeAddress(tableMarginRow+4,tableMarginRow+4,0,11); // sheet.addMergedRegion(region); row = sheet.createRow(tableMarginRow); cell = row.createCell(0); style = wb.createCellStyle(); font = wb.createFont(); font.setFontHeight((short)250); font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); style.setFont(font); style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); style.setFillForegroundColor((short)15); style.setAlignment(HSSFCellStyle.ALIGN_CENTER); style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); cell.setCellValue("仪器校准信息"); cell.setCellStyle(style); title = new String[]{"仪器序列","校准日期","校准人员","标准气理论浓度","标准气实际浓度", "计数值","仪器校准值","响应时间","漂移校准时间","计数值","漂移校准PPM","备注"}; tableMarginRow = tableMarginRow+1; row = sheet.createRow((int) tableMarginRow); style= wb.createCellStyle(); font = wb.createFont(); font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); font.setFontHeight((short)180); style.setFont(font); style.setAlignment(HSSFCellStyle.ALIGN_CENTER); style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); for(int j1=0;j1<12;j1++){ cell = row.createCell(j1); cell.setCellValue(title[j1]); cell.setCellStyle(style); } //添加数据 tableData = data.get(instructionTestTableName); for(Map columnData : tableData){ row = sheet.createRow(++tableMarginRow); for( int j1=0;j1<12;j1++){ cell = row.createCell(j1); if( columnData.get(instructionTestTableTitle[j1]) instanceof Integer ){ cell.setCellValue(String.valueOf(columnData.get(instructionTestTableTitle[j1]))); } else{ cell.setCellValue((String)columnData.get(instructionTestTableTitle[j1])); } cell.setCellStyle(cellDataStyle); } } //新增检测信息sheet sheet = wb.createSheet("检测信息表"); sheet.setDefaultColumnWidth(20); sheet.setDefaultRowHeightInPoints(20); title= new String[]{"装置","区域","设备","标签号","扩展号","位置描述","组件类型","组件子类型","泄漏阈值","最小停留时间(秒)", "结束时间","检测仪器","检测值","维修日期","维修人员","维修措施","复检日期","复检值","是否修复"}; row = sheet.createRow(0); for( int j1 = 0;j1 cell = row.createCell(j1); cell.setCellStyle(style); cell.setCellValue(title[j1]); } //添加数据 tableMarginRow = 0; tableData = data.get(testInforTableName); for(Map columnData : tableData){ row = sheet.createRow(++tableMarginRow); for( int j1=0;j1 cell = row.createCell(j1); if( columnData.get(copyInforTableTitle[j1]) != null ){ if( columnData.get(copyInforTableTitle[j1]) instanceof Integer ){ cell.setCellValue(String.valueOf(columnData.get(copyInforTableTitle[j1]))); } else{ cell.setCellValue((String)columnData.get(copyInforTableTitle[j1])); } } cell.setCellStyle(cellDataStyle); } } //写出文件 FileOutputStream out = null ; try { out = new FileOutputStream(fileName); wb.write(out); out.close(); } catch (Exception e) { e.printStackTrace(); } }
感谢读者的阅读