Java 如何在保持样式和应用冻结窗格的同时将HTML表导出为Excel

Java 如何在保持样式和应用冻结窗格的同时将HTML表导出为Excel,java,html,excel,apache-poi,jsoup,Java,Html,Excel,Apache Poi,Jsoup,我正在从事一个项目,其中特定HTML表需要导出到Excel功能。需要维护表格样式。此外,需要将元数据部分添加到Excel(html表中不存在),并且需要冻结此部分 我试图通过使用JSoup解析html并使用ApachePOI创建excel文件来实现这一点,但我找不到保留样式的方法。html样式标记中存储的值并不直接等同于POI中的任何样式 在我开始使用它之前,应用程序已经有了一个将表导出到excel的功能,方法是将表转换为字节,并使用FileOutPutStream编写它,并给它一个xls扩展名

我正在从事一个项目,其中特定HTML表需要导出到Excel功能。需要维护表格样式。此外,需要将元数据部分添加到Excel(html表中不存在),并且需要冻结此部分

我试图通过使用JSoup解析html并使用ApachePOI创建excel文件来实现这一点,但我找不到保留样式的方法。html样式标记中存储的值并不直接等同于POI中的任何样式

在我开始使用它之前,应用程序已经有了一个将表导出到excel的功能,方法是将表转换为字节,并使用FileOutPutStream编写它,并给它一个xls扩展名。这允许保留样式,但由于它在技术上不是xls格式的文件,我无法用POI读入并应用冻结

有没有办法读入应用程序已经创建的文件并应用冻结,或者在保持样式和应用冻结窗格的同时将表转换为xls


或者,如果有任何方法可以将表格导出到有效的excel文件并保持样式,那么我可以让POI读取该文件并应用冻结。

我相信您正在寻找一种直接的方法,但事实是您不能。一些技术,如
googlespreadsheets
,可以通过从表的每个单元格提取数据,并格式化数据以在另一个应用程序(如Microsoft Office Excel)中使用来实现这一点。没有JS命令可以为您完成所有这些工作。。。如果您不想,您可以研究MSOE是如何格式化的,并自行决定如何编写一个脚本来提取数据,并对其进行格式化,以便将其视为excel文档

更好的解决方案
[先阅读上面的方框]
请用户将表格复制并粘贴到excel文档中。。。这将非常有效。如果用户要以任何方式打开excel文档,为什么不让他们复制粘贴。。。为了让用户更方便,首先要了解MSOE的工作原理

更新 我找到了更好的解决方案:


使用JS代码并进行修改以满足表的需要

我最终实现了这一点,方法是将使用jsoup和apache POI创建xls文件的原始类添加到该类中。我能够使用jsoup将所有html元素的“样式”标记的内容检索为字符串,然后解析这些字符串,查找字体系列、字体大小等,任何可以作为格式应用于Excel的内容。对于每个属性,我必须弄清楚如何将特定的html样式转换为POI中的cellStyle。以下是使用rgb样式的字体颜色示例:

private HSSFFont setFontColor(HSSFWorkbook wb, HSSFFont font, String colorCode) {
    HSSFPalette palette = wb.getCustomPalette();

    // if format is rgb(x,y,z) form, retrieve the 3 numbers within the
    // parentheses
    colorCode = colorCode.trim();
    if (colorCode.toLowerCase().startsWith("rgb")) {
        String rgbNumString = colorCode.substring(3, colorCode.length()).trim();
        rgbNumString = rgbNumString.substring(1, rgbNumString.length()-1).trim();
        String[] rgbNums = StringUtils.split(rgbNumString, ",");
        int[] rgbInts = { Integer.parseInt(rgbNums[0].trim()),
                Integer.parseInt(rgbNums[1].trim()),
                Integer.parseInt(rgbNums[2].trim()) };
        HSSFColor color = palette.findSimilarColor(rgbInts[0], rgbInts[1], rgbInts[2]);
        short palIndex = color.getIndex();
        font.setColor(palIndex);
        return font;
    } 
    return font;
}

我不知道我一定在寻找一种直接的方法,我在寻找任何可以实现的方法。我还没有找到任何可行的方法,包括你的建议。我查看了谷歌电子表格,它看起来就像Excel一样是一个电子表格编辑器。此外,很明显,要求用户手动复制和粘贴数据不是一个选项。谷歌电子表格允许您导出到谷歌电子表格。。。试试这个链接:我这里有一个项目可以这样做:github.com/alanhay/html-exporter。工作正在进行中,但需要处理足够多的CSS子集,以便很好地格式化报告。还支持冻结窗格、多页、公式。链接到自述页面上的示例XLS。使用您建议的JSoup/ApachePOI方法,但使用额外的CSS解析器通过元素上定义的块或内联样式处理样式。