我正在开发一个项目,其中特定HTML表需要导出到Excel功能。需要维护表格样式。此外,需要将元数据部分添加到Excel(不存在于html表中),并且需要冻结此部分。
我尝试通过使用JSoup解析html并使用Apache POI创建excel文件来实现这一点,但我找不到保留样式的方法。存储在html样式标记中的值不会直接等同于POI中的任何样式。
在我开始处理它之前,应用程序已经有了一个函数,通过将表转换为字节并使用FileOutPutStream写入并为其提供xls扩展,将表导出为excel。这允许维护样式,但由于它在技术上不是xls格式的文件,因此我无法使用POI读取它并应用冻结。
有没有办法读取应用程序已创建的文件并应用冻结,或者在保持样式和应用冻结窗格的同时将表转换为xls?
或者,如果有任何方法可以将表导出到保持样式的有效excel文件,那么我可以在该文件中读取POI并应用冻结。
答案 0 :(得分:0)
我相信你正在寻找一种直接的方法,但事实是你不能这样做。某些技术(如Google Spreadsheets
)可以通过从表的每个单元格中提取数据,并将数据格式化为可在其他应用程序(如Microsoft Office Excel)中使用来实现此目的。没有JS命令可以为你完成所有这些工作...如果你不能研究如何格式化MSOE,并自己弄清楚如何编写将提取数据的脚本,并格式化它可以被视为一个excel文档。
更好的解决方案
[首先阅读上面的栏目]
要求用户将表格复制并粘贴到Excel文档中...这将完美地运行。如果用户打算打开excel文档,为什么不让它们复制粘贴...以使用户更方便,然后首先了解MSOE的工作原理。
<强>更新强>
我找到了一个更好的解决方案:
http://www.codeproject.com/Tips/755203/Export-HTML-table-to-Excel-With-CSS
使用JS代码并修改以满足您的表需求
答案 1 :(得分:0)
我最终通过添加到使用jsoup和apache POI创建xls文件的原始类来实现此目的。我能够检索出&#39; style&#39;的内容。使用jsoup将所有html元素标记为字符串,然后解析那些寻找font-family,font-size等的字符串,以及可以作为格式应用于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;
}