Excel-Apache POI

        Apache POI是用Java编写的免费开源的跨平台的Java API,Apache POI提供API给Java程 序对Microsoft Office格式档案读和写的功能,其中使用最多的就是使用POI操作Excel文 件。

Apache POI常用的类

HSSF - 提供读写Microsoft Excel XLS格式档案的功能。
XSSF - 提供读写Microsoft Excel OOXML XLSX格式档案的功能。
HWPF - 提供读写Microsoft Word DOC97格式档案的功能。
XWPF - 提供读写Microsoft Word DOC2003格式档案的功能。
HSLF - 提供读写Microsoft PowerPoint格式档案的功能。
HDGF - 提供读Microsoft Visio格式档案的功能。
HPBF - 提供读Microsoft Publisher格式档案的功能。
HSMF - 提供读Microsoft Outlook格式档案的功能。

在开发中我们经常使用HSSF用来操作Excel处理表格数据,对于其它的不经常使用。

HSSF 是Horrible SpreadSheet Format的缩写,通过HSSF,你可以用纯Java代码来读取、写入、修改Excel文件。HSSF 为读取操作提供了两类API:usermodel和eventusermodel,即“用户模型”和“事件-用户模型”。

常用的类和方法

HSSFWorkbook

HSSFWorkbook :工作簿,代表一个excel的整个文档
HSSFWorkbook(); // 创建一个新的工作簿
HSSFWorkbook(InputStream inputStream); // 创建一个关联输入流的工作簿,可以将一个excel文件封装成工作簿
HSSFSheet createSheet(String sheetname); 创建一个新的Sheet
HSSFSheet getSheet(String sheetName); 通过名称获取Sheet
HSSFSheet getSheetAt(int index); // 通过索引获取Sheet,索引从0开始
HSSFCellStyle createCellStyle(); 创建单元格样式
int getNumberOfSheets(); 获取sheet的个数
setActiveSheet(int index); 设置默认选中的工作表
write();
write(File newFile);
write(OutputStream stream);

HSSFSheet

HSSFSheet:工作表
HSSFRow createRow(int rownum); 创建新行,需要指定行号,行号从0开始
HSSFRow getRow(int index); 根据索引获取指定的行
int addMergedRegion(CellRangeAddress region); 合并单元格
CellRangeAddress(int firstRow, int lastRow, int firstCol, int lastCol); 单元格范围, 用于合并单元格,需要指定要合并的首行、最后一行、首列、最后一列。
autoSizeColumn(int column); 自动调整列的宽度来适应内容
getLastRowNum(); 获取最后的行的索引,没有行或者只有一行的时候返回0
setColumnWidth(int columnIndex, int width); 设置某一列的宽度,width=字符个数 * 256,例如20个字符的宽度就是20 * 256

HSSFRow

HSSFRow :行
HSSFCell createCell(int column); 创建新的单元格
HSSFCell setCell(shot index);
HSSFCell getCell(shot index);
HSSFCell getCell(CellReference.convertColStringToIndex(“A”)); 根据列名英文字母获取。
setRowStyle(HSSFCellStyle style); 设置行样式
short getLastCellNum(); 获取最后的单元格号,如果单元格有第一个开始算,lastCellNum就是列的个数
setHeightInPoints(float height); 设置行的高度

HSSFCell:单元格

setCellValue(String value); 设置单元格的值
setCellType(); 设置单元格类型,如 字符串、数字、布尔等
setCellStyle(); 设置单元格样式
String getStringCellValue(); 获取单元格中的字符串值
setCellStyle(HSSFCellStyle style); 设置单元格样式,例如字体、加粗、格式化
setCellFormula(String formula); 设置计算公式,计算的结果作为单元格的值,也提供了异常常用的函数,如求和"sum(A1,C1)"、日期函数、字符串相关函数、CountIf和SumIf函数、随机数函数等
HSSFCellStyle :单元格样式


