您无法删除工作表 Google Sheets Script 上的所有行
Posted
技术标签:
【中文标题】您无法删除工作表 Google Sheets Script 上的所有行【英文标题】:You can't delete all the rows on the sheet Google Sheets Script 【发布时间】:2021-07-09 01:17:04 【问题描述】:我正在尝试使用此代码从整个工作簿中删除空单元格:
//Remove All Empty Rows in the Entire Workbook
function removeEmptyRows()
var ss = SpreadsheetApp.getActive();
var allsheets = ss.getSheets();
for (var s in allsheets)
var sheet=allsheets[s]
var maxRows = sheet.getMaxRows();
var lastRow = sheet.getLastRow();
if (maxRows-lastRow != 0)
sheet.deleteRows(lastRow+1, maxRows-lastRow);
来自这篇文章:Deleting ALL empty rows in a Google Spreadsheet
问题是我不断收到此错误:“例外:您无法删除工作表上的所有行。”
工作簿有多个工作表,至少前 20 行都有数据。
对这个脚本的需求来自一个更大的问题,即由于以下错误而无法运行导入脚本:“例外:此操作会将工作簿中的单元格数量增加到超过 5000000 个单元格的限制。”
任何帮助将不胜感激!谢谢
【问题讨论】:
【参考方案1】:如果您只需要清理所有东西,则可以通过这种方式更快更短地完成:
function removeAllRows()
SpreadsheetApp.getActive().getSheets().forEach(s => s.clear());
如果需要保持格式,可以使用clearContents()
代替clear()
。
以防万一,如果您需要删除所有 empty 行(并且不保留空行),可能不使用 deleteRows()
是有意义的,因为它很慢。您可以从工作表中获取二维数组的值,从二维数组中删除“行”,然后将其值设置回工作表上。可以这样做:
function removeEmptyRows()
// function to remove all empty lines from a 2D array
const get_not_empty_rows = (data) => data.filter(row => row.filter(String) != '');
// function to get a range on the given sheet by the size of a given 2D array
const get_new_data_range = (s, data) => s.getRange(1, 1, data.length, data[0].length);
var sheets = SpreadsheetApp.getActive().getSheets();
for (let sheet of sheets) // for every sheet
let all_rows = sheet.getDataRange().getValues(); // get 2D array
let not_empty_rows = get_not_empty_rows(all_rows); // remove empty lines
if (not_empty_rows.length > 0) // if there are lines
sheet.getDataRange().clearContent(); // clean the sheet
get_new_data_range(sheet, not_empty_rows).setValues(not_empty_rows); // set the values
但您需要决定是否删除工作表上的格式。 deleteRows()
其余行的格式保持不变。
【讨论】:
【参考方案2】:您的函数似乎可以执行您想要的操作,如果工作表完全为空,我只会收到该错误。处理这种情况的一种方法是向您的 IF 添加一个条件以查看工作表中是否有任何内容:
function removeEmptyRows()
var ss = SpreadsheetApp.getActive();
var allsheets = ss.getSheets();
for (var s in allsheets)
var sheet = allsheets[s]
var maxRows = sheet.getMaxRows();
var lastRow = sheet.getLastRow();
if (lastRow > 0 && maxRows - lastRow != 0)
sheet.deleteRows(lastRow + 1, maxRows - lastRow);
【讨论】:
以上是关于您无法删除工作表 Google Sheets Script 上的所有行的主要内容,如果未能解决你的问题,请参考以下文章
Google Sheets API:如何为可嵌入工作表“发布到网络”?
Discord bot 无法访问 Google Sheets 获取错误请求缺少有效的 API 密钥
如何使用 Python 中的 API 重命名 Google Sheets 电子表格中的(工作)表?
如何使用 Sheets APIv4 Java 在 Google 表格中插入一行