用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - java代码库

利用POI读取excel文件,转换为html

2012-10-07 作者: 小蜜锋举报

[java]代码库

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下的空格(&nbsp;)
                    sb.append(stringValue.replace(String.valueOf((char) 160),
                            "&nbsp;"));
                }
                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 "";
        }
    }
}


网友评论    (发表评论)


发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

输入口令后可复制整站源码

加载中,请稍后...