Java 之Excel 转HTML 篇

15 篇文章 0 订阅

import java.io.BufferedOutputStream;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.net.URISyntaxException;
import java.util.List;

import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.apache.commons.io.output.ByteArrayOutputStream;
import org.apache.commons.lang3.StringEscapeUtils;
import org.apache.poi.hssf.converter.ExcelToHtmlConverter;
import org.apache.poi.hssf.usermodel.HSSFPictureData;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;
import org.slf4j.LoggerFactory;
import org.w3c.dom.Document;

/**
 * java将excel转换为HTML
 * 
 * @author wu.85@163.com
 */
public class Excel2Html {

    private static final org.slf4j.Logger logger = LoggerFactory.getLogger(Excel2Html.class.getName());
    private static final String DEFAULT_PICTURE_FOLDER = "picturess";
    private static final String DEFAULT_HTML_TYPE = ".html";// 默认转换的HTML文件后缀

    public static void main(String[] args) throws URISyntaxException {
        File outputFolder = null;
        File outputPictureFolder = null;
        // 转换后HTML文件存放位置 Excel2Html.class.getResource("").toURI()
        outputFolder = new File("G:\\");
        if (null != outputFolder) {
            // 转换后原excel中图片存放位置
            String outputPictureFolderPath = outputFolder.getAbsolutePath() + File.separator + DEFAULT_PICTURE_FOLDER;
            outputPictureFolder = new File(outputPictureFolderPath);
            outputPictureFolder.mkdir();
        }
        try {
            // 被转换的excel文件
            File convertedWordFile = new File(
                    "G:\\test.xls");
            convert2Html(convertedWordFile, outputFolder, outputPictureFolder);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void excel2Html(String htmlUrl,String excelUrl) {
        File outputFolder = null;
        File outputPictureFolder = null;
        // 转换后HTML文件存放位置 Excel2Html.class.getResource("").toURI()
        outputFolder = new File(htmlUrl);
        if (null != outputFolder) {
            // 转换后原excel中图片存放位置
            String outputPictureFolderPath = outputFolder.getAbsolutePath() + File.separator + DEFAULT_PICTURE_FOLDER;
            outputPictureFolder = new File(outputPictureFolderPath);
            outputPictureFolder.mkdir();
        }
        try {
            // 被转换的excel文件
            File convertedWordFile = new File(excelUrl);
            convert2Html(convertedWordFile, outputFolder, outputPictureFolder);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void writeFile(String content, String path) {
        FileOutputStream fos = null;
        BufferedWriter bw = null;
        try {
            File file = new File(path);
            fos = new FileOutputStream(file);
            bw = new BufferedWriter(new OutputStreamWriter(fos, "UTF-8"));
            bw.write(content);
        } catch (FileNotFoundException fnfe) {
            fnfe.printStackTrace();
        } catch (IOException ioe) {
            ioe.printStackTrace();
        } finally {
            try {
                if (bw != null)
                    bw.close();
                if (fos != null)
                    fos.close();
            } catch (IOException ie) {
            }
        }
    }

    public static Workbook getWorkbook(File file) {
        Workbook workbook = null;
        try {
            if (null != file && file.exists()) {
                workbook = WorkbookFactory.create(file);
            }
        } catch (IOException e) {
            logger.error("IOException in getWorkbook:", e);
        } catch (InvalidFormatException e) {
            logger.error("InvalidFormatException in getWorkbook:", e);
        }
        return workbook;
    }

    /**
     * @param excelFile
     *            被转换的word文件
     * @param outputFolder
     *            转换后HTML文件存放位置
     * @param outputPictureFolder
     *            转换后原word中图片存放位置
     * @throws TransformerException
     * @throws IOException
     * @throws ParserConfigurationException
     */
    @SuppressWarnings("deprecation")
    public static void convert2Html(File excelFile, File outputFolder, final File outputPictureFolder)
            throws TransformerException, IOException, ParserConfigurationException {
        // 创建excel ExcelToHtmlConverter对象
        ExcelToHtmlConverter excelToHtmlConverter = new ExcelToHtmlConverter(
                DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument());
        excelToHtmlConverter.setOutputColumnHeaders(false);
        excelToHtmlConverter.setOutputRowNumbers(false);

        // 创建POI工作薄对象
        HSSFWorkbook workbook = (HSSFWorkbook) getWorkbook(excelFile);
        excelToHtmlConverter.processWorkbook(workbook);

        Document htmlDocument = excelToHtmlConverter.getDocument();
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        DOMSource domSource = new DOMSource(htmlDocument);
        StreamResult streamResult = new StreamResult(out);

        TransformerFactory tf = TransformerFactory.newInstance();
        Transformer serializer = tf.newTransformer();
        serializer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
        serializer.setOutputProperty(OutputKeys.INDENT, "yes");
        serializer.setOutputProperty(OutputKeys.METHOD, "html");
        serializer.transform(domSource, streamResult);
        
        String html = new String(out.toByteArray());
        
        int tbodya = html.indexOf("<tbody>");
        int tbodyb = html.indexOf("</tbody>");
        
        //tbody 转义之前的String
        String tbodyQ = html.substring(tbodya, tbodyb+8);
        //tbody 转义之后的String
        String tbodyH = StringEscapeUtils.unescapeXml(tbodyQ);
        html = html.replace(tbodyQ,tbodyH);
        
//        writePicures(workbook.getAllPictures(), outputPictureFolder.getAbsolutePath() + File.separator);
        writeFile(html,
                outputFolder.getAbsolutePath() + File.separator + excelFile.getName().replaceAll(".xls","") + DEFAULT_HTML_TYPE);
        out.close();
    }

    public static void writePicures(List<HSSFPictureData> pics, String picturesFolder) throws IOException {
        if (pics != null) {
            int count = 0;
            for (int i = 0; i < pics.size(); i++) {
                HSSFPictureData picData = pics.get(i);
                
                if (null == picData) {
                    continue;
                }
                byte[] bytes = picData.getData();
                FileOutputStream output = new FileOutputStream(
                        picturesFolder + count + "." + picData.suggestFileExtension());
                BufferedOutputStream writer = new BufferedOutputStream(output);
                writer.write(bytes);
                writer.flush();
                writer.close();
                output.close();
                count++;
            }
        }
    }

}
 

结果如下:

 

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
要将Excel换为HTML格式,可以使用Java中的Apache POI和JExcelApi这两个库。 下面是使用Apache POI将Excel换为HTML的示例代码: ```java import java.io.*; import org.apache.poi.hssf.usermodel.*; import org.apache.poi.ss.util.*; import org.apache.poi.ss.usermodel.*; public class ExcelToHtmlConverter { public static void main(String[] args) throws Exception { FileInputStream input = new FileInputStream(new File("input.xls")); HSSFWorkbook workbook = new HSSFWorkbook(input); HSSFSheet sheet = workbook.getSheetAt(0); HtmlFileGenerator htmlGenerator = new HtmlFileGenerator(); htmlGenerator.generateHtmlFile(sheet); workbook.close(); input.close(); } } class HtmlFileGenerator { public void generateHtmlFile(HSSFSheet sheet) throws Exception { PrintWriter writer = new PrintWriter(new FileWriter("output.html")); writer.println("<html>"); writer.println("<body>"); writer.println("<table border=\"1\">"); for (Row row : sheet) { writer.println("<tr>"); for (Cell cell : row) { writer.print("<td>"); switch (cell.getCellType()) { case Cell.CELL_TYPE_STRING: writer.print(cell.getRichStringCellValue().getString()); break; case Cell.CELL_TYPE_NUMERIC: if (DateUtil.isCellDateFormatted(cell)) { writer.print(cell.getDateCellValue()); } else { writer.print(cell.getNumericCellValue()); } break; case Cell.CELL_TYPE_BOOLEAN: writer.print(cell.getBooleanCellValue()); break; case Cell.CELL_TYPE_FORMULA: writer.print(cell.getCellFormula()); break; default: writer.print(""); } writer.println("</td>"); } writer.println("</tr>"); } writer.println("</table>"); writer.println("</body>"); writer.println("</html>"); writer.close(); } } ``` 这个示例代码将Excel文件(input.xls)换为HTML文件(output.html),并将Excel中的数据以表格形式展示在HTML页面中。 通过这个示例代码,你可以了解到如何使用Apache POI将Excel文件换为HTML文件。如果要使用JExcelApi来实现这个功能,可以参考JExcelApi的官方文档。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值