使用 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)
删除行的设置范围同理,就不演示了。
最后再设置一个定时器,在打开表格的时候运行这个函数,这样每次打开表格的时候都会自动检测表格的行和列,如果超出指定范围就会自动删除掉。