Я совершенно новичок в Office Script (имею только старый опыт работы с Python и C++), и я пытаюсь запустить довольно «простой» Office Script в excel из Power Automate. Цель состоит в том, чтобы заполнить определенные ячейки (всегда одинаковые, их положение не должно меняться) в файле Excel. Часть Power Automate работает, проблема заключается в том, чтобы использовать информацию, отправленную в Excel, в Excel.
Сценарий берет три переменные из PowerAutomate (все три строки) и должен заполнять определенные ячейки на их основе. CMQ_Name: строка для использования как есть.
Версия: строка для использования как есть.
PT_Name: строка с именами, разделенными знаком «;». Цель состоит в том, чтобы разбить его на столько строк, сколько необходимо (я храню их в массиве) и записать каждое имя в ячейках друг над другом, всегда начиная с одной и той же позиции (ячейка A2).
Я могу использовать CMQ_Names & Version и помещать их в ячейку, в которую они должны входить, я уже заставил это работать.
Однако я не могу заставить работать последнюю часть (выделена жирным шрифтом выше, часть 2 в коде ниже).
Изучение этого было довольно разочаровывающим, поскольку некоторые элементы, кажется, иногда работают, а иногда нет. У новичка у меня, вероятно, больше проблем с синтаксисом, чем у кого-либо еще...
function main(workbook: ExcelScript.Workbook,
CMQ_Name: string,
Version: string,
PT_Name: string )
{
// create reference for each sheet in the excel document
let NAMES = workbook.getWorksheet("CMQ_NAMES");
let TERMS = workbook.getWorksheet("CMQ_TERMS");
//------Part 1: Update entries in sheet CMQ_NAMES
NAMES.getRange("A2").setValues(CMQ_Name);
NAMES.getRange("D2").setValues(Version);
//Update entries in sheet CMQ_TERMS
TERMS.getRange("A2").setValues(CMQ_Name);
//-------Part 2: work with PT_Name
//Split PT_Name
let ARRAY1: string[] = PT_Name.split(";");
let CELL: string;
let B: string = "B"
for (var i = 0; i < ARRAY1.length; i++) {
CELL = B.concat(i.toString());
NAMES.getRange(CELL).setValues(ARRAY1[i]);
}
}
У меня есть несколько проблем:
Argument of type 'string' is not assignable to parameter of type '(string | number | boolean)[ ][ ]'.
Не могли бы вы взглянуть?
Спасибо!!
Я пробовал несколько обходных путей и других синтаксисов без особого успеха. Запись первых двух строк в ячейках работает, работа с третьей строкой не работает.
Обновлено: благодаря комментарию ниже мне удалось заставить его работать:
function main(
workbook: ExcelScript.Workbook,
CMQ_Name: string,
Version: string,
PT_Name: string )
{
// create reference for each table
let NAMES = workbook.getWorksheet("CMQ_NAMES");
let TERMS = workbook.getWorksheet("CMQ_TERMS");
//------Part 0: clear previous info
TERMS.getRange("B2:B200").clear()
//------Part 1: Update entries in sheet CMQ_NAMES
NAMES.getRange("A2").setValue(CMQ_Name);
NAMES.getRange("D2").setValue(Version);
//Update entries in sheet CMQ_TERMS
TERMS.getRange("A2").setValue(CMQ_Name);
//-------Part 2: work with PT_Name
//Split PT_Name
let ARRAY1: string[] = PT_Name.split(";");
let CELL: string;
let B: string = "B"
for (var i = 2; i < ARRAY1.length + 2; i++) {
CELL = B.concat(i.toString());
//console.info(CELL); //debugging
TERMS.getRange(CELL).setValue(ARRAY1[i - 2]);
}
}
Вы используете setValues()
(множественное число), которое принимает двумерный массив значений, содержащий данные для заданных строк и столбцов.
Вместо этого вам нужно взглянуть на использование setValue()
, так как он принимает один аргумент типа any
.
Что касается использования переменной для извлечения одной ячейки (или набора ячеек, если на то пошло), вам просто нужно использовать метод getRange()
, чтобы сделать это, это базовый пример...
function main(workbook: ExcelScript.Workbook) {
let cellAddress: string = "A4";
let range: ExcelScript.Range = workbook.getWorksheet("Data").getRange(cellAddress);
console.info(range.getAddress());
}
Если вы хотите указать несколько диапазонов, просто измените cellAddress
на что-то вроде этого... A4:C10
Этот метод также принимает именованные диапазоны.
Большое вам спасибо, с вашей поправкой я смог заставить это работать.
Для секции массива цикл не нужен. Вы должны быть в состоянии написать все значения сразу, используя
setValues()
. Он ожидает массив в определенной структуре в зависимости от диапазона, в который вы пытаетесь записать. Вы можете увидеть больше здесь: stackoverflow.com/a/69573251/16864869