使用Apache POI插入内容

介绍

大家都知道POI! 它是可用Java创建Excel文档的最佳库。 它真的很好,可以轻松地完成很多事情。 但是最近我想做些不那么简单的事情。 我想将现有的xlsx文件用作模板,并在某些位置将一些数据插入其中。 在这篇文章中,我将说明为什么版本4.0.0并不那么容易。

可用工具

为了在现有Excel文档的中间插入一些内容,必须将从插入点到最后一行的所有行向下移动n行,其中n是要插入的行数。 还最好保持要移动的行的格式。

实际上,POI具有一些API可以帮助解决这些问题。 的
工作表界面有方法
Sheet.shiftRows(int,int,int)可以这样使用:

sheet.shiftRows(insertPosition,sheet.getLastRowNum(),n);

有更高级的方法
Sheet.shiftRows(int,int,int,boolean,boolean),但是对于XSSF,布尔参数没有什么区别,正如我在代码中可以找到的那样。 对于HSSF,这些参数可能很重要。

因此,该方法应该可以解决问题! 有什么问题?

问题

当我尝试使用这种方法时,遇到了一个可怕的问题:“我们发现了一些内容问题……”

Apache POI

实际上,这非常令人沮丧。 我很快发现行以某种方式被错误地移动了。 LibreOffice至少能够打开文件,但是格式和插入的内容均错误。

这需要2-3个小时的勤奋挖掘:-)。 事实证明,即使在最新的4.0.0版本(甚至很可能是4.0.1版本)中,POI也存在错误,无法正确移动行。 这是该错误的链接:

https://bz.apache.org/bugzilla/show_bug.cgi?id=57423

例如,该方法更新工作表xml中的行引用

<row r =” 139

但不会更新单元格引用

<cr =” A138 ” s =“ 1” /> –错误

在这种情况下,单元必须指向上一级行,如下所示:
<cr =” A139 ” s =“ 1” /> –对

(如果您解压缩xlsx文件,则可以查看工作表xml)

该错误显示了一种解决方法。 我创建了一个方法,该方法在一个方法中实现了移位和变通方法:

public static void xssfShiftRows(Sheet sh, int firstRow, int last    Row, int shiftN) {int firstShiftedRow = firstRow + shiftN;int lastShiftedRow = lastRow + shiftN;sh.shiftRows(firstRow, lastRow, shiftN, true, true);/** This code is a workaround for the bug* https://bz.apache.org/bugzilla/show_bug.cgi?id=57423* In the sheet xml the row references are updated like this:* <row r="139"* but the cell references are incorrect* <c r="A138" s="1"/>** The number in the row 139 must match the number in the cell A139.* This code manually updates these links.*/for (int nRow = firstShiftedRow; nRow <= lastShiftedRow; nRow++)  {final Row row = sh.getRow(nRow);if (row != null) {String msg = "Row[rownum=" + row.getRowNum()+ "] contains cell(s) included in a multi-cell array         formula.  "+ "You cannot change part of an array.";for (Cell c : row) {((XSSFCell) c).updateCellReferencesForShifting(msg);}}
}
}

翻译自: https://www.javacodegeeks.com/2019/03/insert-content-apache-poi.html

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

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

相关文章

DC/DC电源模块是什么?有何特点

一、电源模块是什么&#xff1f; 电源模块是可以直接安装在印刷电路板上的电源供应器&#xff0c;有降压和升压两种&#xff0c;专用集成电路( ASIC )、数字信号处理器( DSP )、微处理器、存储器、现场可编程门阵列( FPGA )及其他数字或模拟负载提供供电。 二、DC/DC电源模块…

【渝粤教育】 广东开放大学 21秋期末考试组织行为学10068k2

1、组织行为学具有应用性学科性质。&#xff08;3 分&#xff09; 正确 错误 2、微观环境因素一般包括经济、政治、文化、法律和科学技术等。&#xff08;3 分&#xff09; 正确 错误 3、奖励与惩罚相结合&#xff0c;应该以罚为主&#xff0c;以奖为辅。&#xff08;3 分&…

