如何在保持样式和应用冻结窗格的同时将 HTML table 导出为 Excel
How to Export an HTML table as an Excel while maintaining style and applying freeze pane
我正在从事一个项目,其中需要为特定 HTML table 导出 Excel 功能。 tables 风格需要保持。此外,需要将元数据部分添加到 Excel(html table 中不存在)并且需要冻结此部分。
我尝试通过使用 JSoup 解析 html 并使用 Apache POI 创建 excel 文件来实现这一点,但我找不到保留样式的方法。 html 样式标签中存储的值不直接等同于 POI 中的任何样式。
在我开始处理它之前,该应用程序已经具有将 table 导出到 excel 的功能,方法是将其转换为字节并使用 FileOutPutStream 写入并为其提供 xls 扩展名。这允许保持样式,但由于它在技术上不是 xls 格式的文件,我无法使用 POI 读取它并应用冻结。
有没有办法读取应用程序已经创建的文件并应用冻结,或者在保持样式和应用冻结窗格的同时将 table 转换为 xls?
或者,如果有任何方法可以将 table 导出到有效的 excel 文件并保持样式,我可以在该文件中读取 POI 并应用冻结。
我相信您正在寻找一种直接的方法,但事实是您做不到。 Google Spreadsheets
等某些技术可以通过从 table 的每个单元格中提取数据并将数据格式化为可在 Microsoft Office Excel 等其他应用程序中使用来实现此目的。没有 JS 命令可以为您完成所有这些工作......如果您不想,您可以研究 MSOE 的格式,然后自己弄清楚如何编写一个脚本来提取数据,并将其格式化可以将其视为 excel 文档。
更好的解决方案
[先阅读上面的方块]
要求用户将 table 复制并粘贴到 excel 文档中……这将非常有效。如果用户无论如何都要打开 excel 文档,为什么不让它们复制粘贴...让用户更方便,然后先了解 MSOE 的工作原理。
更新
我找到了更好的解决方案:
http://www.codeproject.com/Tips/755203/Export-HTML-table-to-Excel-With-CSS
使用 JS 代码并进行修改以满足您的 table 需求
我最终通过添加到使用 jsoup 和 apache POI 创建 xls 文件的原始 class 来实现这一点。我能够使用 jsoup 检索所有 html 元素的 'style' 标签的内容作为字符串,然后解析这些字符串以查找字体系列、字体大小等,任何可以应用于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;
}
我正在从事一个项目,其中需要为特定 HTML table 导出 Excel 功能。 tables 风格需要保持。此外,需要将元数据部分添加到 Excel(html table 中不存在)并且需要冻结此部分。
我尝试通过使用 JSoup 解析 html 并使用 Apache POI 创建 excel 文件来实现这一点,但我找不到保留样式的方法。 html 样式标签中存储的值不直接等同于 POI 中的任何样式。
在我开始处理它之前,该应用程序已经具有将 table 导出到 excel 的功能,方法是将其转换为字节并使用 FileOutPutStream 写入并为其提供 xls 扩展名。这允许保持样式,但由于它在技术上不是 xls 格式的文件,我无法使用 POI 读取它并应用冻结。
有没有办法读取应用程序已经创建的文件并应用冻结,或者在保持样式和应用冻结窗格的同时将 table 转换为 xls?
或者,如果有任何方法可以将 table 导出到有效的 excel 文件并保持样式,我可以在该文件中读取 POI 并应用冻结。
我相信您正在寻找一种直接的方法,但事实是您做不到。 Google Spreadsheets
等某些技术可以通过从 table 的每个单元格中提取数据并将数据格式化为可在 Microsoft Office Excel 等其他应用程序中使用来实现此目的。没有 JS 命令可以为您完成所有这些工作......如果您不想,您可以研究 MSOE 的格式,然后自己弄清楚如何编写一个脚本来提取数据,并将其格式化可以将其视为 excel 文档。
更好的解决方案
[先阅读上面的方块]
要求用户将 table 复制并粘贴到 excel 文档中……这将非常有效。如果用户无论如何都要打开 excel 文档,为什么不让它们复制粘贴...让用户更方便,然后先了解 MSOE 的工作原理。
更新
我找到了更好的解决方案:
http://www.codeproject.com/Tips/755203/Export-HTML-table-to-Excel-With-CSS
使用 JS 代码并进行修改以满足您的 table 需求
我最终通过添加到使用 jsoup 和 apache POI 创建 xls 文件的原始 class 来实现这一点。我能够使用 jsoup 检索所有 html 元素的 'style' 标签的内容作为字符串,然后解析这些字符串以查找字体系列、字体大小等,任何可以应用于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;
}