#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.02. Я не уверен, как я буду перебирать все ячейки…
.getDataRange
не дает мне каждую строку, но.getMaxRows()
дает. Как мне выполнить итерацию.getMaxRows()
, если она дает мне только номера строк?3. Я добавил в сообщение то, что я сделал до сих пор. Оператор if работает… Это способ перебирать значения и сравнивать их с «?
4. Я еще не пробовал. Почему он не отображается
true
для ячеек с пустыми значениями?5. Я думаю, это потому, что я получаю всю строку и сравниваю ее с «. Что мне нужно сделать, чтобы получить каждую ячейку из этой строки? Другой цикл for перебирает эту строку, чтобы получить каждую ячейку, а затем сравнить их с «?