【问题标题】:Delete Row from all google sheets based on value of a cell根据单元格的值从所有谷歌表格中删除行
【发布时间】:2018-04-10 18:32:22
【问题描述】:

我正在尝试实现一个脚本,该脚本将根据该行中单元格中的字符串删除该行,

如果我想为每个工作表命名,我可以完成我的任务,但是我的工作表会不断更改名称,因此这意味着每天更新脚本。 我试图创建一个循环,但这似乎也不起作用,有什么建议吗?

我正在编写的脚本如下。

function RemoveInvoiced() {

var ss = SpreadsheetApp.openById("1pxWr3jOYZbcwlFR7igpSWa9BKCa2tTeliE8FwFCRTcQ").getSheets();
for (var k=0; k<ss.length; k++)
var values = ss[k].getDataRange().getValues();

var rows_deleted = 0; 

for (var i = 0; i < values.length; i++) {
    for (var j = 0; j < values[i].length; j++) {

        var value = values[i][j];

        var row = i + 1 - rows_deleted;

        if (typeof value === 'string') {

            var result = value.search("INVOICED");

            if (result !== -1) {
                ss.deleteRow(row);
                rows_deleted++;
            }
        }  
    }
}
};

【问题讨论】:

  • “它不起作用”不是一个充分的问题定义。 会发生什么以及您预计会发生什么。您的调试表明什么?
  • 另外请注意,如果您要调试脚本完全,您会注意到您的第一个 for 循环(所有工作表中的循环)格式错误。

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


【解决方案1】:

您可以通过 ID 访问它们,而不是使用工作表名称来访问它们。 只要您不删除工作表,即使您更改名称,id 也不会更改。

您首先必须获取工作表 ID,一个简单的函数可以为您完成此操作

 function getId(sheet){
     Logger.log(sheet.getSheetId());
 }

获得工作表 ID 后,您可以创建一个函数,通过 ID 打开正确的工作表

function openSheetById(doc, id){
    var sheets = doc.getSheets();
    for(var i = 0; i< sheets.length ; i++){
         if( sheets[i].getSheetId() == id)
              return sheets[i];
    }
    return false;
}

然后您就可以访问正确的工作表了。

function myFunc(){
     var doc = SpreadsheetApp.openById("1pxWr3jOYZbcwlFR7igpSWa9BKCa2tTeliE8FwFCRTcQ");
     var id = // your id here
     var sheet = openSheetById(doc, id);

     if(sheet){
          //do other stuffs
     }
}

【讨论】:

  • OP 的问题是由于缺少大括号。应该因为打字错误而关闭
猜你喜欢
  • 2015-04-19
  • 1970-01-01
  • 1970-01-01
  • 2017-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-20
  • 1970-01-01
相关资源
最近更新 更多