#google-apps-script
#google-apps-script
Вопрос:
В настоящее время я использую этот код для перемещения некоторых строк, если столбец 6 содержит «NA»
function MoveNA() {
var s, targetSheet, found;
var s = SpreadsheetApp.getActive();
var allsheets = s.getSheets();
for(var s in allsheets){
var s = allsheets[s];
// Stop iteration execution if the condition is meet.
if(
(s.getName() == "Search") ||
(s.getName() == "xx") ||
(s.getName() == "NA")||
(s.getName() == "Inventory")
) continue;
targetSheet = SpreadsheetApp.getActive()
.getSheetByName("NA"),
found = 0,
s.getDataRange()
.offset(1, 0)
.getValues()
.forEach(function (r, i) {
if (r[5] == 'NA') {
sourceRange = s.getRange((i 2) - found, 1, 1, s.getLastColumn());
targetSheet.appendRow(sourceRange.getDisplayValues()[0])
s.deleteRow((i 2) - found);
found = 1;
SetFormulasNA();
}
})
}
}
Я не знаю, как обновить код, чтобы переместить только данные в столбцах: B, K, L, M, N, O, P
Я хочу скопировать как значения, а не формулы
Все остальные данные в исходной строке я не хочу перемещать
Пожалуйста, любая помощь?
Ответ №1:
Я обновил ваш код, чтобы включить столбцы, из которых вы хотите скопировать значения. Смотрите dataColumns
array. Это массив на основе 1, что означает, что столбец B равен 2, и так далее. Это только копирует значения в конечный лист и не удаляет строки из исходного листа.
function MoveNA() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheets = ss.getSheets();
// destination sheet
var desSheet = ss.getSheetByName('NA');
// sheets to exclude
var excludes = ['Search', 'xx', 'NA', 'Inventory'];
// which cols to copy values from
var dataColumns = [2, 11, 12, 13, 14, 15, 16];
// copy values
sheets.forEach(function(sheet) {
// check sheet is not in excludes
if (excludes.indexOf(sheet.getName()) != -1) return;
var found = 0;
sheet
.getDataRange()
.getValues()
.forEach(function(row, i) {
// check condition
if (row[5] == 'NA') {
row.forEach(function(val, j) {
if (dataColumns.indexOf(j 1) != -1) return;
row[j] = '';
});
desSheet.appendRow(row);
// delete source row
// sheet.deleteRow(i 1 - found);
// found = 1;
}
});
});
}
Комментарии:
1. Я получаю, что координаты или размеры диапазона недопустимы. (строка 34, файл «Переместить в NA»)
2. и мне действительно нужно удалить строки из исходного листа. один раз перемещается, пожалуйста
3. протестируйте новый код, если он работает, включите удаление кода, раскомментировав
4. Я все еще получаю, что координаты или размеры диапазона недопустимы. (строка 38)
5. странно. попробуйте еще раз сейчас