Java實(shí)現(xiàn)讀取html文本內(nèi)容并按照格式導(dǎo)出到excel中
最近在做一個(gè)需求,需要將html文本中的內(nèi)容提取出來,然后導(dǎo)出到excel里面,實(shí)現(xiàn)交代情景,html文本中存在許多標(biāo)簽,且很亂,因此需要之間將標(biāo)簽里面的文本提取出來,再進(jìn)行處理。
............ String text = Jsoup.parse(content).wholeText(); // 解析字符串并將數(shù)據(jù)添加到表格 String[] dataArray = text.split("\n"); // 創(chuàng)建Excel工作簿和工作表 Workbook workbook = new XSSFWorkbook(); Sheet sheet = workbook.createSheet("Sheet"); int rowNum = 0; Row row = null; for (String data : dataArray) { //對(duì)每一行數(shù)據(jù)進(jìn)行處理,插入到Sheet中 ............ row = sheet.createRow(rowNum++); // 創(chuàng)建新行并填充數(shù)據(jù) row.createCell(0).setCellValue(entry[0].trim()); row.createCell(1).setCellValue(entry[1].trim()); } // 導(dǎo)出Excel ............ }
1.利用Jsoup解析HTML文檔
<dependency> <groupId>org.jsoup</groupId> <artifactId>jsoup</artifactId> <version>1.14.3</version> <!-- 版本號(hào)可能需要根據(jù)實(shí)際情況調(diào)整 --> </dependency>
Jsoup(發(fā)音為 “jay-soup”)是一款用于解析HTML文檔、從HTML中提取數(shù)據(jù)和操作HTML的Java庫(kù)。它提供了簡(jiǎn)單而直觀的API,使得在Java中處理HTML變得非常容易。
Jsoup.parse(content).wholeText(); 這行代碼是使用Jsoup庫(kù)解析HTML內(nèi)容并提取其中的純文本信息。
1.Jsoup.parse(content): 這部分代碼使用Jsoup的parse方法,將傳入的content字符串解析為一個(gè)Jsoup的Document對(duì)象。Document對(duì)象表示整個(gè)HTML文檔。
2.wholeText(): 一旦解析為Document對(duì)象,然后調(diào)用wholeText()方法。這個(gè)方法用于獲取整個(gè)文檔的純文本內(nèi)容,即去除HTML標(biāo)簽后的文本信息。
解析出來的文檔里面包含了 /n 等轉(zhuǎn)義字符,可用于后續(xù)的字符處理
2.使用 Apache POI 庫(kù)創(chuàng)建Excel 文檔
<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>5.2.0</version> <!-- 版本號(hào)可能需要根據(jù)實(shí)際情況調(diào)整 --> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>5.2.0</version> <!-- 版本號(hào)可能需要根據(jù)實(shí)際情況調(diào)整 --> </dependency>
// 創(chuàng)建Excel工作簿和工作表 Workbook workbook = new XSSFWorkbook(); Sheet sheet = workbook.createSheet("Sheet");
Workbook 類:
Workbook 是 Apache POI 中表示 Excel 工作簿(Workbook)的接口。
在這里,通過 new XSSFWorkbook() 創(chuàng)建了一個(gè) XSSFWorkbook 對(duì)象,XSSFWorkbook 是 Workbook 接口的一個(gè)實(shí)現(xiàn),用于處理基于 XML 格式的 .xlsx 文件(Excel 2007及以上版本)。
Sheet 類:
Sheet 是 Workbook 中的一個(gè)接口,表示 Excel 工作簿中的一個(gè)表單或工作表。
通過 workbook.createSheet(“Sheet”) 創(chuàng)建了一個(gè)名為 “Sheet” 的工作表??梢酝ㄟ^不同的工作表名稱創(chuàng)建多個(gè)工作表,每個(gè)工作表包含一組行和列,用于組織和存儲(chǔ)數(shù)據(jù)。
這段代碼創(chuàng)建了一個(gè)空的 Excel 工作簿,其中包含一個(gè)名為 “Sheet” 的工作表。一旦創(chuàng)建了工作簿和工作表,你可以通過 Apache POI 提供的 API 向工作表中添加數(shù)據(jù)、設(shè)置格式、創(chuàng)建圖表等。這樣你就能夠使用 Java 編程來生成、修改和操作 Excel 文檔。
3.按照一定規(guī)則插入表格數(shù)據(jù)
row = sheet.createRow(rowNum++); // 創(chuàng)建新行并填充數(shù)據(jù) row.createCell(0).setCellValue(entry[0].trim()); row.createCell(1).setCellValue(entry[1].trim());
4.導(dǎo)出excel
/** * 將 Workbook 導(dǎo)出到 HttpServletResponse 輸出流 * * @param workbook Excel Workbook 對(duì)象 * @param fileName 導(dǎo)出文件名 */ public void exportToResponse(Workbook workbook, String fileName) { try { // 設(shè)置響應(yīng)頭 httpServletResponse.setContentType("application/octet-stream"); httpServletResponse.setHeader("Content-Disposition", "attachment; filename=" + fileName); // 將 Workbook 寫入 HttpServletResponse 的輸出流 workbook.write(httpServletResponse.getOutputStream()); workbook.close(); // 刷新響應(yīng) httpServletResponse.flushBuffer(); } catch (IOException e) { // 處理異常 log.error("導(dǎo)出文件{}失敗", fileName); throw new BusinessException(BusinessError.EXPORT_FILE_FAIL); } }
代碼解析:
httpServletResponse.setContentType(“application/octet-stream”);:
通過 setContentType 方法設(shè)置響應(yīng)的內(nèi)容類型。在這里,設(shè)置為 application/octet-stream,表示二進(jìn)制流數(shù)據(jù)。這個(gè) MIME 類型通常用于下載文件,因?yàn)樗甘緸g覽器應(yīng)該處理響應(yīng)的數(shù)據(jù)作為二進(jìn)制流而不是嘗試解析它。
httpServletResponse.setHeader(“Content-Disposition”, “attachment; filename=” + fileName);:
通過 setHeader 方法設(shè)置響應(yīng)頭的屬性。在這里,設(shè)置了 Content-Disposition 屬性。
Content-Disposition 屬性指示瀏覽器如何處理響應(yīng)體。在這個(gè)上下文中,attachment 表示要將響應(yīng)作為附件下載,而不是直接在瀏覽器中打開。filename 參數(shù)用于指定下載的文件名。
filename= 后面的部分是具體的文件名,通常是服務(wù)器上的文件名或者用戶在下載時(shí)看到的文件名。
workbook.write(httpServletResponse.getOutputStream());:
使用 Excel Workbook 對(duì)象的 write 方法將 Workbook 寫入 HttpServletResponse 的輸出流。這樣,Excel 數(shù)據(jù)就會(huì)以二進(jìn)制流的形式發(fā)送到客戶端。
workbook.close();
關(guān)閉 Workbook 對(duì)象,釋放資源。
httpServletResponse.flushBuffer();
刷新響應(yīng)的緩沖區(qū),確保所有的數(shù)據(jù)都被寫入到輸出流。
以上就是Java實(shí)現(xiàn)讀取html文本內(nèi)容并按照格式導(dǎo)出到excel中的詳細(xì)內(nèi)容,更多關(guān)于Java讀取html文本內(nèi)容的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Spring Boot 2.x 把 Guava 干掉了選擇本地緩存之王 Caffeine(推薦)
這篇文章主要介紹了Spring Boot 2.x 把 Guava 干掉了選擇本地緩存之王 Caffeine,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-01-01如何用java計(jì)算兩個(gè)時(shí)間相差多少小時(shí)
最近工作中遇到需要計(jì)算時(shí)間差,下面這篇文章主要給大家介紹了關(guān)于如何用java計(jì)算兩個(gè)時(shí)間相差多少小時(shí)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-12-12Mybatis中的@Param及動(dòng)態(tài)SQL詳解
這篇文章主要介紹了Mybatis中的@Param及動(dòng)態(tài)SQL詳解,@Param是MyBatis所提供的作為Dao層的注解,作用是用于傳遞參數(shù),從而可以與SQL中的的字段名相對(duì)應(yīng),需要的朋友可以參考下2023-10-10java基于poi導(dǎo)出excel透視表代碼實(shí)例
這篇文章主要介紹了java基于poi導(dǎo)出excel透視表代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12SpringBoot中的ImportSelector類動(dòng)態(tài)加載bean詳解
這篇文章主要介紹了SpringBoot中的ImportSelector類動(dòng)態(tài)加載bean詳解,ImportSelector接口是spring中導(dǎo)入外部配置的核心接口,根據(jù)給定的條件(通常是一個(gè)或多個(gè)注釋屬性)判定要導(dǎo)入那個(gè)配置類,在spring自動(dòng)化配置和@EnableXXX中都有它的存在,需要的朋友可以參考下2024-01-01