Из вашего вопроса и комментария я понял, что для [["value1"], ["value2"], ["value3"]]
вы хотите вставить пустые строки, такие как [["value1"], [""], ["value2"], [""], ["value3"]]
, и каждая пустая строка - это столбец A до последнего столбца. Если мое понимание верно, как насчет этой модификации?
Очки модификации:
- Я думаю, что вы можете вставить строки, используя
insertRowsBefore()
цикл for в качестве сценария. Но в этом случае, когда это большое количество строк, скорость процесса будет немного медленной. Поэтому я хотел бы предложить использовать Sheets API. Таким образом, вы можете достичь этого с помощью одного вызова API.
При использовании этого измененного сценария, пожалуйста, включите API Sheets в Advanced Services и консоли API следующим образом.
Включить API Sheets:
Включить Sheets API v4 в расширенных службах Google
- в редакторе сценариев
- Ресурсы -> Расширенные услуги Google
- Включить Google Sheets API v4
- в редакторе скриптов
- Ресурсы -> Проект облачной платформы
- Просмотр консоли API
- На начальном этапе нажмите Включить API и получите учетные данные, например ключи.
- С левой стороны щелкните Библиотека.
- В поле Поиск API и сервисов введите «листы». И нажмите Google Sheets API.
- Нажмите кнопку включения.
- Если API уже включен, пожалуйста, не выключайте.
Если вы сейчас открываете редактор сценариев со сценарием для использования Sheets API, вы можете включить Sheets API для проекта, перейдя по этому URL-адресу https://console.cloud.google.com/apis/library/sheets.googleapis.com/
Модифицированный скрипт:
function Insert() {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheet = spreadsheet.getActiveSheet();
var values = sheet.getRange(1, 1, sheet.getLastRow(), 1).getValues(); // Retrieve values of column A.
var sheetId = sheet.getSheetId();
var requests = [];
var count = 0;
var adjustment = 0;
values.forEach(function(e, i) { // Create requests for batchUpdate.
if (e[0]) {
count++;
requests.push({
"insertRange": {
"shiftDimension": "ROWS",
"range": {
"sheetId": sheetId,
"startRowIndex": i + count - adjustment,
"endRowIndex": i + count + 1 - adjustment
}
}
});
} else {
adjustment++;
requests.pop();
}
});
Sheets.Spreadsheets.batchUpdate({"requests": requests}, spreadsheet.getId()); // Using Sheets API.
}
Ввод:
Вывод:
Примечание:
- Когда строки не имеют значений для столбца «A», строки пропускаются.
- Если вы не хотите его пропускать, удалите
if (e[0]) {
и } else {adjustment++; requests.pop();}
.
Рекомендации:
Если я неправильно понял ваш вопрос, извините.
Редактировать 1:
Я изменил способ создания запросов для BatchUpdate. Модифицированный скрипт стал проще благодаря созданию запросов из последней строки. Я думаю, что этим сценарий может удовлетворить желаемый результат.
function Insert() {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheet = spreadsheet.getActiveSheet();
var values = sheet.getRange(1, 1, sheet.getLastRow(), 1).getValues();
var sheetId = sheet.getSheetId();
var offset = 1; // For header
var requests = [];
for (var i = values.length - 1; i > offset + 1; i--) {
if (values[i][0]) {
requests.push({
"insertRange": {
"shiftDimension": "ROWS",
"range": {
"sheetId": sheetId,
"startRowIndex": i,
"endRowIndex": i + 1
}
}
});
}
};
Sheets.Spreadsheets.batchUpdate({"requests": requests}, spreadsheet.getId());
}
Редактировать 2:
Этот модифицированный скрипт придает цвет добавленной новой пустой строке. Для этого используется repeatCell
.
function Insert() {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheet = spreadsheet.getActiveSheet();
var values = sheet.getRange(1, 1, sheet.getLastRow(), 1).getValues();
var sheetId = sheet.getSheetId();
var offset = 1; // For header
var requests = [];
for (var i = values.length - 1; i > offset + 1; i--) {
if (values[i][0]) {
requests.push({
"insertRange": {
"shiftDimension": "ROWS",
"range": {
"sheetId": sheetId,
"startRowIndex": i,
"endRowIndex": i + 1
}
}
});
requests.push({ // Give color to new blank row.
"repeatCell": {
"cell": {
"userEnteredFormat": {
"backgroundColor": {
"red": 1,
"green": 1,
"blue": 1,
}
}
},
"range": {
"sheetId": sheetId,
"startRowIndex": i,
"endRowIndex": i + 1
},
"fields": "*"
}
});
}
};
Sheets.Spreadsheets.batchUpdate({"requests": requests}, spreadsheet.getId());
}