如何实际减少 sheet(Excel 加载项)的使用范围

How to actually reduce the used range of a sheet (Excel add-in)

我的加载项从每个 sheet 中删除了很多行,但是当我按 ctrl + end 时,光标仍然移动到初始范围的最后一个单元格,现在是空的。这是我正在做的事情的简化版本:

const used_range = sheet.getUsedRange()

const rows = used_range.rowCount
const columns = used_range.columnCount

const full_content = this.format(used_range) // returns a new matrix of values, but with some rows removed

used_range.clear()

sheet.getRangeByIndexes( 0 , 0, full_content.length, columns ).values = full_content
sheet.getRangeByIndexes( full_content.length, 0, (rows - full_content.length), columns ).delete('Up')

await context.sync()

第二个 sheet.getRangeByIndexes 包含剩余范围。如果我为填充设置颜色,我可以看到选择的范围是正确的,所以我希望调用 delete('Up') 会删除这些行,这样它们就不再是使用范围的一部分,而是最后一行sheet 仍然是删除它们之前的那个。这是一个问题,因为即使它们是空的,这些行也会增加文件大小。

有趣的是,如果我 used_range.delete('Up') 并按 ctrl + end,单元格 A1 被选中。

有没有办法强制缩小sheet范围?还是我做错了什么?

从 excel 中删除(以前使用过的)单元格时,使用的范围不一定会立即重置。我不完全确定为什么,因为我正在努力寻找有关它的文档,但这很可能是因为最后的操作仍然是可逆的。

要解决此问题,您可以保存文件,或关闭并再次打开它。 Excel 将重新正确计算使用的范围,并按预期显示。

编辑:这是一个相当普遍的问题,称为 "Ghost Cells",它很可能与内存中仍然存在的单元格有关。