我是一个相对新手使用应用程序脚本,虽然我是一个体面的非宏观自动化谷歌表。我对Javascript并不熟悉,虽然我在大学里上过Python的课。我目前的目标是,如果左单元格的值为0,则如何编写一个宏,该宏将一个单元格和单元格直接删除到右边。(例如。a7是0;a7和b7都应该被删除,下面的单元格被向上移动)。为了把另一个扳手放进去,我有四个不同的列对,像这样(a&b,d&e,g&h,j&k),左边的值是需要多少,右边的单元格是哪个项目需要这个数量。我把其他人的代码连在一起(包括库珀,他很好地评论了最初的问题),并添加了一些想法,但我想我遗漏了一些东西,因为我对脚本不熟悉,所以我没有领会它。下面是有问题的代码:
function print() {
var source = SpreadsheetApp.getActiveSpreadsheet();
var sheet = source.getSheetByName('Temp');
sheet.copyTo(source).setName('Gathering')
activateSheetByName('Gathering') //Activates the created sheet
clearNotOrdered //deletes any item that wasn't ordered
Browser.msgBox('Ready to Print!') //just for kicks and giggles
}
function clearNotOrdered(){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[0];
var limit = sheet.getLastRow(); //number of rows in the sheet
var prep = sheet.getRange(7, 1, limit-13).getValues(); //Prep list
var kitchen = sheet.getRange(7,4,limit-11).getValues(); //Kitchen's list
var breading = sheet.getRange(7,7,limit-26).getValues(); //Breader's list
var gatherer = sheet.getRange(7,10).getValues(); //Catering Person's list
for(var i = 7;i <= limit;i++){//loop for each value to be inserted in each row of the target sheet
if(prep==0){
delAdjacentShiftUp() }
if(kitchen == 0){
delAdjacentShiftUp() }
if(breading==0){
delAdjacentShiftUp() }
if(gatherer==0){
delAdjacentShiftUp() }
}
}
function activateSheetByName(sheetName) {
var sheet =
SpreadsheetApp.getActive().getSheetByName(sheetName);
sheet.activate();
}
function delAdjacentShiftUp() {SpreadsheetApp.getActiveSheet().getActiveCell().offset(0,0,1,2).deleteCells(SpreadsheetApp.Dimension.ROWS);
}代码目前没有给我任何错误消息,但它也没有删除数据。我是否只需要运行4个单独的"For“命令,而不是试图将它们一起运行?
发布于 2022-09-22 18:58:40
试试这个:
function delAdjacentShiftUp() {
SpreadsheetApp.getActiveSheet().getActiveCell().offset(0,0,1,2).deleteCells(SpreadsheetApp.Dimension.ROWS);
}演示:

https://stackoverflow.com/questions/73819103
复制相似问题