Я хочу добавить строку после ячейки, которая соответствует моему условию по коду ниже. Однако он возвращает ошибку чтения «0».
После дальнейшей проверки я обнаружил, что он может запустить первый элемент, но после этого возвращает ошибку.
Мои данные - это просто демонстрационные данные, только с одним столбцом: "abc1, acb2, acb3..."
Редактировать 1: когда я тестирую с установкой значения в строке "B"+(i+1)
, код работает в цикле, но все равно показывает ошибку с чтением «0».
Изменить 2: когда я включаю строку setvalue
, она работает. Я не знаю, почему это так.
Ниже до и после.
function main(workbook: ExcelScript.Workbook) {
// Your code here
let mysheet = workbook.getActiveWorksheet();
let myrange = mysheet.getUsedRange().getValues() as string[][];
//console.info(myrange[1][0]); (for test. worked)
//mysheet.getRange("1:1").insert(ExcelScript.InsertShiftDirection.down); (for test, worked)
let count = 0 ;
for (let i = 0;i<=myrange.length;i++){
//console.info(myrange[i][0]); (for test, worked)
if (myrange[i][0].indexOf("abc")>-1){
//set value of right column when meet condition
//mysheet.getRange("B"+ (i+1)).setValue("test"); (worked)
//insert row at the row below when meet condition`
mysheet.getRange((i+1)+":"+(i+1)).insert(ExcelScript.InsertShiftDirection.down); //work for first element
count++;
//console.info(myrange);
//break; (loop only work for first element with this "break" line
}
}
}
Я добавил изображение при редактировании.
Таким образом, изображение вверху — это то, что было до, а изображение внизу — это то, как вы хотите, чтобы результат выглядел?
да. и мой код уже работает. но я не знаю, почему это не раньше.
Не зная абсолютных особенностей вашего требования, используя предоставленные вами тестовые данные, попробуйте этот скрипт.
function main(workbook: ExcelScript.Workbook) {
let worksheet = workbook.getActiveWorksheet();
let foundRangeArea = worksheet.findAll("abc", { completeMatch: false, matchCase: false });
foundRangeArea.getAreas().reverse().forEach(range => {
range.getCell(0,0).getOffsetRange(1,0).getEntireRow().insert(ExcelScript.InsertShiftDirection.down);
});
}
Получается это...
...в это...
Спасибо. ваше решение выглядит очень аккуратно.
Поэтому, если это сработало для вас, отметьте это как ответ. Сделайте серую галочку рядом с моим ответом зеленой, нажав на нее.
Извините, но моей репутации недостаточно, чтобы отметить ответ.
Итак, вы просматриваете каждый экземпляр искомого текста, верно? Во-первых, использование
i+1
будет мешать вам, учитывая, что вы используете это для добавления строк, но вы вводите строки по ходу дела, это будет означать, что вам нужно сбросить свой счетчик (вроде). Во-вторых, покажите нам скриншоты до и после результата. Это помогло бы мне решить вашу проблему.