我正在尝试使用insertColumn
实现Apache POI
功能。据我所知,实现这一目标的唯一方法是在iterate
中rows
上Sheet
,然后在每个Cell
中移动每个Row
超过1 Cell
,然后在所需列索引的行中创建新的Cell
。
但是,我注意到只有HSSFRow
有moveCell()
方法,而XSSFRow
没有 - 是否有理由认为moveCell仅针对HSSF实施?是否有一个原因无法添加到Sheet
interface
并为Sheet
两种类型实现(因为我们的代码正在使用接口以支持.xls和.xls)。 xslx文件类型)?
编辑:
逐个单元地实现逐个单元格后,逐行移动,很明显这不会适用于公式,因为引用没有更新。我终于找到了一个开源的LGPL库,它可以比POI - openxls更好地处理这个问题。使用此库几周后,我 不 建议使用此库。我们在bug之后遇到了bug,花了更多的时间来修复和推送bug到我们的公共git repo,而不是我们花在开发应用程序代码上。
答案 0 :(得分:1)
在查看两种表单时看到这种不同行为的原因是因为.xls和.xlsx文件的结构方式完全不同。所以简单地说“是不可能将它添加到表格界面”,是的,这是可能的,但是添加这些附加功能也可能是非常重要的。请参阅here,了解他们切换到.xlsx的原因。如果你真的想要有趣,请将whateverMyFileis.xlsx文件的名称更改为whateverMyFileis.zip>然后解压缩它,你可以看到他们如何打破文件内部的所有内容的真实程度。然而,如果您为.xls执行此操作,则它不会执行任何操作。
至于您询问有关实现insertColumn功能的问题的第一部分。这给你带来麻烦的原因是因为excel表本质上是基于行的,而Apache-POI并没有为列提供非常多的本机支持。几乎所有你想要做的涉及基于列的逻辑的事情都必须由你完全实现。因此,为了回答您关于可以看到的唯一方法的问题,我同意,我不会随便看到更好的方法来创建列。