在Java中使用Apache POI导入导出Excel(三)
本文将继续介绍POI的使用,上接在Java中使用Apache POI导入导出Excel(二)
使用Apache POI组件操作Excel(三)
24、拆分和冻结窗格
您可以创建两种类型的窗格;冻结窗格和拆分窗格。
冻结窗格按列和行进行拆分。您创建 使用以下机制的冻结窗格:
sheet1.createFreezePane( 3, 2, 3, 2 );
前两个参数是列和行 希望分裂。后两个参数表示 在右下象限中可见的单元格。
拆分窗格的显示方式不同。分割区域为 分为四个独立的工作区域。分裂 发生在像素级别,并且用户能够 通过将分割拖动到新位置来调整分割。
拆分窗格是使用以下调用创建的:
sheet2.createSplitPane( 2000, 2000, 0, 0, Sheet.PANE_LOWER_LEFT );
第一个参数是分割的 x 位置。 这是 1/20 点。本案中的一点 似乎等同于一个像素。第二个参数是 拆分的 y 位置。再次在 1/20 分。
最后一个参数指示当前具有的窗格 焦点。这将是 Sheet.PANE_LOWER_LEFT 之一, PANE_LOWER_RIGHT、PANE_UPPER_RIGHT 或 PANE_UPPER_LEFT。
Workbook wb = new XSSFWorkbook();Sheet sheet1 = wb.createSheet("new sheet");
Sheet sheet2 = wb.createSheet("second sheet");
Sheet sheet3 = wb.createSheet("third sheet");
Sheet sheet4 = wb.createSheet("fourth sheet");// Freeze just one row
sheet1.createFreezePane( 0, 1, 0, 1 );// Freeze just one column
sheet2.createFreezePane( 1, 0, 1, 0 );// Freeze the columns and rows (forget about scrolling position of the lower right quadrant).
sheet3.createFreezePane( 2, 2 );// Create a split with the lower left side being the active quadrant
sheet4.createSplitPane( 2000, 2000, 0, 0, Sheet.PANE_LOWER_LEFT );try (OutputStream fileOut = new FileOutputStream("workbook.xls")) {wb.write(fileOut);
}
25、重复行和列
可以在 使用 setRepeatingRows() 和 setRepeatingColumns() 方法。这些方法需要 CellRangeAddress 参数 ,它指定行或列的范围 重复。 对于 setRepeatingRows(),它应该指定一个范围 rows 以重复,其中 column 部分跨越所有 列。 对于 setRepeatingColumns(),它应该指定一个范围 列以重复,其中行部分跨越所有 行。 如果参数为 null,则重复的行或列 将被删除。
Workbook wb = new XSSFWorkbook();Sheet sheet1 = wb.createSheet("Sheet1");
Sheet sheet2 = wb.createSheet("Sheet2");// Set the rows to repeat from row 4 to 5 on the first sheet.
sheet1.setRepeatingRows(CellRangeAddress.valueOf("4:5"));// Set the columns to repeat from column A to C on the second sheet
sheet2.setRepeatingColumns(CellRangeAddress.valueOf("A:C"));try (OutputStream fileOut = new FileOutputStream("workbook.xls")) {wb.write(fileOut);
}
26、页眉和页脚
示例适用于页眉,但直接应用于页脚。
Workbook wb = new XSSFWorkbook();Sheet sheet = wb.createSheet("new sheet");Header header = sheet.getHeader();
header.setCenter("Center Header");
header.setLeft("Left Header");
header.setRight(HSSFHeader.font("Stencil-Normal", "Italic") +HSSFHeader.fontSize((short) 16) + "Right w/ Stencil-Normal Italic font and size 16");try (OutputStream fileOut = new FileOutputStream("workbook.xls")) {wb.write(fileOut);
}
27、页眉和页脚的 XSSF 增强功能
示例适用于页眉,但直接应用于页脚。请注意,上面的 基本页眉和页脚适用于 XSSF 工作簿以及 HSSF 工作簿。HSSFHeader 公司 stuff 不适用于 XSSF 工作簿。
XSSF 能够处理首页页眉和页脚,以及偶数/奇数 页眉和页脚。所有页眉/页脚属性标志也可以在 XSSF 中处理。 奇数页眉和页脚是默认的页眉和页脚。它显示在所有 不显示首页页眉或不显示偶数页页眉的页面。那是 如果偶数页眉/页脚不存在,则奇数页眉/页脚显示在 甚至页面。如果第一页页眉/页脚不存在,则奇数页眉/页脚 显示在第一页上。如果未设置 even/odd 属性,则与 偶数页眉/页脚不存在。如果 first page 属性不存在,则为 与第一页页眉/页脚不存在相同。
Workbook wb = new XSSFWorkbook();XSSFSheet sheet = (XSSFSheet) wb.createSheet("new sheet");// Create a first page header
Header header = sheet.getFirstHeader();
header.setCenter("Center First Page Header");
header.setLeft("Left First Page Header");
header.setRight("Right First Page Header");// Create an even page header
Header header2 = sheet.getEvenHeader();
der2.setCenter("Center Even Page Header");
header2.setLeft("Left Even Page Header");
header2.setRight("Right Even Page Header");// Create an odd page header
Header header3 = sheet.getOddHeader();
der3.setCenter("Center Odd Page Header");
header3.setLeft("Left Odd Page Header");
header3.setRight("Right Odd Page Header");// Set/Remove Header properties
XSSFHeaderProperties prop = sheet.getHeaderFooterProperties();
prop.setAlignWithMargins();
prop.scaleWithDoc();
prop.removeDifferentFirstPage(); // This does not remove first page headers or footers
prop.removeDifferentEvenOdd(); // This does not remove even headers or footerstry (OutputStream fileOut = new FileOutputStream("workbook.xlsx")) {wb.write(fileOut);
}
28、绘制形状
POI 支持使用 Microsoft Office 绘制形状 绘图工具。图纸上的形状以 组和 AND 形状的层次结构。最顶层的形状 是族长。这在工作表上不可见 完全。要开始绘制,您需要在 XSSFSheet 类上调用 createPatriarch。这具有 效果擦除存储的任何其他形状信息 在那张纸上。默认情况下,POI 将保留形状 记录在工作表中,除非您调用 此方法。
要创建形状,您必须完成以下操作 步骤:
- 创建 Patriarch。
- 创建锚点以将形状定位在图纸上。
- 请族长创建形状。
- 设置形状类型(线条、椭圆、矩形等)
- 设置有关形状的任何其他样式详细信息。(例如: 线条粗细等)
XSSFPatriarch patriarch = sheet.createDrawingPatriarch();
a = new XSSFClientAnchor( 0, 0, 1023, 255, (short) 1, 0, (short) 1, 0 );XSSFSimpleShape shape1 = patriarch.createSimpleShape(a1);
shape1.setShapeType(XSSFSimpleShape.OBJECT_TYPE_LINE);
文本框是使用其他调用创建的:
XSSFTextbox textbox1 = patriarch.createTextbox(new XSSFClientAnchor(0,0,0,0,(short)1,1,(short)2,2));
textbox1.setString(new XSSFRichTextString("This is a test") );
可以使用不同的字体来设置 TextBox 中的文本。方法如下:
XSSFFont font = wb.createFont();
font.setItalic(true);
font.setUnderline(XSSFFont.U_DOUBLE);
XSSFRichTextString string = new XSSFRichTextString("Woo!!!");
string.applyFont(2,5,font);
textbox.setString(string );
就像使用 Excel 手动完成一样,将形状组合在一起这是可能的。这是通过使用这些组调用 createGroup()创建形状。也可以在组内创建组。
警告:您创建的任何组都应至少包含两个 其他形状或子组。
以下是创建形状组的方法:
// Create a shape group.
XSSFShapeGroup group = patriarch.createGroup(new XSSFClientAnchor(0,0,900,200,(short)2,2,(short)2,2));// Create a couple of lines in the group.
XSSFSimpleShape shape1 = group.createShape(new XSSFChildAnchor(3,3,500,500));shape1.setShapeType(XSSFSimpleShape.OBJECT_TYPE_LINE);((XSSFChildAnchor) shape1.getAnchor()).setAnchor(3,3,500,500);XSSFSimpleShape shape2 = group.createShape(new XSSFChildAnchor(1,200,400,600));
shape2.setShapeType(XSSFSimpleShape.OBJECT_TYPE_LINE);
如果你仔细观察,你会注意到形状 添加到组中的锚点使用新类型的锚点: XSSFChildAnchor 的 Anchor 中。发生的事情是 创建的组具有自己的坐标空间 放置在其中的形状。POI 默认将其设置为 (0,0,1023,255),但您可以根据需要更改它。 方法如下:
myGroup.setCoordinates(10,10,20,20); // top-left, bottom-right
如果您在一个组中创建一个组,它也会 拥有自己的坐标空间。
29、样式化形状
默认情况下,形状看起来有点普通。可对形状应用不同的样式。目前可以做的事情包括:
- 更改填充颜色。
- 创建没有填充颜色的形状。
- 更改线条的粗细。
- 更改线条的样式。例如:虚线、点。
- 更改线条颜色。
以下是如何执行此操作的示例:
XSSFSimpleShape s = patriarch.createSimpleShape(a);s.setShapeType(XSSFSimpleShape.OBJECT_TYPE_OVAL);
s.setLineStyleColor(10,10,10);
s.setFillColor(90,10,200);
s.setLineWidth(XSSFShape.LINEWIDTH_ONE_PT * 3);
s.setLineStyle(XSSFShape.LINESTYLE_DOTSYS);
30、形状和图形2D
虽然原生 POI 形状绘制命令是 在形状中绘制形状的推荐方法有时 最好使用标准 API 以兼容 外部库。考虑到这一点,我们创建了一些 Graphics 和 Graphics2d 的包装器。
所有图形命令都发送到 XSSFShapeGroup 中。 这是如何完成的:
a = new XSSFClientAnchor( 0, 0, 1023, 255, (short) 1, 0, (short) 1, 0 );group = patriarch.createGroup( a );
group.setCoordinates( 0, 0, 80 * 4 , 12 * 23 );float verticalPointsPerPixel = a.getAnchorHeightInPoints(sheet) / (float)Math.abs(group.getY2() - group.getY1());g = new EscherGraphics( group, wb, Color.black, verticalPointsPerPixel );g2d = new EscherGraphics2d( g );drawChemicalStructure( g2d );
我们做的第一件事是创建组并设置其坐标 以匹配我们计划绘制的内容。接下来我们计算一个合理的 fontSizeMultiplier 创建 EscherGraphics 对象。 由于我们真正需要的是 Graphics2d 对象,因此我们创建一个 EscherGraphics2d 对象并传入 我们创建的 Graphics 对象。最后,我们调用 routine ,该对象将绘制到 EscherGraphics2d 对象中。
每个像素的垂直点值得更多解释。 转换 Graphics 调用的难点之一 进入 Escher 绘图调用是 Excel 没有 绝对像素位置的概念。它衡量 它的单元格宽度(以 'characters' 为单位)和单元格高度(以磅为单位)。 不幸的是,它没有明确定义它是什么类型的角色 测量。据推测,这是因为 Excel 将是 在不同平台上甚至在同一平台内使用不同的字体 平台。
由于这个约束,我们不得不实现 verticalPointsPerPixel 的 Pixel。这是字体在以下时间应缩放的量 您发出 drawString() 等命令。计算此值 使用以下公式:
multipler = groupHeightInPoints / heightOfGroup
组的高度计算相当简单,方法是计算 形状的边界框的 y 坐标之间的差异。这 可以使用名为 HSSFClientAnchor.getAnchorHeightInPoints() 的便利性来计算组的高度。
graphics 类支持的许多函数 不完整。以下是一些已知的函数 工作。
- fillRect()
- fillOval()
- drawString()
- drawOval()
- drawLine()
- clearRect()
不支持的函数将返回并记录一条消息 使用 POI 日志记录基础设施(默认处于禁用状态)。
相关文章:
在Java中使用Apache POI导入导出Excel(三)
本文将继续介绍POI的使用,上接在Java中使用Apache POI导入导出Excel(二) 使用Apache POI组件操作Excel(三) 24、拆分和冻结窗格 您可以创建两种类型的窗格;冻结窗格和拆分窗格。 冻结窗格按列和行进行拆分。您创建…...
UR开始打中国牌,重磅发布国产化协作机器人UR7e 和 UR12e
近日,优傲(UR)机器人公司立足中国市场需求,重磅推出UR7e和UR12e 两款本地化协作机器人。它们延续优傲(UR)一以贯之的高品质与性能特质,着重优化负载自重比,且在价格层面具竞争力&…...
FRU文件
FRU(Field Replaceable Unit)源文件的格式通常遵循IPMI FRU Information Storage Definition标准。在实际应用中,FRU源文件可以是JSON格式的,这种格式允许用户指定所有的FRU信息字段。以下是FRU源文件的JSON格式的一些关键点&…...
AI需求条目化全面升级!支持多格式需求,打破模板限制!
AI需求条目化全面升级!支持多格式需求,打破模板限制! 一、多格兼济 标准立成 1、功能揭秘 预览未来 平台需求板块的AI需求条目化功能迎来全面升级。它支持多种需求格式,不再受限于模板文件,能够一键自动快速且灵活地生…...
Java—I/O流
Java的I/O流(输入/输出流)是用于在程序和外部资源(如文件、网络连接等)之间进行数据交换的机制。通过I/O流,可以实现从外部资源读取数据(输入流)或将数据写入外部资源(输出流&#x…...
Huginn服务部署
工作中需要使用爬虫系统,做为技术选型需要对Huginn系统进行部署并进行功能验证。下面的文章会记录了Huginn的部署过程,本次部署采用的Ubuntu-23.0.4系统,使用Docker部署。部署过程需要翻墙。 一、安装Docker 删除旧版本 sudo apt-get remo…...
深入解析Java数据包装类型:特性、机制与最佳实践
文章目录 1. 基本概念2. 自动装箱与拆箱3. 缓存机制4. 不可变性5. 常见陷阱与最佳实践a. 空指针异常b. 不要用 比较两个包装类实例c. 高精度计算d. 字符串解析 总结 1. 基本概念 Java提供了每个基本数据类型的包装类,位于java.lang包中。这些包装类允许我们将基本…...
【Java基础入门篇】二、控制语句和递归算法
Java基础入门篇 二、控制语句和递归算法 2.1 switch-case多分支选择语句 switch执行case语句块时,若没有遇到break,则运行下一个case直到遇到break,最后的default表示当没有case与之匹配时,默认执行的内容,代码示例如…...
PostgreSQL WAL日志膨胀处理
作者:Digital Observer(施嘉伟) Oracle ACE Pro: Database PostgreSQL ACE Partner 11年数据库行业经验,现主要从事数据库服务工作 拥有Oracle OCM、DB2 10.1 Fundamentals、MySQL 8.0 OCP、WebLogic 12c OCA、KCP、PCTP、PCSD、P…...
用户该怎么管理维护自己的服务器?
管理和维护自己的服务器是确保其长期稳定、高效和安全运行的重要任务。以下是一些关键的服务器管理和维护的步骤和建议,适用于Linux或Windows服务器。 1.定期备份数据 定期备份是防止数据丢失和恢复故障的关键步骤。备份策略应包括: 全量备份:…...
【MYSQL数据库相关知识介绍】
MySQL 在我们日常技术中是一个广泛使用的开源关系型数据库管理系统,所以作为测试同学,掌握mysql的相关知识是必不可少的技能之一,所以小编从软件测试的角色出发,来整理一些跟测试相关的知识,希望能够帮助到大家。 一、…...
初窥 HTTP 缓存
引言 对于前端来说, 你肯定听说过 HTTP 缓存。 当然不管你知不知道它, 对于提高网站性能和用户体验, 它都扮演着重要的角色! 它通过在客户端和服务器之间存储和重用先前获取的资源副本, 来减少网络流量和降低资源加载时间, 从而提升用户体验! 以下是 HTTP 缓存的重要性: 减少…...
yolov8的深度学习环境安装(cuda12.4、ubuntu22.04)
目录 一、先安装基础环境包 1.首先给Ubuntu安装Chrome浏览器(搜索引擎换成百度即可) 2、ubuntu 22.04中文输入法安装 3、安装 terminator 4、安装WPS for Linux 5、安装其它之前需要先安装anaconda 6、安装配置anaconda 7、安装完成anaconda后创建…...
RSA算法和AES算法,哪种更安全
目录 一、RSA (非对称加密算法) 二、AES (对称加密算法) 三、对比总结 四、更安全的选择 五、结合使用:RSA AES RSA 和 AES 是两种不同类型的加密算法,适用于不同的场景,因此它们的安全性不能直接比较,而是取决于具体的应用…...
Vue教程|搭建vue项目|Vue-CLI新版脚手架
一、安装Node环境 安装Node及Npm环境 Node下载地址:Node.js — Run JavaScript EverywhereNode.js is a JavaScript runtime built on Chromes V8 JavaScript engine.https://nodejs.org/en/ 安装完成后,检查安装是否成功,并检查版本,命令如下: node -v npm -v mac@Macd…...
kdump调试分析(适用于麒麟,ubuntu等OS)
1. kdump基本原理 1.1 内核崩溃处理机制 当 Linux 系统内核发生崩溃时,通常会触发 panic,系统停止正常运行。Kdump 在这种情况下: 使用一个备用的内核(称为 crash kernel)来启动最小化的环境。从崩溃的主内核中复制内存内容(转储文件)。将转储文件保存到预定义的存储位…...
houdini肌肉刷pin点的方法
目标:产生gluetoanimation这个属性 主要节点:attribute paint(或者muscle paint) 步骤1: 导入肌肉资产 导入的是rest shape的肌肉 在有侧边栏可以打开display group and attribute list,方便查看group。不同的肌肉块按照muscl…...
JMeter 并发策略-针对准点秒杀场景的压测实现
一、场景的压测实现 1,创建线程组,10并发用户执行5次; 2,创建 Synchronizing Timer 元件,用于同步线程,设置同步元件 Synchronizing Timer 3,创建 http 请求4,创建 view results in table 元件…...
龙迅#LT6912适用于HDMI2.0转HDMI+LVDS/MIPI,分辨率高达4K60HZ,支持音频和HDCP2.2
1. 描述 LT6912是一款高性能的HDMI2.0转HDMI和LVDS和MIPI转换器。 HDMI2.0 输入和输出均支持高达 6Gbps 的数据速率,为4k60Hz视频提供足够的带宽。此外,还支持 HDCP2.2 进行数据解密(无数据 加密)。 对于 LVDS 输出,…...
RBF神经网络预测结合NSGAII多目标优化
目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 RBF神经网络预测结合NSGAII多目标优化 rbf神经网络预测结合nsga2多目标优化 题外话: 多目标优化是指在优化问题中同时考虑多个目标函数的优化过程。在多目标优化中,通常存在多个冲突的目标&am…...
如何看linux系统内核是aarch64 ,还是64-bit
要查看 Linux 系统内核是 aarch64 架构还是 64-bit 架构,可以通过以下几种方法来确认: 方法 1:使用 uname 命令 uname 命令用于显示系统信息。使用以下命令查看系统的架构: uname -m如果输出是 aarch64,说明你的系统…...
如何通过 ADB 安装 xapk
Android开发这么久,今天发现还能这么操作!😂 记录通过ADB安装xapk、apks的两种方式: 1.ADB命令安装使用APK-Splits技术分包的应用程序 这位大佬的方式步骤较为繁琐,不过兼容性应该较好,亲测成功安装。 2.How to install xapk, apks, or multiple-apks via adb? 这个…...
QT:多ui界面显示
文章目录 1.多ui界面添加2.跳转函数3.返回函数4.Qt5源码工程5.模态显示 1.多ui界面添加 最终生成这个目录 2.跳转函数 void MainWindow::on_pushButton_clicked() {//this->setWindowModality(Qt::WindowModal);test1 *t1 new test1();t1->setParentData(this);this-…...
redis cluster 3主3从部署方案
文章目录 1 Redis Cluster 介绍1 Redis cluster 架构2 Redis cluster的工作原理2.1 数据分区2.2 集群通信2.3 集群伸缩2.3.1 集群扩容2.3.2 集群缩容 2.4 故障转移2.4.1 主观下线2.4.2 客观下线 3 Redis Cluster 部署架构说明3.1 部署方式介绍3.2 实战案例:基于Redi…...
前端学习笔记之文件下载(1.0)
因为要用到这样一个场景,需要下载系统的使用教程,所以在前端项目中就提供了一个能够下载系统教程的一个按钮,供使用者进行下载。 所以就试着写一下这个功能,以一个demo的形式进行演示,在学习的过程中也发现了中文路径…...
从技术视角看AI在Facebook全球化中的作用
在全球化日益加深的今天,人工智能(AI)作为一种变革性技术,正在深刻影响全球互联网巨头的发展方向。Facebook作为全球最大的社交媒体平台之一,正通过AI技术突破语言、文化和技术的障碍,推动全球化战略的实现…...
Web 表单开发全解析:从基础到高级掌握 HTML 表单设计
文章目录 前言一、什么是 Web 表单?二、表单元素详解总结前言 在现代 Web 开发中,表单 是用户与后端服务交互的重要桥梁。无论是用户登录、注册、搜索,还是提交反馈,表单都无处不在。在本文中,我们将从基础入手,全面解析表单的核心知识点,并通过示例带你轻松掌握表单开…...
Milvus 2.5:全文检索上线,标量过滤提速,易用性再突破!
01. 概览 我们很高兴为大家带来 Milvus 2.5 最新版本的介绍。 在 Milvus 2.5 里,最重要的一个更新是我们带来了“全新”的全文检索能力,之所以说“全新”主要是基于以下两点: 第一,对于全文检索基于的 BM25 算法,我们采…...
【webrtc】 mediasoup中m77的IntervalBudget及其在AlrDetector的应用
IntervalBudget 用于带宽控制和流量整形 mediasoup中m77 代码的IntervalBudget ,版本比较老IntervalBudget 在特定时间间隔内的比特预算管理,从而实现带宽控制和流量整形。 一。 pacedsender 执行周期: 下一次执行的时间的动态可变的 int64_t PacedSender::TimeUntilNextPr…...
AI数据分析工具(二)
豆包-免费 优点 强大的数据处理能力: 豆包能够与Excel无缝集成,支持多种数据类型的导入,包括文本、数字、日期等,使得数据整理和分析变得更加便捷。豆包提供了丰富的数据处理功能,如数据去重、填充缺失值、转换格式等…...
毕业设计代做网站推荐/杭州seo软件
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼package testOfProject;import javax.swing.*;import java.awt.*;import java.awt.event.*;public class ThreadView extends JFrame implements ActionListener {JPanel jp1;JButton jb1, jb2;public static void main(String[] a…...
上海网站建站/学seo的培训学校
迭代协议 可迭代协议(The iterable protocol) 和 迭代器协议(The iterator protocol)是对 ECMAScript 2015 的补充,不是新的内置或语法,仅仅是协议。可以被任何遵循某些约定的对象来实现。 可迭代协议 可迭…...
温州网站制作案例/成都关键词快速排名
EJ Technologies JProfiler(Java剖析工具)r是一个功能强大的工具,您可以使用EJ Technologies JProfiler以动态的方式分析基于Java的应用程序,并使您能够分析它们,从而优化性能。基本简介JProfiler是一个全功能的Java剖析工具(profiler)&#…...
知名网站建设公/seo人才招聘
作者踩了各个大坑,得此精华 注意点1:安装Pycharm 安装Pycharm应当勾选添加路径选项。 以免最后需要手动添加环境变量。 注意点2:安装python 需要安装python3.6~3.9,3.6或3.10不行。 高版本或低版本无法匹配PyQt5。 注意点3:新建一个proj…...
单位做网站注意什么/发表文章的平台有哪些
三面大概九十分钟,问的东西很全面,需要做充足准备,就是除了概念以外问的有点懵逼了(呜呜呜)。回来之后把这些题目做了一个分类并整理出答案(强迫症的我狂补知识)分为软件测试基础、Python自动化…...
国外在线crm酒店系统/南宁seo推广优化
目录1. 什么是设计模式?2. 设计原则概述3. 设计模式核心思想4. 设计模式分类1. 什么是设计模式? 设计模式是一套被反复使用、多数人知晓、经过分类编目的、代码设计经验的总结。它是为了可重用代码,让代码更容易的被他人理解并保证代码的可靠…...