Java使用Jsoup把html流转成Apache POI的EXCEL格式

需求

一些银行导出的excel真实格式为html,这种情况无法导入到系统,所以要程序中转换一下格式

通用方法

主要逻辑:Jsoup解析html获取所有table对象的行和列生成二维数组,再根据二维数组生成Workbook对象

注意: 表头部分有时候是<th>标签

如何根据数据流判断是否为html格式,请看另一篇文章:Java获取文件真实格式

PoiUtils.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
/**
* html格式的流转成xls格式的workbook
*/
public static Workbook getWorkbookByHtml(InputStream inputStream) throws IOException {
Document document = Jsoup.parse(inputStream, "UTF-8", "");
ArrayList<String[]> dataList = new ArrayList<>();
Elements rows = document.getElementsByTag("tr");
for (Element row : rows) {
List<String> temp = new ArrayList<>();
Elements ths = row.getElementsByTag("th");
for (Element th : ths) {
temp.add(th.text());
}
Elements tds = row.getElementsByTag("td");
for (Element td : tds) {
temp.add(td.text());
}
String[] array = new String[temp.size()];
temp.toArray(array);
dataList.add(array);
}
return getWorkbook(dataList);
}
/**
* 二维数组生成workbook对象
*/
private static Workbook getWorkbook(ArrayList<String[]> dataList) {
HSSFWorkbook result = new HSSFWorkbook();
HSSFSheet sheet = result.createSheet("new sheet");

for (int rowNum = 0; rowNum < dataList.size(); rowNum++) {
String[] data = dataList.get(rowNum);
HSSFRow row = sheet.createRow(rowNum);
for (int columnNum = 0; columnNum < data.length; columnNum++) {
HSSFCell cell = row.createCell(columnNum);
cell.setCellValue(data[columnNum]);
}
}
return result;
}
文章目录
  1. 1. 需求
    1. 1.1. 通用方法