Офисный скрипт: ошибка цикла (чтение 0) после первого элемента

Я хочу добавить строку после ячейки, которая соответствует моему условию по коду ниже. Однако он возвращает ошибку чтения «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
     }
  }
}

Итак, вы просматриваете каждый экземпляр искомого текста, верно? Во-первых, использование i+1 будет мешать вам, учитывая, что вы используете это для добавления строк, но вы вводите строки по ходу дела, это будет означать, что вам нужно сбросить свой счетчик (вроде). Во-вторых, покажите нам скриншоты до и после результата. Это помогло бы мне решить вашу проблему.

Skin 04.04.2023 06:32

Я добавил изображение при редактировании.

Truong quoc hiep 07.04.2023 07:31

Таким образом, изображение вверху — это то, что было до, а изображение внизу — это то, как вы хотите, чтобы результат выглядел?

Skin 07.04.2023 08:14

да. и мой код уже работает. но я не знаю, почему это не раньше.

Truong quoc hiep 07.04.2023 19:15
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
4
60
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Не зная абсолютных особенностей вашего требования, используя предоставленные вами тестовые данные, попробуйте этот скрипт.

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);
    });
}

Получается это...

...в это...

Спасибо. ваше решение выглядит очень аккуратно.

Truong quoc hiep 07.04.2023 19:16

Поэтому, если это сработало для вас, отметьте это как ответ. Сделайте серую галочку рядом с моим ответом зеленой, нажав на нее.

Skin 07.04.2023 22:34

Извините, но моей репутации недостаточно, чтобы отметить ответ.

Truong quoc hiep 08.04.2023 10:20

Другие вопросы по теме