Сценарий Office: чтение таблицы 1, обработка и вставка в таблицу 2

Нужна помощь. У меня есть книга Excel с двумя листами: «Лист1» и «Лист2». В «Листе1» есть таблица Excel с именем «Таблица1» со столбцами «Сервер», «Работа», «Ошибка», «PrevHealth», «PrevError». В столбце «Сервер» хранятся значения имени сервера. В столбце «Здоровье» отображается текущее состояние здоровья с такими значениями, как «Критический», «Нормальный», «Предупреждение». В столбце «PrevHealth» сохраняется состояние здоровья за предыдущий день с такими значениями, как «Критический», «Нормальный», «Предупреждение». В столбце «Ошибка» хранится сегодняшнее сообщение об ошибке сервера, когда значение «Работоспособность» равно «Предупреждение» или «Критический». В столбце «PrevError» сохраняется сообщение об ошибке предыдущего дня, если значение «PrevHealth» равно «Предупреждение» или «Критический».

В «Листе2» есть пустая таблица Excel с именем «Таблица2» со столбцами «Сервер», «LastHealth», «LastError»,

Напишите сценарий Office, который поддерживает Excel Automate. Этот сценарий должен пройти через «Таблицу1» в «Лист1». Находясь в цикле, (i) если ячейка в столбце «Здоровье» имеет значение «Критический», вставьте «Сервер», «Работа», «Ошибка» текущей строки в новую строку как «Сервер», «LastHealth», «LastError» таблицы 2 на листе 2. (ii) Если ячейка в столбце «Работоспособность» не имеет значения «Критическое», но значение «PrevHealth» имеет значение «Критическое», Вставьте «Server», «PrevHealth», «PrevError» текущей строки в новую строку, например «Server», «LastHealth», «LastError» таблицы 2 на листе 2. (iii) Если оба значения «Health» и «PrevHealth» не являются «критическими», пропустите это значение. и обработать следующую строку

Я провел некоторую проверку и попробовал следующий код. Но я столкнулся с ошибкой: «Строка 25: Таблица addRow: аргумент недействителен, отсутствует или имеет неправильный формат».

function main(workbook: ExcelScript.Workbook) { 
// Get the worksheets 
const sheet1 = workbook.getWorksheet("Sheet1"); 
const sheet2 = workbook.getWorksheet("Sheet2");
// Get the tables
const table1 = sheet1.getTable("Table1");
const table2 = sheet2.getTable("Table2");

// Get the data range from Table1
const dataRange = table1.getRangeBetweenHeaderAndTotal();

// Loop through each row in Table1
for (const row of dataRange.getValues()) {
    const server = row[0]; // Server column
    const health = row[1]; // Health column
    const error = row[2]; // Error column
    const prevHealth = row[3]; // PrevHealth column
    const prevError = row[4]; // PrevError column

    // Check conditions
    if (health === "Critical") {
        // Insert a new row in Table2 with Server, Health, Error
        table2.addRow([server, health, error]);
    } else if (prevHealth === "Critical") {
        // Insert a new row in Table2 with Server, PrevHealth, PrevError
        table2.addRow([server, prevHealth, prevError]);
    }
    // Otherwise, skip the row
}

Пожалуйста, создайте таблицу MD с помощью онлайн-инструмента Генератор таблиц . Как создать минимальный воспроизводимый пример

taller 03.04.2024 17:22
Поведение ключевого слова "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
1
125
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
  • Соберите все данные и сразу вставьте в таблицу.
function main(workbook: ExcelScript.Workbook) {
    // Get the worksheets 
    const sheet1 = workbook.getWorksheet("Sheet1");
    const sheet2 = workbook.getWorksheet("Sheet2");
    // Get the tables
    const table1 = sheet1.getTable("Table1");
    const table2 = sheet2.getTable("Table2");
    // Get the data range from Table1
    const dataRange = table1.getRangeBetweenHeaderAndTotal();
    let dataVals:(string|number|boolean)[][] = [];
    // Loop through each row in Table1
    for (const row of dataRange.getValues()) {
        const server = row[0]; // Server column
        const health = row[1]; // Health column
        const error = row[2]; // Error column
        const prevHealth = row[3]; // PrevHealth column
        const prevError = row[4]; // PrevError column
        // Check conditions
        if (health === "Critical") {
            // Insert a new row in Table2 with Server, Health, Error
            dataVals.push([server, health, error]);
        } else if (prevHealth === "Critical") {
            // Insert a new row in Table2 with Server, PrevHealth, PrevError
            dataVals.push([server, prevHealth, prevError]);
        }
        // Otherwise, skip the row
    }
    if (dataVals){
        if (table2){
            table2.addRows(-1,dataVals);
            }
    }
}

Привет, Таллер! Большое спасибо за ваш быстрый ответ еще раз. Кстати, при использовании цикла «for (const row of dataRange.getValues()) ...» можно ли также получить номер строки? Потому что в ячейках столбцов «Здоровье» и «Предыдущее здоровье» Таблицы 1 могут быть комментарии (добавленные с помощью опции Excel «Новый комментарий»). Я хочу получить «Имя автора» и «Содержимое комментария» и также вставить их в таблицу Table2. Это означает, что в таблице Table2 теперь будет еще два столбца, а именно «LastAuthorName» и «LastComment», для получения дополнительной информации. Еще раз спасибо.

thum kl 04.04.2024 04:36

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