最近在做一个需求,需要将html文本中的内容提取出来,然后导出到excel里面,实现交代情景,html文本中存在许多标签,且很乱,因此需要之间将标签里面的文本提取出来,再进行处理。
............
String text = Jsoup.parse(content).wholeText();
// 解析字符串并将数据添加到表格
String[] dataArray = text.split("\n");
// 创建Excel工作簿和工作表
Workbook workbook = new XSSFWorkbook();
Sheet sheet = workbook.createSheet("Sheet");
int rowNum = 0;
Row row = null;
for (String data : dataArray) {
//对每一行数据进行处理,插入到Sheet中
............
row = sheet.createRow(rowNum++);
// 创建新行并填充数据
row.createCell(0).setCellValue(entry[0].trim());
row.createCell(1).setCellValue(entry[1].trim());
}
// 导出Excel
............
}
1.利用Jsoup解析HTML文档
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.14.3</version> <!-- 版本号可能需要根据实际情况调整 -->
</dependency>
Jsoup(发音为 “jay-soup”)是一款用于解析HTML文档、从HTML中提取数据和操作HTML的Java库。它提供了简单而直观的API,使得在Java中处理HTML变得非常容易。
Jsoup.parse(content).wholeText(); 这行代码是使用Jsoup库解析HTML内容并提取其中的纯文本信息。
-
1.Jsoup.parse(content): 这部分代码使用Jsoup的parse方法,将传入的content字符串解析为一个Jsoup的Document对象。Document对象表示整个HTML文档。
-
2.wholeText(): 一旦解析为Document对象,然后调用wholeText()方法。这个方法用于获取整个文档的纯文本内容,即去除HTML标签后的文本信息。
解析出来的文档里面包含了 /n 等转义字符,可用于后续的字符处理
2.使用 Apache POI 库创建Excel 文档
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>5.2.0</version> <!-- 版本号可能需要根据实际情况调整 -->
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.2.0</version> <!-- 版本号可能需要根据实际情况调整 -->
</dependency>
// 创建Excel工作簿和工作表
Workbook workbook = new XSSFWorkbook();
Sheet sheet = workbook.createSheet("Sheet");
- Workbook 类:
Workbook 是 Apache POI 中表示 Excel 工作簿(Workbook)的接口。
在这里,通过 new XSSFWorkbook() 创建了一个 XSSFWorkbook 对象,XSSFWorkbook 是 Workbook 接口的一个实现,用于处理基于 XML 格式的 .xlsx 文件(Excel 2007及以上版本)。 - Sheet 类:
Sheet 是 Workbook 中的一个接口,表示 Excel 工作簿中的一个表单或工作表。
通过 workbook.createSheet(“Sheet”) 创建了一个名为 “Sheet” 的工作表。可以通过不同的工作表名称创建多个工作表,每个工作表包含一组行和列,用于组织和存储数据。
这段代码创建了一个空的 Excel 工作簿,其中包含一个名为 “Sheet” 的工作表。一旦创建了工作簿和工作表,你可以通过 Apache POI 提供的 API 向工作表中添加数据、设置格式、创建图表等。这样你就能够使用 Java 编程来生成、修改和操作 Excel 文档。
3.按照一定规则插入表格数据
row = sheet.createRow(rowNum++);
// 创建新行并填充数据
row.createCell(0).setCellValue(entry[0].trim());
row.createCell(1).setCellValue(entry[1].trim());
4.导出excel
/**
* 将 Workbook 导出到 HttpServletResponse 输出流
*
* @param workbook Excel Workbook 对象
* @param fileName 导出文件名
*/
public void exportToResponse(Workbook workbook, String fileName) {
try {
// 设置响应头
httpServletResponse.setContentType("application/octet-stream");
httpServletResponse.setHeader("Content-Disposition", "attachment; filename=" + fileName);
// 将 Workbook 写入 HttpServletResponse 的输出流
workbook.write(httpServletResponse.getOutputStream());
workbook.close();
// 刷新响应
httpServletResponse.flushBuffer();
} catch (IOException e) {
// 处理异常
log.error("导出文件{}失败", fileName);
throw new BusinessException(BusinessError.EXPORT_FILE_FAIL);
}
}
- httpServletResponse.setContentType(“application/octet-stream”);:
通过 setContentType 方法设置响应的内容类型。在这里,设置为 application/octet-stream,表示二进制流数据。这个 MIME 类型通常用于下载文件,因为它指示浏览器应该处理响应的数据作为二进制流而不是尝试解析它。
- httpServletResponse.setHeader(“Content-Disposition”, “attachment; filename=” + fileName);:
通过 setHeader 方法设置响应头的属性。在这里,设置了 Content-Disposition 属性。
Content-Disposition 属性指示浏览器如何处理响应体。在这个上下文中,attachment 表示要将响应作为附件下载,而不是直接在浏览器中打开。filename 参数用于指定下载的文件名。
filename= 后面的部分是具体的文件名,通常是服务器上的文件名或者用户在下载时看到的文件名。
- workbook.write(httpServletResponse.getOutputStream());:
使用 Excel Workbook 对象的 write 方法将 Workbook 写入 HttpServletResponse 的输出流。这样,Excel 数据就会以二进制流的形式发送到客户端。
- workbook.close();
关闭 Workbook 对象,释放资源。
- httpServletResponse.flushBuffer();
刷新响应的缓冲区,确保所有的数据都被写入到输出流。