package com.bonus.exp; import java.util.ArrayList; import java.util.List; import java.util.Map; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFCellStyle; import org.apache.poi.hssf.usermodel.HSSFFont; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.hssf.util.CellRangeAddress; import org.apache.poi.hssf.util.HSSFColor; import org.apache.poi.ss.usermodel.CellStyle; import org.apache.poi.ss.usermodel.Font; @SuppressWarnings("deprecation") public class POIOutputHelperInventoryReport { public static HSSFWorkbook excel(List> result, List list, String filename) { // 获取工作簿对象 HSSFWorkbook workbook = new HSSFWorkbook(); HSSFSheet sheet = workbook.createSheet(); HSSFCellStyle tittleStyle = createTittleStyle(workbook); HSSFCellStyle headerStyle = createHeaderStyle(workbook); HSSFCellStyle contentStyle = createCellStyle(workbook); String sheetName = filename; sheet.setDefaultColumnWidth(15); HSSFRow row; workbook.setSheetName(0, sheetName); HSSFCell cell; // if (result != null && result.size() > 0) { int nColumn = list.size(); //表头 HSSFRow row3 = sheet.createRow(0); row3.setHeight((short) 800); // row3.setHeightInPoints(60); HSSFCell tempCell1 = row3.createCell(0); tempCell1.setCellValue(sheetName); tempCell1.setCellStyle(tittleStyle); sheet.addMergedRegion(new CellRangeAddress(0, 0,0,(short) (nColumn - 1))); //第一行 HSSFRow row1 = sheet.createRow(1); row1.setHeight((short) 400); String[] row_second1 = {"序号", "设备名称", "规格型号", "单位", "单价","上月库存","","","本月库存","","","","本月发出数","","本月库存数","","","备注"}; for (int h = 0; h < row_second1.length; h++) { HSSFCell tempCell = row1.createCell(h); tempCell.setCellValue(row_second1[h]); tempCell.setCellStyle(headerStyle); } //第二行 HSSFRow row2 = sheet.createRow(2); row2.setHeight((short) 400); String[] row_second = {"序号", "设备名称", "规格型号", "单位", "单价","全新","完好","损坏","外购","工地退回","","其他","全新","完好","全新","完好","损坏","备注"}; for (int i = 0; i < row_second.length; i++) { HSSFCell tempCell = row2.createCell(i); tempCell.setCellValue(row_second[i]); tempCell.setCellStyle(headerStyle); } int ii = 3; row = sheet.createRow((short) ii); //row.setHeightInPoints(20); for (int j = 0; j < nColumn; j++) { cell = row.createCell((short) j); if (list.get(j) != null) { cell.setCellStyle(headerStyle); cell.setCellValue(list.get(j)); } else { cell.setCellStyle(headerStyle); cell.setCellValue(""); } if(j>=0 && j<5 ||j==17) { sheet.addMergedRegion(new CellRangeAddress(1, 3, j, j)); } if(j>4 && j<9 ) { sheet.addMergedRegion(new CellRangeAddress(2, 3, j, j)); } if(j>10 && j<17 ) { sheet.addMergedRegion(new CellRangeAddress(2, 3, j, j)); } } sheet.addMergedRegion(new CellRangeAddress(1, 3, 17, 17)); sheet.addMergedRegion(new CellRangeAddress(1, 1, 5, 7)); sheet.addMergedRegion(new CellRangeAddress(1, 1, 8, 11)); sheet.addMergedRegion(new CellRangeAddress(1, 1, 12, 13)); sheet.addMergedRegion(new CellRangeAddress(1, 1, 14, 16)); sheet.addMergedRegion(new CellRangeAddress(2, 2, 9, 10)); ii++; for (int i = 0; i < result.size(); i++) { Map resulttrow = result.get(i); List rowdata = map2List(resulttrow); row = sheet.createRow((short) ii); row.setHeightInPoints(15); for (int j = 0; j < nColumn; j++) { cell = row.createCell((short) j); if (rowdata.get(j) != null) { Object data = rowdata.get(j); Boolean isNum = false;//data是否为数值 if (data != null || "".equals(data)) { //判断data是否为数值型 isNum = data.toString().matches("^(-?\\d+)(\\.\\d+)?$"); } //如果单元格内容是数值类型,则设置cell的类型为数值型,设置data的类型为数值类型 if (isNum ) { // 设置单元格内容为double类型 cell.setCellValue(Double.parseDouble(data.toString())); //contentStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("0.00"));//保留两位小数点 // HSSFDataFormat df = workbook.createDataFormat(); //此处设置数据格式   // contentStyle.setDataFormat(df.getFormat("0.000")); //小数点后保留两位,可以写contentStyle.setDataFormat(df.getFormat("#,#0.00"));   // 设置单元格格式 cell.setCellStyle(contentStyle); } else { cell.setCellStyle(contentStyle); // 设置单元格内容为字符型 cell.setCellValue(data.toString()); } } else { cell.setCellStyle(contentStyle); cell.setCellValue(""); } } ii++; } // } //else { // int nColumn = list.size(); // row = sheet.createRow((short) 0); // row.setHeightInPoints(30); // sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, (short) (nColumn - 1))); // cell = row.createCell(0); // cell.setCellStyle(tittleStyle); // cell.setCellValue(filename); // // int ii = 1; // row = sheet.createRow((short) ii); // row.setHeightInPoints(20); // for (int j = 0; j < nColumn; j++) { // cell = row.createCell((short) j); // if (list.get(j) != null) { // cell.setCellStyle(headerStyle); // cell.setCellValue(list.get(j)); // } else { // cell.setCellStyle(contentStyle); // cell.setCellValue(""); // } // } // // } return workbook; } public static List map2List(Map map) { // 将Map Key 转化为List List mapValuesList = new ArrayList(map.values()); return mapValuesList; } public static HSSFCellStyle createTittleStyle(HSSFWorkbook workbook){ HSSFCellStyle tittleStyle = workbook.createCellStyle(); tittleStyle.setVerticalAlignment(CellStyle.VERTICAL_CENTER);// 垂直居中 tittleStyle.setAlignment(CellStyle.ALIGN_CENTER);// 水平居中 HSSFFont font = workbook.createFont(); font.setFontHeightInPoints((short) 16);// 设置字体大小 font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);//设置加粗 tittleStyle.setWrapText(true); tittleStyle.setFont(font); tittleStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);//填充单元格 tittleStyle.setFillForegroundColor(HSSFColor.WHITE.index);//填充颜色 tittleStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); //下边框 tittleStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);//左边框 tittleStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);//上边框 tittleStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);//右边框 return tittleStyle; } public static HSSFCellStyle createHeaderStyle(HSSFWorkbook workbook){ HSSFCellStyle headerStyle = workbook.createCellStyle(); headerStyle.setVerticalAlignment(CellStyle.VERTICAL_CENTER);// 垂直居中 headerStyle.setAlignment(CellStyle.ALIGN_CENTER);// 水平居中 headerStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); headerStyle.setFillForegroundColor(HSSFColor.WHITE.index); headerStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); //下边框 headerStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);//左边框 headerStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);//上边框 headerStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);//右边框 Font font = workbook.createFont(); font.setFontHeightInPoints((short)12); font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); // font.setColor(HSSFColor.GREEN.index); //绿字 font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); headerStyle.setFont(font); return headerStyle; } public static HSSFCellStyle createCellStyle(HSSFWorkbook workbook){ HSSFCellStyle contentStyle = workbook.createCellStyle(); contentStyle.setVerticalAlignment(CellStyle.VERTICAL_CENTER);// 垂直居中 contentStyle.setAlignment(CellStyle.ALIGN_CENTER);// 水平居中 contentStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); contentStyle.setFillForegroundColor(HSSFColor.WHITE.index); contentStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); //下边框 contentStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);//左边框 contentStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);//上边框 contentStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);//右边框 Font font = workbook.createFont(); font.setFontHeightInPoints((short)10); font.setColor(HSSFColor.BLACK.index); //黑字 contentStyle.setFont(font); return contentStyle; } }