У меня есть поля для ввода и ввода пользовательской формы HTML, для ввода которых мне нужно выполнить поиск внутри строки в листах google.
Вот как выглядит камера.
У меня есть следующая функция, которая отлично справляется с поиском через ячейки и возвращает значения, которые мне не нужны в массиве, который я могу использовать с .setHiddenValues()
при фильтрации.
function getHiddenValueArray(colValueArr,visibleValueArr){
//colValueArr = SpreadsheetApp.getActive().getSheetByName('Monthly_Detail').getRange(2,64,359,1).getValues();
//visibleValueArr = ['last1']; //In this case user will only input 1 name
//strictLevel = 'lenient'
//will find a match within a cell
var flatUniqArr = colValueArr.map(function(e){return e[0].toString();})
.filter(function(e,i,a){
return (a.indexOf(e) == i && !(visibleValueArr.some(function(f){
return e.search(new RegExp(f,'i'))+1;
})));
});
Logger.log(colValueArr);
Logger.log(flatUniqArr);
return flatUniqArr;
}
Я считаю, что причина, по которой эта функция не работает, связана с 3-мя разрывами строк и одной разрывной строкой в данных ячейки.
Вот мои вопросы:
Я в порядке с третьим, если в этом случае, если нужно, с дополнительной переменной для типа члена.
Разъяснения:
Примечания от комментариев:
.setHiddenValues
с .setHiddenValues
символами или листами Google не может фильтровать ячейки, у которых есть символы новой строки.flatUniqArr
строки из flatUniqArr
используя flatUniqArr[i]= flatUniqArr[i].replace(/(\r\n|\n|\r)/gm,"");
в петле. Журналы показывают эту отмененную строку перевода. Тем не менее, по-прежнему нет. Это сужает его до листов Google, которые не могут фильтроваться на ячейках с новыми символами.Эта проблема:
Оказывается, хотя .setHiddenValues()
будет принимать массивы со строками, которые имеют в них .setHiddenValues()
строки, листы google не позволят этим строкам применяться при фильтрации столбцов.
Решение:
Удалите новые строки из ячеек, которые у них есть. В моем случае это было в столбце, поэтому я использовал цикл for для trim()
каждого значения. Я использовал обрезку, потому что проблема связана только с ведущими и завершающими символами новой строки. Если это помогает кому-то еще, то это код:
var teamArr = new Array()
var teamArr = sht.getRange(teamCS + '2:' + teamCS + lastRow).getValues().map(function (row) { return row.map(function (val) { return val.toString().trim(); }); });
sht.getRange(teamCS + '2:' + teamCS + lastRow).setValues(teamArr);
Обновлен до версии tehhowch быстрее для комментария.
var teamArr = sht....getValues().map(function (row) { return row.map(function (val) { return val.toString().trim(); }); });
setValues(teamArr)
ваш 2D-массив, чтобы вы могли использовать setValues(teamArr)
вместо медленного по-одному.
'string|with|breaks|||'.split('|').filter(item => !!item)
.\n+
означает поиск по крайней мере одной новой строки, за которой следует любое количество больше,\n*
означает 0 или более новых строк.