Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何逐个获取多行并检查它们的值?_Javascript_Google Apps Script_Google Sheets - Fatal编程技术网

Javascript 如何逐个获取多行并检查它们的值?

Javascript 如何逐个获取多行并检查它们的值?,javascript,google-apps-script,google-sheets,Javascript,Google Apps Script,Google Sheets,我正在努力实现的目标: 获取电子表格中的每一行,从第一行开始,到最后一行结束 获取该行中的值 将值与 如果该行中的任何值==,请删除该行,然后继续下一行 否则继续下一行并重复 这就是我目前所拥有的。我可以得到电子表格中的每一行及其值。我不知道如何逐个获取一行,然后在检查行值后移动到下一行 var artistFile = SpreadsheetApp.openById(fileId); //open spreadsheet var artistFileRows = artistFile.getA

我正在努力实现的目标:

获取电子表格中的每一行,从第一行开始,到最后一行结束 获取该行中的值 将值与 如果该行中的任何值==,请删除该行,然后继续下一行 否则继续下一行并重复 这就是我目前所拥有的。我可以得到电子表格中的每一行及其值。我不知道如何逐个获取一行,然后在检查行值后移动到下一行

var artistFile = SpreadsheetApp.openById(fileId); //open spreadsheet
var artistFileRows = artistFile.getActiveSheet().getMaxRows(); //get number of rows in spreadsheet

var startL = "A"; //start column
var endL = "F"; //end column

//get row one by one
for (var a = 0; a < artistFileRows; a++)
{
  var range = startL + parseInt(a + 1) + ":" + endL + parseInt(a + 1); //range = A1:AX -- X == last row number in spreadsheet

  //get rows values
  var values = artistFile.getRange(range).getValues();

  //compare rows values to ''

  //delete rows with blank values

  //move to next row and repeat
}
编辑

日志:

代码:

错误前的最后一行应该显示.deleteRow[11]

但是,我仍然收到一个错误-执行失败:这些行超出了范围。

以下是代码:

var artistFile = SpreadsheetApp.openById(fileId); //open spreadsheet
var sheet = artisiFile.getSheetByName(SheetName); //open the sheet where the data is stored
var data = sheet.getDataRange().getValues();
var count = 0;
var index = [];

//find the rows which contain "
for(var i=0;i<data.length;i++)
{
   for(var j=0;j<data[i].length;j++)
   {
      if(data[i][j]=="\"")
      {
         index[count]=i;
         count++;
      }
   }
}

//delete the rows
for(var i=0;i<count;i++)
{
   sheet.deleteRow(index[i]);
}
希望这有助于:

 var artistFile = SpreadsheetApp.openById(fileId); //open spreadsheet
    var sheet = artisiFile.getSheetByName(SheetName); //open the sheet where the data is stored
    var data = sheet.getDataRange().getValues();
    var count = 0;
    var index = [];

//find the rows which contain "
for(var i=0;i<data.length;i++)
{
   for(var j=0;j<data[i].length;j++)
   {
      if(data[i][j]=="")
      {
         index[count]=i;
         count++;
         break;
      }
   }
}

//delete the rows
for(var i=0;i<count;i++)
{
   sheet.deleteRow(index[i]);
}
另外,我只做了两个改变

1被\n替换,因为我误解了要求中的细节

2增加休息时间;语句这将确保不被删除的行不会被删除

这肯定会起作用:

var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1");
  var data = sheet.getDataRange().getValues();

  var count = 0;
    var index = [];

//find the rows which contain
for(var i=0;i<data.length;i++)
{
   for(var j=0;j<data[i].length;j++)
   {
   Logger.log(" Row : "+i+" Column : "+j);
      if(data[i][j]=="" || data[i][j]==" ")
      {
         index[count]=i+1;
         Logger.log(index[count]);
         count++;
         break;
      }
   }
}

//delete the rows
for(var i=0;i<count;i++)
{
   sheet.deleteRow(index[i]-i);
   Logger.log("Row "+index[i]+" deleted");
}

删除时可能重复,请从循环中的最后一行向后移动到第一行,这样行索引不会移动。这不是也会删除不打算删除的行吗?不会。变量索引存储在第一个嵌套循环中找到匹配项的行的索引。而在下一个循环中,它只删除找到匹配的行。我得到一个错误-执行失败:这些行超出了范围。对于.deleteRowindex[i];。此外,它还删除了其中没有空白值的行……您可以共享您正在处理的电子表格的链接吗?或者你能至少拍一张电子表格的截图吗?只是想确定我是否理解了数据的正确格式。这是电子表格。它不限于11行。。。根据需要输入的值的多少,电子表格的行数将减少或增加。另外,我使用.getMaxRows;因为.getDataRange;未获取空行。仍将获取相同的错误。我将用日志和代码编辑原始帖子。在前面的代码中..每次删除一行时,连续行的索引都会更改…因此,在单个循环中删除多行时,我们需要确保更新行的索引。很高兴为您提供帮助:
[16-10-19 01:40:01:353 EDT] Spreadsheet.deleteRow([4]) [0.053 seconds]
[16-10-19 01:40:01:406 EDT] Spreadsheet.deleteRow([5]) [0.052 seconds]
[16-10-19 01:40:01:461 EDT] Spreadsheet.deleteRow([8]) [0.054 seconds]
[16-10-19 01:40:01:484 EDT] Spreadsheet.deleteRow([10]) [0.023 seconds]
[16-10-19 01:40:01:488 EDT] Execution failed: Those rows are out of bounds.
var artistFile = SpreadsheetApp.openById(fileId); //open spreadsheet
var sheet = artisiFile.getSheetByName(SheetName); //open the sheet where the data is stored
var data = sheet.getDataRange().getValues();
var count = 0;
var index = [];

//find the rows which contain "
for(var i=0;i<data.length;i++)
{
   for(var j=0;j<data[i].length;j++)
   {
      if(data[i][j]=="\"")
      {
         index[count]=i;
         count++;
      }
   }
}

//delete the rows
for(var i=0;i<count;i++)
{
   sheet.deleteRow(index[i]);
}
 var artistFile = SpreadsheetApp.openById(fileId); //open spreadsheet
    var sheet = artisiFile.getSheetByName(SheetName); //open the sheet where the data is stored
    var data = sheet.getDataRange().getValues();
    var count = 0;
    var index = [];

//find the rows which contain "
for(var i=0;i<data.length;i++)
{
   for(var j=0;j<data[i].length;j++)
   {
      if(data[i][j]=="")
      {
         index[count]=i;
         count++;
         break;
      }
   }
}

//delete the rows
for(var i=0;i<count;i++)
{
   sheet.deleteRow(index[i]);
}
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1");
  var data = sheet.getDataRange().getValues();

  var count = 0;
    var index = [];

//find the rows which contain
for(var i=0;i<data.length;i++)
{
   for(var j=0;j<data[i].length;j++)
   {
   Logger.log(" Row : "+i+" Column : "+j);
      if(data[i][j]=="" || data[i][j]==" ")
      {
         index[count]=i+1;
         Logger.log(index[count]);
         count++;
         break;
      }
   }
}

//delete the rows
for(var i=0;i<count;i++)
{
   sheet.deleteRow(index[i]-i);
   Logger.log("Row "+index[i]+" deleted");
}