java html转excel,带格式
时间: 2024-01-01 21:05:11 浏览: 129
你可以使用 Apache POI 库来实现将 HTML 转为 Excel,并且保留原有的格式。具体的步骤如下:
1. 使用 Jsoup 解析 HTML,获取表格数据。
2. 使用 Apache POI 创建一个新的 Excel 工作簿,并创建一个新的工作表。
3. 遍历表格数据,将数据写入 Excel 工作表中。
4. 针对不同的 HTML 标签,使用不同的格式化方式来设置单元格格式,例如字体、颜色、边框等。
5. 将生成的 Excel 工作簿输出到文件或内存中。
下面是一个简单的示例代码:
```java
import java.io.*;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.*;
import org.jsoup.*;
import org.jsoup.nodes.*;
import org.jsoup.select.*;
public class HtmlToExcel {
public static void main(String[] args) throws Exception {
// 解析 HTML
Document doc = Jsoup.parse(new File("input.html"), "UTF-8");
Element table = doc.selectFirst("table");
// 创建 Excel 工作簿和工作表
Workbook wb = new XSSFWorkbook();
Sheet sheet = wb.createSheet("Sheet1");
// 遍历表格数据,将数据写入 Excel 工作表中
Elements rows = table.select("tr");
for (int r = 0; r < rows.size(); r++) {
Element row = rows.get(r);
Row excelRow = sheet.createRow(r);
Elements cols = row.select("td,th");
for (int c = 0; c < cols.size(); c++) {
Element col = cols.get(c);
Cell excelCell = excelRow.createCell(c);
excelCell.setCellValue(col.text());
// 根据 HTML 标签设置单元格格式
if (col.tagName().equals("th")) {
excelCell.setCellStyle(getHeaderCellStyle(wb));
} else {
excelCell.setCellStyle(getDataCellStyle(wb));
}
}
}
// 输出 Excel 工作簿到文件
FileOutputStream fileOut = new FileOutputStream("output.xlsx");
wb.write(fileOut);
fileOut.close();
System.out.println("Excel 已生成。");
}
// 获取表头单元格格式
private static CellStyle getHeaderCellStyle(Workbook wb) {
CellStyle style = wb.createCellStyle();
style.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());
style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
style.setAlignment(HorizontalAlignment.CENTER);
style.setVerticalAlignment(VerticalAlignment.CENTER);
Font font = wb.createFont();
font.setBold(true);
style.setFont(font);
return style;
}
// 获取数据单元格格式
private static CellStyle getDataCellStyle(Workbook wb) {
CellStyle style = wb.createCellStyle();
style.setAlignment(HorizontalAlignment.LEFT);
style.setVerticalAlignment(VerticalAlignment.CENTER);
style.setBorderTop(BorderStyle.THIN);
style.setBorderBottom(BorderStyle.THIN);
style.setBorderLeft(BorderStyle.THIN);
style.setBorderRight(BorderStyle.THIN);
return style;
}
}
```
这个示例代码会将名为 "input.html" 的 HTML 文件转为名为 "output.xlsx" 的 Excel 文件,并且保留原有的格式。你可以根据自己的需求对单元格格式进行调整。
阅读全文