好吧,我有一个谷歌电子表格,我用它来跟踪我的库存,我在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);
}
}
}
试试这个:
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);
}
}