setFont(Font font); 为单元格设置字体样式
setAlignment(HorizontalAlignment align); // 设置水平对齐方式
setVerticalAlignment(VerticalAlignment align); // 设置垂直对齐方式
setFillPattern(FillPatternType fp);
setFillForegroundColor(short bg); 设置前景色
setFillBackgroundColor(short bg); 设置背景颜色
HSSFFont:字体,
setColor(short color); // 设置字体颜色
setBold(boolean bold); // 设置是否粗体
setItalic(boolean italic); 设置倾斜
setUnderline(byte underline); 设置下划线
HSSFName:名称
HSSFDataFormat :日期格式化
HSSFHeader : Sheet的头部
HSSFFooter :Sheet的尾部
HSSFDateUtil :日期工具
HSSFPrintSetup :打印设置
HSSFErrorConstants:错误信息表

Excel中的工作簿、工作表、行、单元格中的关系:

一个Excel文件对应于一个workbook(HSSFWorkbook),

一个workbook可以有多个sheet(HSSFSheet)组成,

一个sheet是由多个row(HSSFRow)组成,

一个row是由多个cell(HSSFCell)组成

基础示例 

首先引入apache poi的依赖

<dependency>  <groupId>org.apache.poi</groupId>  <artifactId>poi</artifactId>  <version>3.8</version>  
</dependency>

在桌面上生成一个Excel文件

public static void createExcel() throws IOException{// 获取桌面路径FileSystemView fsv = FileSystemView.getFileSystemView();String desktop = fsv.getHomeDirectory().getPath();String filePath = desktop + "/template.xls";File file = new File(filePath);OutputStream outputStream = new FileOutputStream(file);HSSFWorkbook workbook = new HSSFWorkbook();HSSFSheet sheet = workbook.createSheet("Sheet1");HSSFRow row = sheet.createRow(0);row.createCell(0).setCellValue("id");row.createCell(1).setCellValue("订单号");row.createCell(2).setCellValue("下单时间");row.createCell(3).setCellValue("个数");row.createCell(4).setCellValue("单价");row.createCell(5).setCellValue("订单金额");row.setHeightInPoints(30); // 设置行的高度HSSFRow row1 = sheet.createRow(1);row1.createCell(0).setCellValue("1");row1.createCell(1).setCellValue("NO00001");// 日期格式化HSSFCellStyle cellStyle2 = workbook.createCellStyle();HSSFCreationHelper creationHelper = workbook.getCreationHelper();cellStyle2.setDataFormat(creationHelper.createDataFormat().getFormat("yyyy-MM-dd HH:mm:ss"));sheet.setColumnWidth(2, 20 * 256); // 设置列的宽度HSSFCell cell2 = row1.createCell(2);cell2.setCellStyle(cellStyle2);cell2.setCellValue(new Date());row1.createCell(3).setCellValue(2);// 保留两位小数HSSFCellStyle cellStyle3 = workbook.createCellStyle();cellStyle3.setDataFormat(HSSFDataFormat.getBuiltinFormat("0.00"));HSSFCell cell4 = row1.createCell(4);cell4.setCellStyle(cellStyle3);cell4.setCellValue(29.5);// 货币格式化HSSFCellStyle cellStyle4 = workbook.createCellStyle();HSSFFont font = workbook.createFont();font.setFontName("华文行楷");font.setFontHeightInPoints((short)15);font.setColor(HSSFColor.RED.index);cellStyle4.setFont(font);HSSFCell cell5 = row1.createCell(5);cell5.setCellFormula("D2*E2");  // 设置计算公式// 获取计算公式的值HSSFFormulaEvaluator e = new HSSFFormulaEvaluator(workbook);cell5 = e.evaluateInCell(cell5);System.out.println(cell5.getNumericCellValue());workbook.setActiveSheet(0);workbook.write(outputStream);outputStream.close();
}

 读取Excel,解析数据

public static void readExcel() throws IOException{FileSystemView fsv = FileSystemView.getFileSystemView();String desktop = fsv.getHomeDirectory().getPath();String filePath = desktop + "/template.xls";FileInputStream fileInputStream = new FileInputStream(filePath);BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream);POIFSFileSystem fileSystem = new POIFSFileSystem(bufferedInputStream);HSSFWorkbook workbook = new HSSFWorkbook(fileSystem);HSSFSheet sheet = workbook.getSheet("Sheet1");int lastRowIndex = sheet.getLastRowNum();System.out.println(lastRowIndex);for (int i = 0; i <= lastRowIndex; i++) {HSSFRow row = sheet.getRow(i);if (row == null) { break; }short lastCellNum = row.getLastCellNum();for (int j = 0; j < lastCellNum; j++) {String cellValue = row.getCell(j).getStringCellValue();System.out.println(cellValue);}}bufferedInputStream.close();
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/654564.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

