Проблема с коллекцией имен объекта рабочего листа
Я столкнулся с проблемой с OfficeScript (думаю).
Я написал такой сценарий:
async function main(context: Excel.RequestContext) {
var RowCt = 0;
var sheetName = "";
let workbook = context.workbook;
let worksheets = workbook.worksheets;
let MyNames = workbook.names;
MyNames.load("name, formula, visible");
let selectedSheet = worksheets.getItemOrNullObject("Names list");
await context.sync();
if (selectedSheet.isNullObject) {
selectedSheet = workbook.worksheets.add("Names list");
}
await context.sync();
//This seems to work but omits names scoped to the worksheet
for (let i = 0; i < MyNames.items.length; i++) {
RowCt++
selectedSheet.getCell(RowCt, 0).getResizedRange(0, 3).values = [
["Workbook", MyNames.items[i].name, "'" + MyNames.items[i].formula, "'" + MyNames.items[i].visible]
];
}
worksheets = workbook.worksheets;
worksheets.load("items/name");
await context.sync();
//This appears to work, but wrongfully includes ALL names scoped to the workbook:
for (let i in worksheets.items) {
sheetName = worksheets.items[i].name;
await context.sync();
//If I omit this sheetName test, it loops through all worksheets (expected) and lists all
//workbook-level names as many times as there are worksheets (unexpected)
if (sheetName == "Sheet1") {
var myNames = worksheets.items[i].names;
await context.sync();
myNames.load("name, formula, visible");
await context.sync();
//console.log(myNames.items[0].name);
for (let j in myNames.items) {
RowCt++;
selectedSheet.getCell(RowCt, 0).getResizedRange(0, 3).values = [
[sheetName, myNames.items[j].name, "'" + myNames.items[j].formula, "'" + myNames.items[j].visible]
];
}
}
}
}
Если я запускаю это для книги, которая имеет как имена диапазонов на уровне книги, так и имена диапазонов на уровне листа, я получаю все имена диапазонов на уровне книги дважды. Один раз для глобального списка (первый цикл по именам) и один раз для "локально определенных" имен (ищите цикл по всем вкладкам рабочего листа, где я работаю только с именами Sheet1). Цикл, в котором перечислены глобально определенные имена, опускает имена, привязанные к рабочему листу Sheet1, но если я перечисляю коллекцию имен Sheet1, я получаю локально определенные имена, а также все глобальные имена. Это не верно.
1 ответ
Спасибо за вашего пациента, кажется, вы обсудили 2 вопроса:
- Коллекция имен объекта книги включает только имена в области книги, ИСКЛЮЧАЯ все имена в области листа.
- Коллекция имен рабочего листа включает имена, привязанные к рабочему листу, И ВСЕ ИМЕНА УРОВНЯ РАБОЧЕЙ КНИГИ.
Для 2# я воспроизвел эту проблему, и была создана ошибка (#3983983) для отслеживания этой проблемы. Команда изучает этот вопрос.
Для 1# наш дизайн заключался в разделении книги и рабочих листов, но мы вернемся к дизайну и скоро сообщим вам