当前位置: 首页 > news >正文

实践:读取html文本提取相应内容按照格式导出到excel中

最近在做一个需求,需要将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();

刷新响应的缓冲区,确保所有的数据都被写入到输出流。

相关文章:

实践:读取html文本提取相应内容按照格式导出到excel中

最近在做一个需求&#xff0c;需要将html文本中的内容提取出来&#xff0c;然后导出到excel里面&#xff0c;实现交代情景&#xff0c;html文本中存在许多标签&#xff0c;且很乱&#xff0c;因此需要之间将标签里面的文本提取出来&#xff0c;再进行处理。 ............String…...

oracle 修改表结构语句

oracle 修改表结构语句 Oracle中可以使用ALTER TABLE语句来修改表的结构。 添加列&#xff1a; ALTER TABLE table_name ADD column_name data_type; 示例&#xff1a;ALTER TABLE employees ADD email VARCHAR2(50); 删除列&#xff1a; ALTER TABLE table_name DROP COL…...

LabVIEW核能设施监测

LabVIEW核能设施监测 在核能领域&#xff0c;确保设施运行的安全性和效率至关重要。LabVIEW通过与硬件的紧密集成&#xff0c;为高温气冷堆燃料装卸计数系统以及脉冲堆辐射剂量监测与数据管理系统提供了解决方案。这些系统不仅提高了监测和管理的精确度&#xff0c;也保证了核…...

使用Process.Start()打开文件夹时出现访问被拒绝异常

默认的打开形式 Process.Start(folderPath); 解决方案 System.Diagnostics.Process.Start(Environment.GetEnvironmentVariable("WINDIR") "\explorer.exe", folderPath); 参考文献 c# - 使用 Process.Start() 打开文件夹时访问被拒绝异常 - IT工具网…...

spdk技术原理简介和实践经验

一、导读 与机械硬盘相比&#xff0c;NVMe-ssd在性能、功耗和密度上都有巨大的优势&#xff0c;并且随着固态存储介质的高速发展&#xff0c;其价格也在大幅下降&#xff0c;这些优势使得NVMe-ssd在分布式存储中使用越来越广泛。由于NVMe-ssd的性能比传统磁盘介质高出很多&…...

【开源】基于JAVA+Vue+SpringBoot的用户画像活动推荐系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 兴趣标签模块2.3 活动档案模块2.4 活动报名模块2.5 活动留言模块 三、系统设计3.1 用例设计3.2 业务流程设计3.3 数据流程设计3.4 E-R图设计 四、系统展示五、核心代码5.1 查询兴趣标签5.2 查询活动推荐…...

023 for循环详解

什么是for循环 // 练习1 int odd 0; int even 0; for (int i 0; i < 100; i) {if (i % 2 0) {even i;} else {odd i;} } System.out.println("奇数和为:" odd ",偶数和为:" even);// 练习2 for (int i 1; i < 1000; i) {if (i % 5 0) {Sy…...

舟山长寿医学中心:引领生命科技前沿

在浩瀚的东海之滨&#xff0c;舟山群岛如一颗璀璨的明珠&#xff0c;镶嵌在碧波荡漾的大海之中。这里不仅拥有得天独厚的自然美景&#xff0c;更是一块充满生机与活力的健康宝地。舟山长寿医学中心&#xff0c;正是这片神奇的土地上的一颗璀璨明珠&#xff0c;致力于为全球人士…...

springboot 整合 PowerJob实现定时任务调度

最近项目需要使用定时任务&#xff0c;而使用了PowerJob做任务调度模块&#xff0c;感觉这个框架真香&#xff0c;今天我们就来深入了解一下新一代的定时任务框架——PowerJob&#xff01; 简介 PowerJob是基于java开发的企业级的分布式任务调度平台&#xff0c;与xxl-job一样…...

【C语言】通讯录实现(下)

目录 1.进阶通讯录特点&#xff08;下&#xff09; 2.实现步骤 &#xff08;1&#xff09;保存增加的联系人数据到文件中 &#xff08;2&#xff09;加载保存的联系人数据 3.完整C语言通讯录代码 &#xff08;1&#xff09;contact.h (2)test.c (3)contact.c 4.结语 1.…...

数据结构与算法面试系列-03

