gpt4 book ai didi

java - 重新定义命名的 Excel 范围然后使用 Apache POI 保存

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:10:21 26 4
gpt4 key购买 nike

使用 Apache POI,我能够找到一个命名范围:

XSSFName[] ranges = new XSSFName[workbook.getNumberOfNames()];
for (int i = 0; i < _wb.getNumberOfNames(); i++)
ranges[i] = workbook.getNameAt(i);

这样,我就可以为 AreaReference 设置单元格了:

AreaReference area = new AreaReference(ranges[0].getRefersToFormula());

最后我可以获得该范围内的所有单元格:

CellReference[] cells = area.getAllReferencedCells();

一切正常。 Burt 我有一个用例,我必须重新定义范围覆盖的区域。有没有办法做到这一点?我注意到 range.getRefersToFormula() 方法返回一个字符串,类似于 MySheet!$A$1:$B$8。有一个 range.setRefersToFormula(String formula),但我必须相信除了自己编写 excel 范围公式解析器之外还有其他方法。有没有办法生成一个 AreaReference 并设置为 Cell 类型安全的引用?我真的必须生成一个 String 来表示新范围吗?我认为某个地方会有 API 可以帮助我解决这个问题,但我似乎找不到它。

更新

我找到了一些API,但是好像不行,至少不能正常保存。这是我所做的。

AreaReference newArea = new AreaReference(firstCell, lastCell);
ranges[0].setRefersToFormula(newArea.formatAsString())

似乎正确设置了公式,但是当我将工作簿流式传输回磁盘时,范围完全错误。

最佳答案

您可以更新现有的引用并根据您的要求进行设置。假设引用包含 TestSheet!$A$1:$B$8,并且您想将其更改为 MySheet!$B$5:$C$12

对于任何单元格,在运行时说“B5”,

cell.getReference(); 

会给你单元格引用(就像在例子中......它会返回你“B5”)

char startCellColRef = cell.getReference().toString().charAt(0); 

将为您提供列引用(如果当前单元格为 B5,将为您提供“B”)。现在

int startCellRowRef = cell.getReference().toString().charAt(1);

将为您提供行索引(如果当前单元格为 B5,将为您提供“5”)。

通过相同的方式,您可以获得开始和结束单元格引用(例如 B5 和 C12)。

现在是如何更新现有引用。只需使用新创建的引用字符串更新其值

Name reference = wb.getName("NameReferenceInExcelSheet");
referenceString = sheetName+"!$"+startCellColRef+"$"+startCellRowRef+":$"+endCellColRef+"$"+endCellRowRef;
reference.setRefersToFormula(referenceString);

关于java - 重新定义命名的 Excel 范围然后使用 Apache POI 保存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13421876/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com