【问题标题】:How to actually reduce the used range of a sheet (Excel add-in)如何实际减少工作表的使用范围(Excel 插件)
【发布时间】:2019-12-02 15:37:01
【问题描述】:

我的插件从每个工作表中删除了很多行,但是当我按下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') 会删除这些行,这样它们就不再是使用范围的一部分,而是工作表的最后一行仍然是删除它们之前的那个。这是一个问题,因为即使它们是空的,这些行也会影响文件大小。

有趣的是,如果我执行used_range.delete('Up') 并按ctrl + end,则会选择单元格A1。

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

【问题讨论】:

  • 您是否尝试过 UsedRange.Delete 而不是 Clear?因为清除单元格与删除单元格不同......
  • 请注意,如果 Excel 工作表中的范围缩小,有时在保存文件之前不会重置。
  • @Xabier 我在最后使用Range.delete 删除范围。 clear 只是为了清空范围,以便我可以设置新值。
  • @Plutian 这就是问题所在!再次关闭和打开文件确实减小了范围。如果您想将此设置为答案,我会接受它

标签: excel office-js office-addins


【解决方案1】:

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

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

编辑:这是一个相当普遍的问题,称为“幽灵细胞”,它很可能与仍然存在于内存中的细胞有关。

【讨论】:

  • Excel 从 1990 年开始就是这样。我不能告诉你为什么,但我知道很长一段时间都是这样。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-07
  • 2016-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-25
  • 1970-01-01
相关资源
最近更新 更多