工业交换机的价格为什么有高低之分?

最近&#xff0c;飞畅科技的小编发现客户在工业交换机价格上有很大的争议。为什么这么说呢&#xff1f;有的客户觉得为什么你们家的交换机这么贵&#xff0c;我便宜一半也能买到了&#xff0c;还有客户想花这些钱买这么一个工业交换机真的划算吗&#xff1f;那接下来小编就来和…

【渝粤教育】国家开放大学2018年春季 0221-21T数字电子电路 参考试题

编号&#xff1a;0221 2017-2018学年第二学期期末考试 数字电子电路&#xff08;开卷&#xff09; 试 题 2018年 7月 填空题&#xff08;每小题6分&#xff0c;共30分&#xff09; 1、在直流电路中&#xff0c;电容上的 及电感中的 一般不会突变。 2、NPN硅三极管工作在截止状…

html页面与js添加的页面区别,css、js、html三者有何区别?

HTML、CSS、JavaScript是前端学习非常重要的内容&#xff0c;作为前端工程师&#xff0c;建立网站&#xff0c;设计网页需要有一定的审美能力&#xff0c;也需要一定的编程技术。那么它们三者有什么区别&#xff1f;下面本篇文章就来给大家介绍一下。HTML为网页结构。CSS为网页…

电源模块质量好不好,看看以下5点就知道了!

电源模块作为电子设备的心脏&#xff0c;其可靠性直接影响产品的质量好坏&#xff0c;因此&#xff0c;在选择上正确判断模块的好坏显得尤为重要。一般我们在选择上仅从电源的输入、输出、纹波、击穿、温度、认证等特性指标来看&#xff0c;除开这些&#xff0c;我们还可以根据…

【渝粤教育】国家开放大学2018年春季 0507-21T非线性编辑 参考试题

科目编号&#xff1a;[0507] 座位号 2017-2018学年度第二学期期末考试(开卷) 非线性编辑 试题 2018年 7 月 填空题&#xff08;本大题共6小题&#xff0c;共10空&#xff0c;每空3分&#xff0c;共计30分&#xff09; 1&#xff0e;Desktop Display Mode电脑视频显示模式&…

电源模块的6个优势及其作用

随着电子行业的发展&#xff0c;对电源的要求体积更小、可靠性更高。加上高频软开关技术、半导体工艺和封装技术的进步&#xff0c;电源模块的功率密度越来越大&#xff0c;转换效率也越来越高&#xff0c;应用更加简单了。 电源模块与分立式方案相比&#xff0c;优势在哪里&am…

工业交换机有哪些功能?

工业交换机(Industrial Switch)也叫工业以太网交换机&#xff0c;是一种工作在OSI第二层(数据链路层&#xff0c;参见“广域网”定义)上的、基于MAC (网卡的介质访问控制地址)识别、能完成封装转发数据包功能的网络设备。那么&#xff0c;工业交换机的功能有哪些呢&#xff1f;…

【渝粤教育】国家开放大学2018年春季 0689-22T老年心理健康 参考试题

编号&#xff1a;0689 座位号 2017&#xff5e;2018学年度第二学期期末考试 老年心理健康试题 2018年7月 一、名词解释&#xff08;本大题共6小题&#xff0c;每题5分&#xff0c;共30分&#xff09; 期待性焦虑 忧郁&#xff1a; 急躁&#xff1a; 暴躁&#xff1a; 心理…

无处不在的蓝牙-蓝牙模块解析

在如今生活中&#xff0c;每个人都接触了无线连接、蓝牙传输。但是蓝牙模块还是很少见的。那么蓝牙模块有什么作用呢&#xff1f;具体又有哪些应用场景呢&#xff1f;本篇将为大家简单介绍蓝牙模块的作用以及常见的应用场景。 蓝牙模块按照标准分有1.2&#xff0c;2.0&#xf…

