读取 Excel(POI) 转 HTML

本文介绍如何使用Java的POI库将Excel文件转换为HTML,同时保留Excel的样式,包括单元格合并、边框和颜色。通过遍历文件夹中的所有Excel文件,将其内容和样式转换为网页显示。代码示例展示了具体的转换过程和关键方法。
摘要由CSDN通过智能技术生成
不知道大家有没有遇到把Excel 表格里面的内容输出到页面中的情况,反正小弟最近遇到了这种需求,就是Excel 里面有啥样式情况,那么网页中就是什么情况,由于Excel表格有很多,都在同一个文件夹下面,所以还需要遍历文件夹下所有的Excel 文件才行。
需求和图片效果请大家看下图:
这是Excel里面的样式以及内容,有单元格的合并,有边框,还有不同的颜色。
对应网页:

代码结构:可以建一个 java web 工程,也可以直接新建一个java 工程,我建的 java web 工程。

源代码:
POIReadExcel
package com.marvel.excel1129;
/**
 * @功能描述 POI 读取 Excel 转 HTML 支持 03xls 和 07xlsx 版本 包含样式
 * @创建时间 2016-11-29
 * @作者 marvel
 */
public class POIReadExcel {
	/**
     * 测试
     * @param args
     */
    public static String mains(String path) {
        InputStream is = null;
        String htmlExcel = null;
        try {
            File sourcefile = new File(path);
            is = new FileInputStream(sourcefile);
            Workbook wb = WorkbookFactory.create(is);// 此WorkbookFactory在POI-3.10版本中使用需要添加dom4j
            if (wb instanceof XSSFWorkbook) {
                XSSFWorkbook xWb = (XSSFWorkbook) wb;
                htmlExcel = POIReadExcel.getExcelInfo(xWb, true);
            } else if (wb instanceof HSSFWorkbook) {
                HSSFWorkbook hWb = (HSSFWorkbook) wb;
                htmlExcel = POIReadExcel.getExcelInfo(hWb, true);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                is.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
		return htmlExcel;
    }
    /**
     * 程序入口方法
     * 
     * @param filePath
     *            文件的路径
     * @param isWithStyle
     *            是否需要表格样式 包含 字体 颜色 边框 对齐方式
     * @return
     *         <table>
     *         ...
     *         </table>
     *         字符串
     */
    public String readExcelToHtml(String filePath, boolean isWithStyle) {
        InputStream is = null;
        String htmlExcel = null;
        try {
            File sourcefile = new File(filePath);
            is = new FileInputStream(sourcefile);
            Workbook wb = WorkbookFactory.create(is);
            if (wb instanceof XSSFWorkbook) {
                XSSFWorkbook xWb = (XSSFWorkbook) wb;
                htmlExcel = POIReadExcel.getExcelInfo(xWb, isWithStyle);
            } else if (wb instanceof HSSFWorkbook) {
                HSSFWorkbook hWb = (HSSFWorkbook) wb;
                htmlExcel = POIReadExcel.getExcelInfo(hWb, isWithStyle);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                is.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return htmlExcel;
    }
    public static String getExcelInfo(Workbook wb, boolean isWithStyle) {
        StringBuffer sb = new StringBuffer();
        Sheet sheet = wb.getSheetAt(0);// 获取第一个Sheet的内容
        int lastRowNum = sheet.getLastRowNum();
        Map<String, String> map[] = getRowSpanColSpanMap(sheet);
        sb.append("<table style='border-collapse:collapse;' width='100%'>");
        Row row = null; // 兼容
        Cell cell = null; // 兼容
        for (int rowNum = sheet.getFirstRowNum(); rowNum <= lastRowNum; rowNum++) {
            row = sheet.getRow(rowNum);
            if (row == null) {
                sb.append("<tr><td >  </td></tr>");
                continue;
            }
            sb.append("<tr>");
            int lastColNum = row.getLastCellNum();
            for (int colNum = 0; colNum < lastColNum; colNum++) {
                cell = row.getCell(colNum);
                if (cell == null) { // 特殊情况 空白的单元格会返回null
                    sb.append("<td> </td>");
                    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("<td rowspan= '" + rowSpan + "' colspan= '" + colSpan + "' ");
                } else if (map[1].containsKey(rowNum + "," + colNum)) {
                    map[1].remove(rowNum + "," + colNum);
                    continue;
                } else {
                    sb.append("<td ");
                }
                // 判断是否需要样式
                if (isWithStyle) {
                    dealExcelStyle(wb, sheet, cell, sb);// 处理单元格样式
                }
                sb.append(">");
                if (stringValue == null || "".equals(stringValue.trim())) {
                    sb.append("   ");
                } else {
                    // 将ascii码为160的空格转换为html下的空格( )
                	if(stringValue.contains("x")){
                	sb.append("<input type='text' id='"+stringValue+"' name='"+stringValue+"' value='' />");
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值