Как я получу каждую пустую строку?

#javascript #google-apps-script #google-sheets

#javascript #google-apps-script #google-таблицы

Вопрос:

Я пытаюсь получить, а затем удалить каждую пустую строку в электронной таблице. Если строка со значениями содержит пустую ячейку, я хочу удалить и эту строку.

Я не хочу удалять только строки, которые находятся за строкой с последними значениями, я хочу удалить каждую пустую строку.

Например,

 -1 2 3 4 5
-1 2 3 4 5
-          << delete row
-1 2 3 4 5
-          << delete row
-          << delete row
-1 2 3 4 5
-1 2   4 5 << delete row -- cell is blank
-          << delete row
 

.getDataRange похоже, что пустые строки не получаются, так как же мне получить все строки в цикле for?


Редактировать

 var artistFile = SpreadsheetApp.openById(fileId); //open artists spreadsheet
var artistFileRows = artistFile.getActiveSheet().getMaxRows(); //get number of rows in spreadsheet -- 1 = no values (only headers are in the sheet), 2  = values (headers   values are in the sheet)

Logger.log(artistFileRows);
var startRange = "A1";
var endRange = "F"   artistFileRows;
var totalRange = startRange   ":"   endRange;
Logger.log(totalRange);
var allValues = artistFile.getRange(totalRange).getValues();

for (var a = 0; a < allValues.length; a  )
{
  Logger.log("row "   parseInt(a   1)   ": "   allValues[a]);

  if (allValues[a] === '')
  {
    Logger.log("true");
  }
  else
  {
    Logger.log("false");
  }
}
 

 var artistFile = SpreadsheetApp.openById(fileId); //open artists spreadsheet
var artistFileRows = artistFile.getActiveSheet().getMaxRows(); //get number of rows in spreadsheet -- 1 = no values (only headers are in the sheet), 2  = values (headers   values are in the sheet)

Logger.log(artistFileRows);
var startRange = "A1";
var endRange = "F"   artistFileRows;
var totalRange = startRange   ":"   endRange;
Logger.log(totalRange);
var allValues = artistFile.getRange(totalRange).getValues();

