使用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电源模块…

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

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

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

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

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

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

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

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

工业交换机有哪些功能?

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

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

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

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

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

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

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

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

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

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

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

物联网为电信运营商带来众多商业机会

到2020年底&#xff0c;物联网年收入预计将超过4500亿美元&#xff0c;这为电信服务商带来了巨大机遇。然而&#xff0c;竞争将是激烈的&#xff0c;全球主要电信运营商已经投资了数十亿美元在网络连接以及物联网服务和平台上&#xff0c;这意味着较小的运营商需要快速采取行动…

核心交换机相关技术参数详解

核心交换机一般指三层交换机。三层交换机就是具有部分路由器功能的交换机&#xff0c;工作在OSI网络标准模型的第三层&#xff1a;网络层。三层交换机的最重要目的是加快大型局域网内部的数据交换&#xff0c;所具有的路由功能也是为这目的服务的&#xff0c;能够做到一次路由&…

各种工业以太网技术浅析

高性能、工厂设备和IT系统集成&#xff0c;以及工业物联网的需求驱动促进了工业以太网的增长。在实时工业以太网中&#xff0c;EPA、 EtherCAT、 RTEX、Ethernet Powerlink、PROFINET、Ethernet/IP、SERCOS III是主要的竞争者。下面对它们进行简单比较。 Ethernet/IP Etherne…

核心交换机相对于普通交换机的优势

核心交换机我们平时提的挺多&#xff0c;相比较普通交换机而言&#xff0c;核心交换机需要具备以下特质&#xff1a;大缓存、高容量、虚拟化、FCOE、二层TRILL技术等方面的特征。那么&#xff0c;核心交换机相对于普通交换机有哪些优势呢&#xff1f;接下来我们就跟随飞畅科技的…

NB-IOT和LoRa技术优劣对比

LPWAN(low-power Wide-Area Network&#xff0c;低功耗广域网)近年来快速兴起。NB-IoT与LoRa是其中的典型代表&#xff0c;也是最有发展前景的两个低功耗广域网通信技术。那么NB-IOT 和 LoRa物联网长距离低功耗无线技术哪个更好呢? NB-IoT技术具备四大优势&#xff1a; 一是覆…

物联网生态系统的安全与威胁

物联网正在催生一个全新的连网设备生态系统&#xff0c;这与我们过去习惯的系统集中架构完全不同。新的设备连网世界将会通过云和其他无线方式进行大量敏感数据的交换。尽管物联网对个人和企业都有巨大的好处&#xff0c;但它也带来了一大堆安全问题&#xff0c;人们不能对此视…

地理科学师范计算机,地理科学师范考研方向指导参考

地理科学师范考研方向指导参考考研已经在准备当中&#xff0c;我们要想走好考研的第一步&#xff0c;就必须要了解专业方向&#xff0c;选择好专业和院校。小编为大家精心准备了地理科学师范考研方向&#xff0c;欢迎大家前来阅读。全国研究生师范相关院校排名考研院校排名&…

核心交换机与普通交换机的区别

交换机种类繁多&#xff0c;核心交换机并不是交换机的一种类型&#xff0c;而是放在核心层&#xff08;网络主干部分称&#xff09;的交换机叫核心交换机。那么&#xff0c;核心交换机和普通交换机之间有什么区别呢&#xff1f;接下来我们就跟随飞畅科技的小编一起来详细了解下…

javafx中的tree_JavaFX中的塔防(6)

javafx中的tree因此&#xff0c;我们已经在本教程的第6部分中&#xff0c;与此同时&#xff0c;游戏也取得了长足的进步。 在这一部分中&#xff0c;我们最终将添加一个显示得分的图层&#xff0c;已达到目标的敌人数量&#xff0c;启动下一个Wave的按钮以及用于购买新炮塔的资…