1. 一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在 第10次落地时,共经过多少米?第10次反弹多高? 程序代码 package com.jingxuan.system;public class Sphere {public static void main(String[] args) {double s = 0;double t = 100;for (int i…...

elk之基本crud

写在前面 本文看下工作中用的最多的CRUD。让我们一起来做一个帅帅的CRUD BOY吧&#xff01;&#xff01;&#xff01; 1&#xff1a;基本操作 Create 格式1(指定ID)&#xff1a;PUT 索引名称/_create/文档ID {文档json} 格式2&#xff08;不指定ID&#xff09;:POST 索引名称…...

搭建gitlab仓库

yum安装gitlab仓库 搭建gitlab仓库 配置yum源 vim /etc/yum.repos.d/gitlab-ce.repo [gitlab-ce] namegitlab-ce baseurlhttps://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7 gpgcheck0 Repo_gpgcheck0 Enabled1 Gpgkeyhttps://packages.gitlab.com/gpg.keysudo yum ins…...

C语言-算法-最短路

【模板】Floyd 题目描述 给出一张由 n n n 个点 m m m 条边组成的无向图。 求出所有点对 ( i , j ) (i,j) (i,j) 之间的最短路径。 输入格式 第一行为两个整数 n , m n,m n,m&#xff0c;分别代表点的个数和边的条数。 接下来 m m m 行&#xff0c;每行三个整数 u …...

【操作系统·考研】I/O管理概述

1.I/O设备 1.1 块设备 信息交换以数据块为单位&#xff0c;它属于有结构设备。 块设备传输速率较高&#xff0c;可寻址&#xff0c;且可对该设备随机地的读写。 栗子&#x1f330;&#xff1a;磁盘。 1.2 字符设备 信息交换以字符为单位&#xff0c;属于无结构类型。 字符…...

Linux实验记录:使用vsftpd服务传输文件

前言&#xff1a; 本文是一篇关于Linux系统初学者的实验记录。 参考书籍&#xff1a;《Linux就该这么学》 实验环境&#xff1a; VmwareWorkStation 17——虚拟机软件 RedHatEnterpriseLinux[RHEL]8——红帽操作系统 备注&#xff1a; 为了解决在多样复杂的设备之间解决传…...

实习|基于SSM的实习管理系统设计与实现(源码+数据库+文档)

实习管理系统目录 目录 基于SSM的实习管理系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、管理员功能介绍 &#xff08;1&#xff09;管理员登录 &#xff08;2&#xff09;实训方向管理 &#xff08;3&#xff09;公告信息管理 &#xff08;4&#xff0…...

商品介绍和规则参数图片映射和IP设置

虚拟路径映射配置&#xff1a; registry.addResourceHandler("/image/productIntroImgs/**").addResourceLocations("file:D:\\java1234-mall-v3\\productIntroImgs\\");registry.addResourceHandler("/image/productParaImgs/**").addResourceL…...

【React】前端React 代码中预览展示excel文件

封装了ExcelView来展示excel文件&#xff0c;支持显示loading 1.安装依赖 npm i js-preview/excel源码 import React, { useEffect, useRef, useState } from react import jsPreviewExcel, { JsExcelPreview } from js-preview/excel import js-preview/excel/lib/index.cs…...

QButtonGroup使用介绍

一、简介 QButtonGroup是PyQt5库中的一个组件&#xff0c;主要用于组织和管理一组按钮。通过QButtonGroup&#xff0c;可以方便地实现单选框或多选框功能&#xff0c;统一处理按钮的信号&#xff0c;并且可以为按钮分组设定ID以进行识别。 1、原始工程 from PyQt5.Qt import …...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

Ubuntu系统下交叉编译openssl

一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机&#xff1a;Ubuntu 20.04.6 LTSHost&#xff1a;ARM32位交叉编译器&#xff1a;arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...

day52 ResNet18 CBAM

在深度学习的旅程中&#xff0c;我们不断探索如何提升模型的性能。今天&#xff0c;我将分享我在 ResNet18 模型中插入 CBAM&#xff08;Convolutional Block Attention Module&#xff09;模块&#xff0c;并采用分阶段微调策略的实践过程。通过这个过程&#xff0c;我不仅提升…...

从零实现富文本编辑器#5-编辑器选区模型的状态结构表达

先前我们总结了浏览器选区模型的交互策略&#xff0c;并且实现了基本的选区操作&#xff0c;还调研了自绘选区的实现。那么相对的&#xff0c;我们还需要设计编辑器的选区表达&#xff0c;也可以称为模型选区。编辑器中应用变更时的操作范围&#xff0c;就是以模型选区为基准来…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)

概述 在 Swift 开发语言中&#xff0c;各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过&#xff0c;在涉及到多个子类派生于基类进行多态模拟的场景下&#xff0c;…...

ServerTrust 并非唯一

NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...

css的定位(position)详解:相对定位 绝对定位 固定定位

在 CSS 中&#xff0c;元素的定位通过 position 属性控制&#xff0c;共有 5 种定位模式&#xff1a;static&#xff08;静态定位&#xff09;、relative&#xff08;相对定位&#xff09;、absolute&#xff08;绝对定位&#xff09;、fixed&#xff08;固定定位&#xff09;和…...

【VLNs篇】07:NavRL—在动态环境中学习安全飞行

项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战&#xff0c;克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...

深度学习水论文:mamba+图像增强

&#x1f9c0;当前视觉领域对高效长序列建模需求激增&#xff0c;对Mamba图像增强这方向的研究自然也逐渐火热。原因在于其高效长程建模&#xff0c;以及动态计算优势&#xff0c;在图像质量提升和细节恢复方面有难以替代的作用。 &#x1f9c0;因此短时间内&#xff0c;就有不…...

vulnyx Blogger writeup

信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面&#xff0c;gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress&#xff0c;说明目标所使用的cms是wordpress&#xff0c;访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...