删除Google表格中的单元格而不删除整行

时间:2017-09-08 08:50:38

标签: google-apps-script google-sheets google-apps google-spreadsheet-api

我有如下代码,如果'delete'在该行的第4个单元格中,则当前删除整行。是否可以删除左侧的3个单元格以及我写入“删除”的单元格而不是整行(我在单元格B16中有其他内容,例如我不想删除?

我无法找到.deleteCell函数。还有另一种方法吗?

function deleteRows() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var rows = sheet.getDataRange();
  var numRows = rows.getNumRows();
  var values = rows.getValues();

  var rowsDeleted = 0;
  for (var i = 0; i <= numRows - 1; i++) {
    var row = values[i];
    if (row[4] == 'delete') { // This searches all cells in columns A (change to row[1] for columns B and so on) and deletes row if cell is empty or has value 'delete'.
      sheet.deleteRow((parseInt(i)+1) - rowsDeleted);
      rowsDeleted++;
    }
  }
};

2 个答案:

答案 0 :(得分:0)

所以问题是:

  

如何将给定单元格下方的所有单元格向上移动一行(覆盖给定的单元格值)?

执行此操作的代码是:

function deleteCell(sheet, cellx, celly){
    var wholeSheet = SpreadsheetApp.openById(sheet).getRange("A1:F").getValues();
    for(var i = celly; i<wholeSheet.length; i++){
        wholeSheet[cellx][i] = wholeSheet[cellx][i+1];
    }
    SpreadsheetApp.openById(sheet).setValues(wholeSheet);
}

答案 1 :(得分:0)

使用Shift Up或Shift Left删除

这将删除单元格并根据移位参数向上或向左移动数据。

function delCellAndShift(row,column,shift) 
{
  if(row && column)
  {
    var shift=(typeof(shift)!='undefined')?shift:'left';
    var ss=SpreadsheetApp.getActive();
    var sh=ss.getActiveSheet();
    var rg=sh.getDataRange()
    var vA=rg.getValues();
    if(shift=='left')
    {
      var tA=vA[row-1];
      tA.splice(column-1,1);
      tA.push('');
      vA[row-1]=tA;
      rg.setValues(vA);
    }
    if(shift=='up')
    {
      var vB=Object.keys(vA[0]).map(function (c) { return vA.map(function (r) { return r[c]; }); });
      var tA=vB[column-1];
      tA.splice(row-1,1);
      tA.push('');
      vB[column-1]=tA;
      vA=Object.keys(vB[0]).map(function (c) { return vB.map(function (r) { return r[c]; }); });
      rg.setValues(vA);
    }
  }
  else
  {
    var s='Invalid Inputs for delCellAndShift.<br /><input type="button" value="Close" onClick="google.script.host.close();" />';
    var ui=HtmlService.createHtmlOutput(s);
    SpreadsheetApp.getUi().showModalDialog(us, 'Invalid Inputs')
  }
}

我使用以下函数测试它来设置我的数据并运行main函数。

function testDelCell()
{
  delCellAndShift(3,7,'up');
}

function testsetupfordelcell()
{
    var rs=10;
    var cs=10;
    var ss=SpreadsheetApp.getActive();
    var sh=ss.getActiveSheet();
    var rg=sh.getRange(1,1,rs,cs);
    var vA=rg.getValues();
    for(var i=0;i<rs;i++)
    {
      for(var j=0;j<cs;j++)
      {
        vA[i][j]=Utilities.formatString('%s,%s',i,j)
      }
    }
    rg.setValues(vA);
}

这是左移的样本:

enter image description here

这是一个向上移动的样本:

enter image description here