Google 电子表格 - 当我将 Sheet1 上的数量编辑为 0 并将下面的所有项目向上移动时,删除 Sheet2 上的一行

问题描述 投票:0回答:1

好吧,我有一个谷歌电子表格,我用它来跟踪我的库存,我在1个文件中有2张工作表,Sheet1有一行我的商品、平台、数量及其区域。我有第二个工作表和与工作表 1 相同的代码,用于跟踪商品、平台、数量及其区域。

但是如果第一张工作表上的数量为 0,我希望将工作表 1 中数量设置为 0 的工作表 2 的整行或行删除,并且只在工作表 2 上执行此操作。

到目前为止,我有这段代码,它正在将列表从 s1 更新到 s2 并尝试删除它,但删除部分没有执行任何操作,现在,在工作表 2 中,该值仅显示为 0,而不是获取整个值行或行被删除。

本质上,我只想删除sheet2中的整行,其中我在sheet1中将数量设置为0,但保留sheet1中的所有内容,仅用于数字输入,仅对sheet2进行更改。

如果可以的话,删除整行后,在代码中,是否有办法将删除部分下方的所有项目向上移动?这只是为了消除删除行后可能妨碍的空白。

function deleteRowsIfQuantityZero() {
   var ss = SpreadsheetApp.getActiveSpreadsheet();
   var sheet1 = ss.getSheetByName("Sheet1");
   var sheet2 = ss.getSheetByName("Sheet2");
   var range1 = sheet1.getDataRange();
   var values1 = range1.getValues();
   var range2 = sheet2.getDataRange();
   var values2 = range2.getValues();

   for (var i = 0; i < values1.length; i++) {
     if (values1[i][2] === 0) { 
     sheet2.deleteRow(i + 1);
     }
   }
 }

Image table for reference

javascript google-sheets
1个回答
0
投票

试试这个:

function deleteRowsIfQuantityZero() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var editableSheet = ss.getSheetByName("Sheet1");
  var newUpdatedItems = [];
  var receiverSheet = ss.getSheetByName("Sheet2");
  var esRange = editableSheet.getRange(2, 1, editableSheet.getLastRow() - 1, editableSheet.getLastColumn());
  var newData = esRange.getValues();
  for (i = 0; i < newData.length; i++) {
    if (newData[i][3] > 0) {
      newUpdatedItems.push(newData[i])
    }
  }

  try {
    var clearRange = receiverSheet.getRange(2, 1, receiverSheet.getLastRow() - 1, receiverSheet.getLastColumn());
    clearRange.clearContent();
    var pasteRange = receiverSheet.getRange(2, 1, newUpdatedItems.length, newUpdatedItems[0].length);
    pasteRange.setValues(newUpdatedItems);
  } catch (e) {
    var pasteRange = receiverSheet.getRange(2, 1, newUpdatedItems.length, newUpdatedItems[0].length);
    pasteRange.setValues(newUpdatedItems);
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.