###C语言程序设计-----C语言学习(6)#

前言&#xff1a;感谢老铁的浏览&#xff0c;希望老铁可以一键三连加个关注&#xff0c;您的支持和鼓励是我前进的动力&#xff0c;后续会分享更多学习编程的内容。 一. 主干知识的学习 1. while语句 除了for语句以外&#xff0c;while语句也用于实现循环&#xff0c;而且它…

C++发起Https请求

Wininet库忽略Https证书 相信很多朋友使用C WINAPI开发的时候网络模块的时候遇到Https忽悠证书无效的情况下&#xff0c; 仍然希望获取结果下列代码便是忽略异常的Https CA证书&#xff0c;下面对原理进行简单的讲解首先, 需要设置Https忽略需要用到如下结果函数与参数Interne…

初识elasticsearch

一、了解ES 1.1.elasticsearch的作用 elasticsearch是一款非常强大的开源搜索引擎&#xff0c;具备非常多强大功能&#xff0c;可以帮助我们从海量数据中快速找到需要的内容 例如&#xff1a; 在GitHub搜索代码 在电商网站搜索商品 在百度搜索答案 在打车软件搜索附近的车 …

(七)for循环控制

文章目录 用法while的用法for的用法两者之间的联系可以相互等价用for改写while示例for和while的死循环怎么写for循环见怪不怪表达式1省略第一.三个表达式省略&#xff08;for 改 while&#xff09;全省略即死循环&#xff08;上面已介绍&#xff09; 用法 类比学习while语句 …

MySQL原理(一)架构组成(1)物理文件组成

目录 一、日志文件 1、错误日志 Error Log 1.1、作用&#xff1a; 1.2、开启关闭&#xff1a; 1.3、使用 2、二进制日志 Binary Log & Binary Log Index 2.1、作用&#xff1a; 2.2、开启关闭&#xff1a; 2.3、Binlog还有一些附加选项参数 &#xff08;1&#x…

江科大stm32学习笔记6——GPIO输入准备

一、按键消抖 由于按键内部使用的是机械式弹簧片&#xff0c;所以在按下和松开时会产生5~10ms的抖动&#xff0c;需要通过代码来进行消抖。 二、滤波电容 在电路中&#xff0c;如果见到一端接在电路中&#xff0c;一端接地的电容&#xff0c;则可以考虑它的作用为滤波电容&am…

linux -- 内存管理 -- 页面分配器

linux内存管理 为什么要了解linux内存管理 分配并使用内存&#xff0c;是内核程序与驱动程序中非常重要的一环。内存分配函数都依赖于内核中一个非常复杂而重要的组件 - 内存管理。 linux驱动程序不可避免要与内核中的内存管理模块打交道。 linux内存管理可以总体上分为两大…

MYSQL基本查询(CURD:创建、读取、更新、删除)

文章目录 前言一、Create1.全列插入2.指定列插入3.插入否则更新4.替换 二、Retrieve1.SELECT列2.WHERE条件3.结果排序4.筛选分页结果 三、Update四、Delete1.删除数据2.截断表 五、插入查询结果六、聚合函数 前言 操作关系型数据库的编程语言&#xff0c;定义了一套操作关系型…

Unity中URP下额外灯角度衰减

文章目录 前言一、额外灯中聚光灯的角度衰减二、AngleAttenuation函数的传入参数1、参数&#xff1a;spotDirection.xyz2、_AdditionalLightsSpotDir3、参数&#xff1a;lightDirection4、参数&#xff1a;distanceAndSpotAttenuation.zw5、_AdditionalLightsAttenuation 三、A…

Spring Security关键之5张数据表与7张表 !!!

一、什么是认证和授权&#xff1a; 认证&#xff1a;系统提供的用于识别用户身份的功能&#xff0c;通常提供用户名和密码进行登录其实就是在进行认证&#xff0c;认证的目的是让系统知道你是谁。授权&#xff1a;用户认证成功后&#xff0c;需要为用户授权&#xff0c;其实就…

全连MGRE(OSPF)综合实验

