Office Script для форматирования необработанных данных и экспорта в CSV

Я новичок в Office Scripts. Вот чего я пытаюсь добиться

  • Если A9 равен 1, скопируйте лист Raw_Data с F9 по J9 во временный лист с A1 по E1.
  • Если A10 равен 2, скопируйте Raw_Data E10 и I10 во временный лист F1 и G1.
  • Если A11 равен 2, скопируйте лист Raw_Data F9–J9 во временный лист A2–E2 и скопируйте Raw_Data E11 и I11 во временный лист F2 и G2.
  • Если A12 равен 2, скопируйте лист Raw_Data F9–J9 во временный лист A3–E3 и скопируйте Raw_Data E12 и I12 во временный лист F3 и G3.
  • Если A13 равен 1, скопируйте лист Raw_Data с F13 по J13 во временный лист с A4 по E4.
  • Если A14 равен 2, скопируйте Raw_Data E14 и I14 во временный лист F4 и G4.
  • Если A15 равен 2, скопируйте лист Raw_Data F15 на J15 во временный лист A5 на E5 и скопируйте Raw_Data E15 и I15 во временный лист F5 и G5.

Вот лист Raw_Data

А Б С Д Э Ф г ЧАС я Дж К л 1 РЕКТАЙП ОРДУНИК КЛИЕНТ КОРАБЛЬ ТИП ОРДДАТА ГОДЕН ПОНОМБЕР РАСПОЛОЖЕНИЕ ЗАПРОС 2 РЕКТАЙП ОРДУНИК ЛИНЕНУМ ТИП ЛИНИИ ЭЛЕМЕНТ _MISCCHARG _ПРАЙСЛИСТ _РАСПОЛОЖЕНИЕ QTYORDERED _PRIUNTPRC _ОРДУНИТ _EXTINVMIS 3 РЕКТАЙП ОРДУНИК ЛИНЕНУМ СЕРИЙНУМФ НОМЕР ДЕТАЛИ ВЗОЛНОВАННЫЙ КОЛ-ВО КОЛ-ВОMOVED 4 РЕКТАЙП ОРДУНИК ЛИНЕНУМ ЛОТНУМФ НОМЕР ДЕТАЛИ ДАТА ИСТЕЧЕНИЯ СРОКА ДЕЙСТВИЯ СТКQTY КОЛ-ВО STKQTYMOVE КОЛ-ВОMOVED 5 РЕКТАЙП ОРДУНИК ОПЛАТА ДИСКБАЗА ДИСКДАТА ДИСКПЕР ДИСКАМТ ДУЭБЕЙС СРОК ОПЛАТЫ ДУПЕР ДУЭАМТ 6 РЕКТАЙП ОРДУНИК ЕДИНСТВЕННИК НОМЕР ДЕТАЛИ КОИНТИП МОНЕТА 7 РЕКТАЙП ОРДУНИК ОПТФИЛД ЦЕНИТЬ 8 РЕКТАЙП ОРДУНИК ЛИНЕНУМ ОПТФИЛД 9 1 1 ВАФХОМ 88888 1 20240610 20240801 2462460 США 20240806 10 2 1 1 1 ANT1 2 0 11 2 1 1 1 АНТ2 4 0 12 2 1 1 1 ANT3 1 0 13 1 1 ВАФХОМ 999999 1 20240610 20240801 2462460 МОЖЕТ 20240806 14 2 1 1 1 ПИНА1 4 0

Вот выходной лист

А Б С Д Э Ф г 1 20240610 20240801 2462460 США 20240806 ANT1 2 2 20240610 20240801 2462460 США 20240807 АНТ2 4 3 20240610 20240801 2462460 США 20240808 ANT3 1 4 20240610 20240801 2462460 МОЖЕТ 20240806 ПИНА1 4

Вот что я попытался придумать, и это не так уж и много

function main(workbook: ExcelScript.Workbook) {
    let test_row = 9;
    let test_column = 1;
    let test_empty = 0;
    
    const sheet_temp = workbook.getWorksheet("Temp");
    const sheet_raw = workbook.getWorksheet("Raw_Data");
    const sheet_Upload = workbook.getWorksheet("Upload_SO_Xorosoft");

    while (test_empty == 0) {
        if (sheet_temp.getCell(test_row, test_column).getValue() == 1) {
            //this to test if A9=1
            ;
        }
        else if (sheet_temp.getCell(test_row, test_column).getValue() == 2) {
            //this to test if A9=2
            ;
        }
        else {
            //this to test if A9 is blank
            //complete do while condition
            test_empty=1;
        }
         //export to csv
    }
}

И какой у тебя вопрос? Код работает? Что происходит или не происходит?

Tim Roberts 15.06.2024 20:51

Извините, что не выразился яснее. Нет, этот код не работает. код не входит в условия if, и я пытался протестировать с помощью консоли, но не смог отобразить .getValue() в console.info

Jampong 15.06.2024 20:56
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
89
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Логику извлечения данных можно упростить следующим образом:

  • Если ячейка в столбце A равна 1, извлеките столбцы 5 (столбцы от A до E в выходной таблице).
  • Если ячейка в столбце B равна 2, извлеките столбцы 2 (столбцы F и G в выходной таблице).

  • Загрузить данные в массив dataValues
  • Заполнить выходной массив resRows
  • Записать вывод на лист
function main(workbook: ExcelScript.Workbook) {
    const startRow = 9;
    const colCnt = 10;
    const sheet_temp = workbook.getWorksheet("Temp");
    const sheet_raw = workbook.getWorksheet("Raw_Data");
    const lastRow = sheet_raw.getRange("A:A").getLastCell().getRangeEdge(ExcelScript.KeyboardDirection.up).getRowIndex();
    const dataValues = sheet_raw.getRangeByIndexes(startRow - 1, 0, lastRow - startRow + 2, colCnt).getValues();
    let resRows: [] = [];
    let dataRow: [] = [];
    for (let i = 0; i < dataValues.length; i++) {
        if (dataValues[i][0] == "1") {
            dataRow = [];
            for (let j = 5; j < dataValues[0].length; j++) {
                dataRow.push(dataValues[i][j]);
            }
        }
        else if (dataValues[i][0] == "2") {
            let newRow: [] = [...dataRow];
            newRow.push(dataValues[i][4]);
            newRow.push(dataValues[i][8]);
            // console.info(newRow)
            resRows.push(newRow)
        }
    }
    let useRange = sheet_temp.getUsedRange();
    if (useRange){ useRange.clear(ExcelScript.ClearApplyTo.all);}
    sheet_temp.getRangeByIndexes(0, 0, resRows.length, resRows[0].length).setValues(resRows);
}

Примечание:

  • OfficeScripts не может экспортировать лист в CSV, как это делает VBA. Однако вы можете сделать это с помощью Power Automate.

Сохраните все листы XLSX Excel как CSV

Это выглядит потрясающе. Мне понадобится время, чтобы переварить это. Жаль, что в офисных сценариях пока нет таких инструментов отладки, как VBA. Но спасибо. Я попробую это.

Jampong 16.06.2024 19:18

Это работает. Большое спасибо. Где я могу изучить сценарии Office, кроме Youtube и документации Microsoft? Я также хочу использовать API со сценариями Office.

Jampong 16.06.2024 19:59

Образцы довольно хорошие. Документация Microsoft: > Образцы и сценарии Office Scripts

taller 16.06.2024 23:02

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