---
title: Java使用Jsoup把html流转成Apache POI的EXCEL格式
date: 2020-01-16 13:16:32
description: Java使用JavaCSV把CSV流转成Apache POI的EXCEL格式,可用于文件格式互转和一些其他处理
categories: [技术总结]
tags: [Java, Jsoup, Apache, POI, Excel]
---
## 需求
一些银行导出的excel真实格式为html,这种情况无法导入到系统,所以要程序中转换一下格式
### 通用方法
主要逻辑:Jsoup解析html获取所有table对象的行和列生成二维数组,再根据二维数组生成Workbook对象
> **注意:** 表头部分有时候是`
`标签
如何根据数据流判断是否为html格式,请看另一篇文章:[Java获取文件真实格式](/2020/01/16/java-input-stream-get-file-type)
```java PoiUtils.java
/**
* html格式的流转成xls格式的workbook
*/
public static Workbook getWorkbookByHtml(InputStream inputStream) throws IOException {
Document document = Jsoup.parse(inputStream, "UTF-8", "");
ArrayList dataList = new ArrayList<>();
Elements rows = document.getElementsByTag("tr");
for (Element row : rows) {
List 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 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;
}
``` |