POI导出excel的一个辅助工具类
2018-07-20 来源:open-open
import org.apache.poi.ss.usermodel.Sheet; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.util.List; import javax.servlet.http.HttpServletResponse; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.w3c.dom.Document; import com.hp.idm.business.excel.impl.ExcelFactory; import com.hp.idm.business.excel.impl.ExcelFactoryProduct; import com.hp.idm.business.excel.impl.ExportExcelToWeb; import com.hp.idm.exception.BusinessException; import com.hp.idm.log.IDMLogHelper; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.Map; import org.apache.commons.lang.StringUtils; import org.apache.poi.ss.SpreadsheetVersion; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellStyle; import org.apache.poi.ss.usermodel.Font; import org.apache.poi.ss.usermodel.IndexedColors; import static org.apache.poi.ss.util.CellReference.convertNumToColString; /** * @author dylan * */ public class ExcelUtil { public static String SEPERATOR = "__"; /** * @param list * @return * @throws BusinessException */ public static Workbook createExcel(Document list) throws BusinessException { ExportExcelToWeb excel = new ExportExcelToWeb(list); excel.transformToExcel(); return excel.getWorkBook(); } public static Workbook createExcel(List<?> rows, String export) { if (rows.size() == 0) { Workbook wb = createWorkbook(export); return createEmptySheet(wb); } ExcelFactoryProduct excel = ExcelFactory.getExcel(rows, export); excel.transformToExcel(); return excel.getWorkBook(); } public static Workbook createExcel( List<LinkedHashMap<String, String>> rows, HashMap<String, Object> paramMap) { ExcelFactoryProduct excel = null; if (rows.size() == 0) { Workbook wb = createWorkbook((String) paramMap .get("selectedExcelVersion")); return createEmptySheet(wb); } excel = ExcelFactory.getExcel(rows, paramMap); excel.transformToExcel(); return excel.getWorkBook(); } /** * @param hssfWorkbook * @return */ private static Workbook createEmptySheet(Workbook workbook) { workbook.createSheet(); workbook.setSheetName(0, "Empty Sheet"); return workbook; } /** * Create an blank excel workbook based on excel version * @param version * @return */ public static Workbook createWorkbook(String excelVersion) { if ("2003".equals(excelVersion)) { return new HSSFWorkbook(); } else if ("2007".equals(excelVersion)) { return new XSSFWorkbook(); } else { throw new IllegalStateException( "Only 2003 and 2007 excel exports defined. Add another else if branch to add extra functionality."); } } public static void setupMIMEHeader(HttpServletResponse response, String fileName, String excelVersion) { response.setHeader("Expires", "-1"); String inlineName; try { inlineName = URLEncoder.encode(fileName, "UTF-8"); } catch (UnsupportedEncodingException ex) { ex.printStackTrace(); inlineName = "unknown"; } if ("2003".equals(excelVersion)) { response.setContentType("application/vnd.ms-excel"); response.setHeader("Content-disposition", "inline;filename=" + inlineName + ".xls"); } else if ("2007".equals(excelVersion)) { response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); response.setHeader("Content-disposition", "inline;filename=" + inlineName + ".xlsx"); } else { throw new IllegalStateException( "Only 2003 and 2007 excel exports defined. Add another else if branch to add extra functionality."); } } public static void setupMIMEHeader(HttpServletResponse response, String fileName, Workbook wb) throws UnsupportedEncodingException { String excelVersion = ""; if (wb instanceof HSSFWorkbook) { excelVersion = "2003"; } else if (wb instanceof XSSFWorkbook) { excelVersion = "2007"; } setupMIMEHeader(response, fileName, excelVersion); } /** * * @param name * @param num * @return */ public static String getNumberedSheetName(String name, int num) { String name_suffix = (num > 0) ? SEPERATOR + num : ""; //check if the sheet name is valid StringBuilder sheetName = new StringBuilder(); for (int i = 0; i < name.length(); i++) { char ch = name.charAt(i); switch (ch) { case '/': case '\\': case '?': case '*': case ']': case '[': continue; default: if (sheetName.length() + name_suffix.length() < 31) { sheetName.append(ch); } else { break; } } } return sheetName.append(name_suffix).toString(); } /** * How many columns excel support * @param excelVersion * @return */ public static int getMaxColumns(String excelVersion) { if ("2003".equals(excelVersion)) { return SpreadsheetVersion.EXCEL97.getMaxColumns(); } else if ("2007".equals(excelVersion)) { return SpreadsheetVersion.EXCEL2007.getMaxColumns(); } else { throw new IllegalStateException( "Only 2003 and 2007 excel exports defined. Add another else if branch to add extra functionality."); } } /** * How many rows excel support * @param excelVersion * @return */ public static int getMaxRows(String excelVersion) { if ("2003".equals(excelVersion)) { return SpreadsheetVersion.EXCEL97.getMaxRows(); } else if ("2007".equals(excelVersion)) { return SpreadsheetVersion.EXCEL2007.getMaxRows(); } else { throw new IllegalStateException( "Only 2003 and 2007 excel exports defined. Add another else if branch to add extra functionality."); } } /** * Create often used styles in excel export * @param wb * @return */ public static Map<String, CellStyle> createDataStyles(Workbook wb) { Map<String, CellStyle> styles = new HashMap<String, CellStyle>(); CellStyle style = wb.createCellStyle(); Font font = wb.createFont(); font.setFontName("Arial"); font.setFontHeightInPoints((short) 9); style = wb.createCellStyle(); // set the data style style = wb.createCellStyle(); style.setFont(font); //4, "#,##0.00" style.setDataFormat((short) 4); styles.put("data", style); // set the gray style style = wb.createCellStyle(); style = wb.createCellStyle(); style.setFont(font); style.setDataFormat((short) 4); style.setFillForegroundColor(IndexedColors.GREY_40_PERCENT.getIndex()); style.setFillPattern(CellStyle.SOLID_FOREGROUND); styles.put("grayData", style); return styles; } /** * Create often used styles in excel export * @param wb * @return */ public static Map<String, CellStyle> createHeaderStyles(Workbook wb) { Map<String, CellStyle> styles = new HashMap<String, CellStyle>(); CellStyle style = wb.createCellStyle(); //cellDataFormat = wb.createDataFormat(); style.setFillForegroundColor(IndexedColors.PALE_BLUE.getIndex()); style.setFillPattern(CellStyle.SOLID_FOREGROUND); Font font = wb.createFont(); font.setFontName("Arial"); font.setFontHeightInPoints((short) 9); // font.setColor(HSSFColor.ROSE.index); style.setFont(font); styles.put("head", style); //set the yellow style style = wb.createCellStyle(); style.setFillForegroundColor(IndexedColors.LIGHT_BLUE.getIndex()); style.setFillPattern(CellStyle.SOLID_FOREGROUND); style.setFont(font); styles.put("lightblueHead", style); //blue gray style style = wb.createCellStyle(); style.setFont(font); style.setFillForegroundColor(IndexedColors.BLUE_GREY.getIndex()); style.setFillPattern(CellStyle.SOLID_FOREGROUND); styles.put("bluegrayHead", style); return styles; } /**Get double results from excel cell * for Strings and empty cell return null * @param cell * @return */ public static Double getDoubleCellValue(Cell cell) { if (cell == null) { return null; } try { switch (cell.getCellType()) { case Cell.CELL_TYPE_BOOLEAN: boolean val = cell.getBooleanCellValue(); return val ? 1d : 0d; case Cell.CELL_TYPE_NUMERIC: return cell.getNumericCellValue(); case Cell.CELL_TYPE_STRING: String strval = cell.getStringCellValue(); strval = StringUtils.replace(strval, "$", ""); strval = StringUtils.replace(strval, ",", ""); return Double.parseDouble(strval); default: //cell blank or other types return null; } } catch (Exception e) { e.printStackTrace(); //log the sheet name, row and column IDMLogHelper.error(53550027, cell.getSheet().getSheetName(), cell.getRow().getRowNum() + 1, convertNumToColString(cell.getColumnIndex()), cell.toString()); } return null; } /** * Excel column width is not set precise by autoSizeColumn, * it may different on different platforms, i.e. there can be minor differences between * text metrics calculated under Linux and under WinXP. * Need make the column width larger to look better. * @param st * @param j */ public static void widenColumn(Sheet st, int j){ //widen width use 3 char width st.setColumnWidth(j, st.getColumnWidth(j)+3*256); } }
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点!
本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。
最新资讯
热门推荐