--- 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; } ```