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");
}