import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.util.HashMap; 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.HSSFPalette; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.hssf.util.HSSFColor; import org.apache.poi.poifs.filesystem.POIFSFileSystem; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.util.CellRangeAddress; /** * 利用POI读取excel,转换为html * */ public class POIReadExcel { public static void main(String[] args) { try { POIReadExcel poire = new POIReadExcel(); String path = "D:\\test.xls"; File sourcefile = new File(path); InputStream is = new FileInputStream(sourcefile); POIFSFileSystem fs = new POIFSFileSystem(is); HSSFWorkbook wb = new HSSFWorkbook(fs); System.out.println(poire.getExcelInfo(wb)); is.close(); } catch (Exception e) { e.printStackTrace(); } } public String getExcelInfo(HSSFWorkbook wb) throws Exception { StringBuffer sb = new StringBuffer(); Sheet sheet = wb.getSheetAt(0); int lastRowNum = sheet.getLastRowNum(); Map map[] = getRowSpanColSpanMap(sheet); sb.append(" "); HSSFRow row = null; HSSFCell cell = null; // System.out.println(sheet.getPhysicalNumberOfRows()); for (int rowNum = sheet.getFirstRowNum(); rowNum < lastRowNum; rowNum++) { row = (HSSFRow) sheet.getRow(rowNum); if (row == null) { sb.append(" "); continue; } sb.append(" "); int lastColNum = row.getLastCellNum(); for (int colNum = 0; colNum < lastColNum; colNum++) { cell = row.getCell(colNum); if (cell == null) { sb.append(" "); continue; } String stringValue = getCellValue(cell); if (map[0].containsKey(rowNum + "," + colNum)) { String pointString = map[0].get(rowNum + "," + colNum); map[0].remove(rowNum + "," + colNum); int bottomeRow = Integer.valueOf(pointString.split(",")[0]); int bottomeCol = Integer.valueOf(pointString.split(",")[1]); int rowSpan = bottomeRow - rowNum + 1; int colSpan = bottomeCol - colNum + 1; sb.append(" "); } else if (map[1].containsKey(rowNum + "," + colNum)) { map[1].remove(rowNum + "," + colNum); continue; } else { sb.append(" "); } HSSFCellStyle cellStyle = cell.getCellStyle(); if (cellStyle != null) { short alignment = cellStyle.getAlignment(); sb.append("align='" + convertAlignToHtml(alignment) + "' "); short verticalAlignment = cellStyle.getVerticalAlignment(); sb.append("valign='" + convertVerticalAlignToHtml(verticalAlignment) + "' "); HSSFFont hf = cellStyle.getFont(wb); short boldWeight = hf.getBoldweight(); short fontColor = hf.getColor(); sb.append("style='"); HSSFPalette palette = wb.getCustomPalette(); // 类HSSFPalette用于求的颜色的国际标准形式 HSSFColor hc = palette.getColor(fontColor); sb.append("font-weight:" + boldWeight + ";"); // 字体加粗 // System.out.println(hf.getFontHeight()); sb.append("font-size: " + hf.getFontHeight() / 2 + "%;"); // 字体大小 String fontColorStr = convertToStardColor(hc); if (fontColorStr != null && !"".equals(fontColorStr.trim())) { sb.append("color:" + fontColorStr + ";"); // 字体颜色 } short bgColor = cellStyle.getFillForegroundColor(); hc = palette.getColor(bgColor); String bgColorStr = convertToStardColor(hc); if (bgColorStr != null && !"".equals(bgColorStr.trim())) { sb.append("background-color:" + bgColorStr + ";"); // 背景颜色 } short borderColor = cellStyle.getBottomBorderColor(); hc = palette.getColor(borderColor); String borderColorStr = convertToStardColor(hc); if (borderColorStr != null && !"".equals(borderColorStr.trim())) { sb.append("border-color:" + borderColorStr + ";"); // 边框颜色 } // boolean borderBoolean = cellStyle.getWrapText(); // // if(borderBoolean){ // sb.append("border-style: inset;"); // } sb.append("' "); } sb.append(">"); if (stringValue == null || "".equals(stringValue.trim())) { sb.append(" "); } else { // 将ascii码为160的空格转换为html下的空格( ) sb.append(stringValue.replace(String.valueOf((char) 160), " ")); } sb.append(" "); } sb.append(" "); } sb.append(" "); return sb.toString(); } @SuppressWarnings("unchecked") private Map[] getRowSpanColSpanMap(Sheet sheet) { Map map0 = new HashMap(); Map map1 = new HashMap(); int mergedNum = sheet.getNumMergedRegions(); CellRangeAddress range = null; for (int i = 0; i < mergedNum; i++) { range = sheet.getMergedRegion(i); int topRow = range.getFirstRow(); int topCol = range.getFirstColumn(); int bottomRow = range.getLastRow(); int bottomCol = range.getLastColumn(); map0.put(topRow + "," + topCol, bottomRow + "," + bottomCol); // System.out.println(topRow + "," + topCol + "," + bottomRow + "," // + bottomCol); int tempRow = topRow; while (tempRow <= bottomRow) { int tempCol = topCol; while (tempCol <= bottomCol) { map1.put(tempRow + "," + tempCol, ""); tempCol++; } tempRow++; } map1.remove(topRow + "," + topCol); } Map[] map = { map0, map1 }; return map; } private String convertAlignToHtml(short alignment) { String align = "left"; switch (alignment) { case HSSFCellStyle.ALIGN_LEFT: align = "left"; break; case HSSFCellStyle.ALIGN_CENTER: align = "center"; break; case HSSFCellStyle.ALIGN_RIGHT: align = "right"; break; default: break; } return align; } private String convertVerticalAlignToHtml(short verticalAlignment) { String valign = "middle"; switch (verticalAlignment) { case HSSFCellStyle.VERTICAL_BOTTOM: valign = "bottom"; break; case HSSFCellStyle.VERTICAL_CENTER: valign = "center"; break; case HSSFCellStyle.VERTICAL_TOP: valign = "top"; break; default: break; } return valign; } private String convertToStardColor(HSSFColor hc) { StringBuffer sb = new StringBuffer(""); if (hc != null) { if (HSSFColor.AUTOMATIC.index == hc.getIndex()) { return null; } sb.append("#"); for (int i = 0; i < hc.getTriplet().length; i++) { sb.append(fillWithZero(Integer.toHexString(hc.getTriplet()[i]))); } } return sb.toString(); } private String fillWithZero(String str) { if (str != null && str.length() < 2) { return "0" + str; } return str; } private String getCellValue(HSSFCell cell) { switch (cell.getCellType()) { case HSSFCell.CELL_TYPE_NUMERIC: DecimalFormat format = new DecimalFormat("#0.##"); return format.format(cell.getNumericCellValue()); // return String.valueOf(cell.getNumericCellValue()); case HSSFCell.CELL_TYPE_STRING: return cell.getStringCellValue(); // case HSSFCell.CELL_TYPE_FORMULA: // // return cell.getCellFormula(); default: return ""; } } }