Необходимо написать цикл на JS для Excel, чтобы копировать данные из одного столбца с фильтром в другие
У меня есть таблица с четыремя столбцами . Необходимо поставить фильтр и брать значения, в соответствии со вторым столбцом и копировать значения третьего столбца в другой столбец, то есть при значении второго столбца 120, скопировать все значения третьего и вставить в другой столбец, потом поменять фильтр на значение 200 и скопировать значения в следующий столбец, от которого мы уже вставили значения 120-ти и так по всем значениям второго столбца.
Чтобы скопировать значения из одного столбца в другой, я использую это:
selectedSheet.getRange("F1").copyFrom(selectedSheet.getRange("A:A"), ExcelScript.RangeCopyType.all, false, false);
- этот код
Чтобы поменять фильтр, я использую это:
selectedSheet.getAutoFilter().apply(selectedSheet.getAutoFilter().getRange(), 2, { filterOn: ExcelScript.FilterOn.values, values: ["120"]});
. То бишь просто меняем тут значение Values:["..."].
И вот возникает вопрос, как мне сделать цикл, чтобы менялось значение фильтра и копировались значения с конкретным фильтром, с третьего столбца в другой, то есть чтобы менялась буква столбца G1,H1,I1.
Пример того, что нужно сделать ставим фильтр на второй столбец в 120 и копируем третий столбец в столбец номер 5, потом ставим фильтр в 200 и копируем третий столбец в столбец номер 6 и т.д.
function main(workbook: ExcelScript.Workbook){
let selectedSheet = workbook.getActiveWorksheet();
selectedSheet.getAutoFilter().apply(selectedSheet.getRange("B1"));
selectedSheet.getRange("G1").copyFrom(selectedSheet.getRange("B2:B34"), ExcelScript.RangeCopyType.all, false, true);
selectedSheet.getAutoFilter().apply(selectedSheet.getAutoFilter().getRange(), 2, { filterOn: ExcelScript.FilterOn.values, values: ["1000"] });
selectedSheet.getRange("F1").copyFrom(selectedSheet.getRange("A:A"), ExcelScript.RangeCopyType.all, false, false);
selectedSheet.getRange("F1").clear(ExcelScript.ClearApplyTo.contents);
selectedSheet.getAutoFilter().apply(selectedSheet.getAutoFilter().getRange(), 2, { filterOn: ExcelScript.FilterOn.values, values: ["120"] });
selectedSheet.getRange("G2").copyFrom(selectedSheet.getRange("C2:C1048576"), ExcelScript.RangeCopyType.all, false, false);
}
Это в ручном режиме, а мне нужно, чтобы он в столбце B удалил дубликаты и вставил значения в первую строку с отступом в один столбец, так же нужно, чтобы он поставил фильтр на 1000 и скопировал значения первого столбца, вставив эти значения в столбец с отступом в одну строку сверху, чтобы вышло вот так.А на пересечении этих значений будет третий столбец