Я работаю в Excel 365 онлайн. Я пытаюсь продублировать определенное количество раз лист шаблона, который затем мне нужно переименовать по значению ячейки.
Я попробовал и протестировал несколько кодов, но в настоящее время он возвращает ошибку в цикле, и у меня возникла проблема с переименованием созданной копии (что, я думаю, связано с тем, что я не активирую нужную вкладку). У меня возникли проблемы с поиском документации по сценариям Excel, поэтому я немного запутался.
Небольшая помощь будет оценена по достоинству!
function main(workbook: ExcelScript.Workbook) {
let modele = workbook.getWorksheet("Semaine 36");
for (i = 1 to 5 );
// Duplicate worksheet
let modele_copie = modele.copy(ExcelScript.WorksheetPositionType.after, modele);
let sheet = workbook.getActiveWorksheet();
const cellule = sheet.getRange('A3');
const valeur = cellule.getValue();
sheet.setName(valeur)
next i;
}
Ваш цикл for next не соответствует правилам синтаксиса JavaScript. Этот сценарий работает без ошибок, но в сценарии есть логическая ошибка, поскольку ячейка, которую он читает для получения имени новой вкладки, никогда не меняется, поэтому сценарий пытается использовать одно и то же имя для 5 вкладок снова и снова. Поскольку вы не предоставили информацию об этой логике, я оставлю это на ваше усмотрение.
function main(workbook: ExcelScript.Workbook) {
let modele = workbook.getWorksheet("Semaine 36");
for (let i = 1; i<5; i++){
// Duplicate worksheet
let modele_copie = modele.copy(ExcelScript.WorksheetPositionType.after, modele);
let sheet = workbook.getActiveWorksheet();
const cellule = sheet.getRange('A3');
const valeur = cellule.getValue().toString();
Sheet.setName (valeur)
}
}
Office Scripts
. Чтобы создать это, я потратил часы на просмотр десятков постов (не жалуясь, просто подчеркивая, какой я нуб).Короткий
function main(wb: ExcelScript.Workbook) {
// Return the values of the lookup range in an array.
let lArr = wb.getWorksheet("Sheet1").getRange("A3:A7").getValues();
// Referemce the template.
let tws = wb.getWorksheet("Semaine 36");
// Use each value in the array to rename a copy of the template
// created after the last worksheet.
for (let i = 0; i < lArr.length; i++) {
tws.copy(ExcelScript.WorksheetPositionType //
.after, wb.getLastWorksheet()).setName(lArr[i].toString());
};
}
Образовательный
function main(wb: ExcelScript.Workbook) {
// Define constants.
const LOOKUP_SHEET_NAME: string = "Sheet1";
const LOOKUP_RANGE_ADDRESS: string = "A3:A7";
const TEMPLATE_SHEET_NAME: string = "Semaine 36";
// Return the values of the lookup range in an array.
let lws = wb.getWorksheet(LOOKUP_SHEET_NAME);
let lrg = lws.getRange(LOOKUP_RANGE_ADDRESS);
let lData = lrg.getValues();
// Referemce the template.
let tws = wb.getWorksheet(TEMPLATE_SHEET_NAME);
// Use each value in the array as a name for a copy
// of the template created after the last worksheet.
for (let i = 0; i < lData.length; i++) {
let nws = tws.copy(ExcelScript.WorksheetPositionType //
.after, wb.getLastWorksheet());
let nwsName: string = lData[i].toString();
nws.setName(nwsName);
};
}
Рассмотрите возможность включения обработки исключений в код, например: если книга содержит лист с тем же именем (скрипт ниже удалит существующие листы с тем же именем), и если список имен листов содержит пустые ячейки (пропустите эти ячейки) и т. д.
Скрипт динамически находит список имен рабочих листов на Листе1.
function main(workbook: ExcelScript.Workbook) {
const startRow = 3; // row# of the first sht name
const semSht = workbook.getWorksheet("Semaine 36"); // get worksheet object
const wsSht1 = workbook.getWorksheet("Sheet1")
// get row# of the last name on Sheet1, index is zero-base
const lastRow = wsSht1.getRange("A:A").getLastCell().getRangeEdge(ExcelScript.KeyboardDirection.up).getRowIndex() + 1;
if (lastRow >= startRow) {
// get all sht names
const shtNames = wsSht1.getRange(`A${startRow}:A${lastRow}`).getTexts();
// loop through each name
shtNames.forEach(sName => {
let shtName = sName[0]; // get the sht name
if (shtName) {
// try to get the sht object
let newSht = workbook.getWorksheet(shtName);
if (newSht) { // remove sht if exists
newSht.delete();
}
// copy and rename template sht
semSht.copy(ExcelScript.WorksheetPositionType.after, workbook.getLastWorksheet()).setName(shtName);
}
}
)
}
}