使用 Google 脚本检测表格行和列的长度是否超出指定范围。

有时候会遇到这种情况,在表格内会出现上千列或者行,然而这些多出来的范围是没有使用的,而且会造成表格卡顿。

首先使用 getValues 获取表格中列的数量。

const lastColumn = sheet.getRange('1:1').getValues()[0].length

这里解释一下为什么不使用 getLastColumn 获取列的数量,而是要使用 getValues

因为 getLastColumn 只能获取单元格内有内容的最后一列的数量,如果单元格内没有任何内容就会被忽略掉。那么使用 getValues 就可以确保获取完整的列的数量,即使单元格内没有任何内容。

然后判断列的数量是否超过指定的数量,如果超过了就通过 deleteColumns 删除。

if (lastColumn > 20) {
  sheet.deleteColumns(20, lastColumn - 20)
} 

完整代码例子如下:

const verifyList = [0, 1344777394]

function detectSheet () {
  const ss = SpreadsheetApp.getActiveSpreadsheet().getSheets()
  for (const sheet of ss) {
    if (verifyList.includes(sheet.getSheetId())) {
      // 删除列
      const lastColumn = sheet.getRange('1:1').getValues()[0].length
      if (lastColumn > 20) sheet.deleteColumns(20, lastColumn - 20)
      // 删除行
      const lastRow = sheet.getRange('A:A').getValues().length
      if (lastRow > 100) sheet.deleteRows(100, lastRow - 100)
    }
  }
}

verifyList 数组中设置指定表格的 ID,也就是表格链接 gid=xxxxx 上的数字,这样只会在指定的表格运行此功能。

在下面这一行代码中可以设置删除列的数量,例子中代码的意思是删除超过第 20 列的范围。

if (lastColumn > 20) sheet.deleteColumns(20, lastColumn - 20)

如果要删除超过第 10 列的范围,那么就改成下面的代码,3 个参数都需要一起修改。

if (lastColumn > 10) sheet.deleteColumns(10, lastColumn - 10)

删除行的设置范围同理,就不演示了。

最后再设置一个定时器,在打开表格的时候运行这个函数,这样每次打开表格的时候都会自动检测表格的行和列,如果超出指定范围就会自动删除掉。