for (var a = 0; a < allValues.length; a  )
{
  //Logger.log("row "   parseInt(a   1)   ": "   allValues[a]);

  for (//iterate through each value in the row)
  {
    Logger.log(//each value in the row);
  }
}
 

код:

 for (var a = 0; a < allValues.length; a  )
{
  //Logger.log("row "   parseInt(a   1)   ": "   allValues[a]);

  for (var b = 0; b < allValues[a].length; b  )
  {
    Logger.log(allValues[a][b]);

    if (allValues[a][b] === '')
    {
      Logger.log("true");
      //artistFile.deleteRow(a);
    }
  }
}
 

расшифровка выполнения:

 [16-10-13 19:24:54:885 EDT] 10.0
[16-10-13 19:24:54:885 EDT] A1:F10
[16-10-13 19:24:54:917 EDT] Date
[16-10-13 19:24:54:918 EDT] h1
[16-10-13 19:24:54:918 EDT] h2
[16-10-13 19:24:54:919 EDT] h3
[16-10-13 19:24:54:919 EDT] h4
[16-10-13 19:24:54:920 EDT] h5
[16-10-13 19:24:54:921 EDT] d2
[16-10-13 19:24:54:921 EDT] td2
[16-10-13 19:24:54:922 EDT] ca2
[16-10-13 19:24:54:922 EDT] cr2
[16-10-13 19:24:54:923 EDT] t2
[16-10-13 19:24:54:923 EDT] ns2
[16-10-13 19:24:54:924 EDT] d3
[16-10-13 19:24:54:924 EDT] td3
[16-10-13 19:24:54:924 EDT] ca3
[16-10-13 19:24:54:925 EDT] cr3
[16-10-13 19:24:54:925 EDT] t3
[16-10-13 19:24:54:926 EDT] ns3
[16-10-13 19:24:54:926 EDT] 
[16-10-13 19:24:54:926 EDT] true
[16-10-13 19:24:54:927 EDT] 
[16-10-13 19:24:54:927 EDT] true
[16-10-13 19:24:54:927 EDT] 
[16-10-13 19:24:54:928 EDT] true
[16-10-13 19:24:54:928 EDT] 
[16-10-13 19:24:54:929 EDT] true
[16-10-13 19:24:54:929 EDT] 
[16-10-13 19:24:54:929 EDT] true
[16-10-13 19:24:54:930 EDT] 
[16-10-13 19:24:54:930 EDT] true
[16-10-13 19:24:54:930 EDT] 
[16-10-13 19:24:54:931 EDT] true
[16-10-13 19:24:54:931 EDT] 
[16-10-13 19:24:54:932 EDT] true
[16-10-13 19:24:54:932 EDT] 
[16-10-13 19:24:54:932 EDT] true
[16-10-13 19:24:54:933 EDT] 
[16-10-13 19:24:54:933 EDT] true
[16-10-13 19:24:54:933 EDT] 
[16-10-13 19:24:54:934 EDT] true
[16-10-13 19:24:54:934 EDT] 
[16-10-13 19:24:54:934 EDT] true
[16-10-13 19:24:54:935 EDT] d4
[16-10-13 19:24:54:935 EDT] td4
[16-10-13 19:24:54:936 EDT] ca4
[16-10-13 19:24:54:936 EDT] cr4
[16-10-13 19:24:54:936 EDT] t4
[16-10-13 19:24:54:937 EDT] ns4
[16-10-13 19:24:54:937 EDT] test1
[16-10-13 19:24:54:938 EDT] test1
[16-10-13 19:24:54:938 EDT] test1
[16-10-13 19:24:54:938 EDT] test1
[16-10-13 19:24:54:939 EDT] test1
[16-10-13 19:24:54:939 EDT] test1
[16-10-13 19:24:54:940 EDT] 
[16-10-13 19:24:54:940 EDT] true
[16-10-13 19:24:54:940 EDT] 
[16-10-13 19:24:54:941 EDT] true
[16-10-13 19:24:54:941 EDT] 
[16-10-13 19:24:54:941 EDT] true
[16-10-13 19:24:54:942 EDT] 
[16-10-13 19:24:54:942 EDT] true
[16-10-13 19:24:54:943 EDT] 
[16-10-13 19:24:54:943 EDT] true
[16-10-13 19:24:54:943 EDT] 
[16-10-13 19:24:54:944 EDT] true
[16-10-13 19:24:54:944 EDT] test2
[16-10-13 19:24:54:945 EDT] test2
[16-10-13 19:24:54:945 EDT] test2
[16-10-13 19:24:54:945 EDT] test2
[16-10-13 19:24:54:946 EDT] test2
[16-10-13 19:24:54:946 EDT] test2
[16-10-13 19:24:54:946 EDT] 
[16-10-13 19:24:54:947 EDT] true
[16-10-13 19:24:54:947 EDT] 
[16-10-13 19:24:54:948 EDT] true
[16-10-13 19:24:54:948 EDT] 
[16-10-13 19:24:54:948 EDT] true
[16-10-13 19:24:54:949 EDT] 
[16-10-13 19:24:54:949 EDT] true
[16-10-13 19:24:54:949 EDT] 
[16-10-13 19:24:54:950 EDT] true
[16-10-13 19:24:54:950 EDT] 
[16-10-13 19:24:54:951 EDT] true
 

Комментарии:

1. Ты в конце концов до этого додумался?

2. Нет. У меня есть строки, и я перебрал значения в этой строке, но когда я попытался удалить строку, она удалила больше непустых строк, а также пустых строк.

3. Вы пробовали добавить 1 к a, чтобы учесть тот факт, что строки основаны на 1, а не на 0? Проверьте мой ответ.

4. Индекс a относится к переменной диапазона и не применяется ко всему рабочему листу

5. ознакомьтесь с моим новым ответом и скажите, сделал ли он это.

Ответ №1:

Либо начните с последней строки и выполните итерацию в обратном направлении, либо начните с первой строки и уменьшайте свой итератор на 1 каждый раз, когда выполняется удаление.

 var startRange = "A1";
var endRange = "F"   artistFileRows;
var totalRange = startRange   ":"   endRange;
var allValues = artistFile.getRange(totalRange).getValues();

for (var a = 0; a < artistFileRows; a  )
{
   for (var n = 0; n < allValues[a].length; n  )
   {
      if(allValues[a][n] === '') 
     {
             artistFile.getActiveSheet().deleteRow(a 1);
             a--;
             break;
     }
   }


}
 

Комментарии:

1. Как я могу определить, когда строка содержит пустую ячейку или вся строка пуста? Я могу получить каждую строку, включая пустые строки, с .getMaxRows() помощью — это просто дает мне число, подобное 10.0

2. Я не уверен, как я буду перебирать все ячейки… .getDataRange не дает мне каждую строку, но .getMaxRows() дает. Как мне выполнить итерацию .getMaxRows() , если она дает мне только номера строк?

3. Я добавил в сообщение то, что я сделал до сих пор. Оператор if работает… Это способ перебирать значения и сравнивать их с «?

4. Я еще не пробовал. Почему он не отображается true для ячеек с пустыми значениями?

5. Я думаю, это потому, что я получаю всю строку и сравниваю ее с «. Что мне нужно сделать, чтобы получить каждую ячейку из этой строки? Другой цикл for перебирает эту строку, чтобы получить каждую ячейку, а затем сравнить их с «?