连接另一台计算机的用户名和密码,局域网怎么登录另外一台电脑上

如今企业实现局域网远程控制的最常用方法是使用远程控制软件。服务器端程序(Server)和客户端程序(Client)是远程控制软件的主要构成部分。下面是学习啦小编为大家整理的关于局域网怎么登录另外一台电脑上&#xff0c;一起来看看吧!局域网怎么登录另外一台电脑上被控制端要开启远…

【渝粤教育】国家开放大学2018年春季 3897T商务英语1 参考试题

试卷代号&#xff1a;3897 &#xff08;中央广播电视大学&#xff09;2018年春季学期“开放专科”期末考试 商务英语1 试题 2018年7月 注 意 事 项 一、将你的学号、姓名及分校&#xff08;工作站&#xff09;名称填写在答题纸的规定栏内。考试结束后&#xff0c;把试卷和答题纸…

工业以太网交换机与以太网光端机的区别

关于工业以太网交换机与以太网光端机的区别&#xff0c;简单的说&#xff0c;交换机就是数据交换和共享的设备来的&#xff0c;而光端机是负责传输的设备&#xff0c;两者是完全不同的设备。接下来就由飞畅科技的小编来详细介绍下工业以太网交换机与以太网光端机有什么区别&…

4G(LTE)是如何实现智慧农业物联网的?

农业&#xff0c;其中传统农业是在自然经济条件下&#xff0c;采用人力、畜力、手工工具、铁器等为主的手工劳动方式&#xff0c;靠世代积累下来的传统经验发展&#xff0c;以自给自足的自然经济居主导地位的农业。传统农业是一种生计农业,农产品有限,家庭成员参加生产劳动并进…

摇滚bono_Java比以往任何时候都摇滚

摇滚bono在TIOBE索引上 &#xff0c;Java和C长期以来一直排名第一和第二&#xff0c;并且随着最近发布的JDK 8 GA的发布&#xff0c;对于我们的社区来说&#xff0c;情况不会继续恶化。 Java简直就是岩石&#xff01; 它是构建几乎所有应用程序的最佳平台。 但是&#xff0c;…

【渝粤教育】国家开放大学2018年春季 7402-21T社会问题 参考试题

试卷编号&#xff1a;7402 座位号 2017——2018学年度第二学期期末考试 社会问题 试题 2018年7月 答题框&#xff1a; 1&#xff0e;在同一时期&#xff0c;由于不同地区之间、各个社会阶层之前、各阶层内部不同成员之间的收入差而产生的低于社会认定的某种水平的状况。称为&…

蓝牙核心规范5.1:革新精确定位技术

1月29日&#xff0c;蓝牙技术联盟&#xff08;BluetoothSIG&#xff09;正式公布了蓝牙 5.1 版本的核心规范。 此规范在未来将取代Wi-Fi的辅助定位功能&#xff0c;为需要GPS等位置服务的场景助力&#xff0c;包括确定距离甚至精确位置。 新变化中最值得一说的便是蓝牙5.1将会…

写出下列的中文意思 HTML,计算机网络技术考试试题纸B卷

计算机网络技术考试试题纸B卷一、单选题(每小题1分&#xff0c;共20分)1&#xff0e;调制解调技术主要用于下列哪种数据通信中BA、模拟信号传输模拟数据B、模拟信号传输数字数据C、数字信号传输数字数据D、数字信号传输模拟信号2&#xff0e;下列哪种交换方法传输延迟最小&…

【渝粤教育】国家开放大学2018年春季 8622-22T社会调查研究与方法 参考试题

科目编号&#xff1a;8622 座位号 2017-2018学年度第二学期期末考试 社会调查研究与方法 试题 2018年 7 月 一、单选题&#xff08;本大题共10小题&#xff0c;每小题2分&#xff0c;共计20分&#xff09; &#xff08;★请考生务必将答案填入到下面对应序号的答题框中★&…