一.要求 二.底层--所有节点拥有合法ip地址 r1: r2&#xff08;isp&#xff09;: r3: r4: r5: r6: 三.全网可达 r1: r3&#xff1a; r4: r5: r6: 四.构建全连的MGRE环境 R1-R3-R4 R1&#xff1a; r3: r4: R1-R5-R6 r1: r5: r6: 五.ospf配置 R1&#xff1a; r3: r4: r5: r6:…

Qt应用软件【串口篇】串口通信

文章目录 1.串口概述2.串口传输数据的基本原理电信号的传输过程 3.串口的几个概念数据位&#xff08;Data Bits&#xff09;奇偶校验位&#xff08;Parity Bit&#xff09;停止位&#xff08;Stop Bits&#xff09;流控制&#xff08;Flow Control&#xff09;波特率&#xff0…

142. 环形链表 II(力扣LeetCode)

文章目录 142. 环形链表 II题目描述解题思路判断链表是否有环如果有环&#xff0c;如何找到这个环的入口 c代码 142. 环形链表 II 题目描述 给定一个链表的头节点 head &#xff0c;返回链表开始入环的第一个节点。 如果链表无环&#xff0c;则返回 null。 如果链表中有某个…

宏定义define的常见用法

define作为宏定义&#xff0c;是C语言中的一种预处理命令&#xff1b; 宏定义define有两种分类&#xff0c;分别为为无参宏定义和带参宏定义。 &#xff08;1&#xff09;无参宏定义&#xff1a; 一般形式&#xff1a;#define 宏定义名称 字符串&#xff1b; 举例&…

7.【SpringBoot3】项目部署、属性配置、多环境开发

文章目录 1. SpringBoot 项目部署2. 属性配置方式2.1 通过 cmd 命令行配置2.2 通过环境变量配置2.3 通过外部配置文件来配置 3. 多环境开发 Profiles3.1 多环境开发的单文件配置3.2 多环境开发的多文件配置3.3 多环境开发-分组 1. SpringBoot 项目部署 项目完成后&#xff0c;…

LLM大模型x知识图谱2024最新SOTA方案【附开源代码】

大模型LLM与知识图谱KG的结合可以充分发挥两者的优势&#xff0c;例如LLMs的通用知识和语言处理能力&#xff0c;以及KGs的结构化和准确性。这种结合不仅能够提升模型的知识处理能力&#xff0c;还能够在多个层面上优化模型的性能&#xff0c;更好地解决各种现实世界的问题&…

新火种AI|Taylor Swift不雅照被疯传!AI背后的隐患和危机引人深思...

作者&#xff1a;小岩 编辑&#xff1a;彩云 如今本就是一个信息爆炸的年代&#xff0c;再伴随2023年AI技术的井喷式发展&#xff0c;AI正在以迅雷不及掩耳之势渗透到我们生活的方方面面。不过&#xff0c;AI技术是一把双刃剑&#xff0c;我们在享受AI技术带来的便捷和实用的…

代码随想录刷题笔记 DAY17 | 平衡二叉树 No.110 | 二叉树的所有路径 No.257 | 左叶子之和 No.404

Day 17 01. 平衡二叉树&#xff08;No. 110&#xff09; 题目链接 代码随想录题解 1.1 题目 给定一个二叉树&#xff0c;判断它是否是高度平衡的二叉树。 本题中&#xff0c;一棵高度平衡二叉树定义为&#xff1a; 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超…

LabVIEW直流电机转速检测与控制

研究了使用LabVIEW软件和ELVIS实验平台来检测和控制直流电机的转速。通过集成光电传感器和霍尔传感器&#xff0c;实现了对电机转速的精确测量和调节。 系统组成&#xff1a;系统由NI ELVIS实验平台、光电传感器、霍尔传感器和直流电机组成。通过这些硬件元件&#xff0c;系统…

架构篇19:单服务器高性能模式-Reactor与Proactor

文章目录 ReactorProactor小结上篇介绍了单服务器高性能的 PPC 和 TPC 模式,它们的优点是实现简单,缺点是都无法支撑高并发的场景,尤其是互联网发展到现在,各种海量用户业务的出现,PPC 和 TPC 完全无能为力。今天我将介绍可以应对高并发场景的单服务器高性能架构模式:Rea…