Java使用Jsoup把html流转成Apache POI的EXCEL格式
需求
一些银行导出的excel真实格式为html,这种情况无法导入到系统,所以要程序中转换一下格式
通用方法
主要逻辑:Jsoup解析html获取所有table对象的行和列生成二维数组,再根据二维数组生成Workbook对象
注意: 表头部分有时候是<th>
标签
如何根据数据流判断是否为html格式,请看另一篇文章:Java获取文件真实格式
PoiUtils.java1 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
|
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); }
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; }
|