尝试制作宏以删除Google表格中的最后行数和列数

时间:2018-10-06 13:46:10

标签: google-apps-script google-sheets

我正在使用此脚本删除当前google表格标签中的最后一行和最后几列,它显示了“这些行超出范围”。错误。 我不知道为什么,当我使用整数而不是第二个参数时,它工作正常。

var spreadsheet = SpreadsheetApp.getActive();
var sheet = spreadsheet.getActiveSheet();

//Delete rows 201+
sheet.deleteRows(201, sheet.getLastRow() - 200 );

//Delete Columns 10+
sheet.deleteColumns(10, sheet.getLastColumn() - 9 );

3 个答案:

答案 0 :(得分:0)

超出范围的错误与方法.deleteRows和.deleteColumns有关。 该错误是由于尝试调用一个不存在的范围而引起的。无论是因为它试图调用工作表中最大的单元格数量,还是因为它试图调用第0个范围甚至是一个负范围,都在它的下面。您无法调用.getRange(0,0),因为它不存在,并且会返回超出范围的错误。 这里的问题是我无法为您提供解决方案,因为我没有关于如何获取某些变量的上下文。 我能做的是建议使用其他方法。从您的代码判断,您只想删除一个行和一个列。使用.deleteRow(Row)@nd .deleteColumn(Column)完成此操作要容易得多。 这里是文档: https://developers.google.com/apps-script/reference/spreadsheet/sheet#deleteColumn(Integer)https://developers.google.com/apps-script/reference/spreadsheet/sheet#deleteRow(Integer) 如果这样做不能帮助您创建工作表副本,请删除所有敏感信息并共享具有编辑权限的链接,以便本人亲自检查您的代码和电子表格,以更好地解决问题。

答案 1 :(得分:0)

下面有一些简单的脚本可能会对您有所帮助。

function delLastNRows(n){
  var n=n || 3;//allows you to delete last three rows without passing function a parameter.
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getActiveSheet();
  var lr=sh.getLastRow();
  if(lr>=n){
    for(var i=0;i<n;i++){
      sh.deleteRow(sh.getLastRow());
    }
  }
}

function delLastNCols(n){
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getActiveSheet();
  var lc=sh.getLastColumn();
  if(lc>=n){
    for(var i=0;i<n;i++){
      sh.deleteColumn(sh.getLastColumn())
    }
  }
}

答案 2 :(得分:0)

我找到了答案的人,我应该使用getMaxRows()来获取工作表中的总行数,这是我使用的函数。

    void rdo_HEX_CheckedChanged(object sender, EventArgs e)
    {
        if (rdo_HEX.Checked)
        {
            try
            {
                textbox1.Text = AsciiToHex(textbox1.Text);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
                rdo_HEX.Checked = false;
            }
        }
        else
        {
            try
            {
                textbox1.Text = HexToAscii(textbox1.Text);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
    }