Проблема с коллекцией имен объекта рабочего листа

Я столкнулся с проблемой с 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). Цикл, в котором перечислены глобально определенные имена, пропускает имена, относящиеся к рабочему листу «Лист1», но если я перечисляю коллекцию имен Листа1, я получаю локально определенные имена, а также все глобальные имена. Это не правильно.


person jkpieterse    schedule 25.02.2020    source источник
comment
@Cindy: я вижу, вы отредактировали теги (спасибо). По какой причине вы удалили тег office-scripts?   -  person jkpieterse    schedule 25.02.2020
comment
Это похоже на ошибку. Я предлагаю вам поднять это как проблему в репозитории Office-js.   -  person Rick Kirkham    schedule 25.02.2020
comment
@jkpieters Вы используете этот инструмент (он находится в бета-версии)?   -  person Cindy Meister    schedule 27.02.2020
comment
ОЙ. ВОТ ЭТО ДА. Черт, то, что я пропустил, не обновляется... Рад, что ты зашел, что я неправильно отредактировал теги, и ты дал мне ссылку!   -  person Cindy Meister    schedule 27.02.2020
comment
В любое время Синди. Сожалеем, что вас не продлили!   -  person jkpieterse    schedule 27.02.2020


Ответы (1)


Спасибо за вашего пациента, кажется, вы говорили 2 вопроса:

  • Коллекция имен объекта рабочей книги включает только имена в области рабочей книги, ИСКЛЮЧАЯ все имена в области рабочего листа.
  • Коллекция имен рабочего листа включает имена, относящиеся к рабочему листу, И ВСЕ ИМЕНА УРОВНЯ РАБОЧЕЙ КНИГИ.

Для 2 # я воспроизвел эту проблему, и для отслеживания этой проблемы была создана ошибка (# 3983983). Команда расследует этот вопрос.

Для 1 # наш дизайн заключался в том, чтобы разделить рабочую книгу и рабочие листы, но мы вернемся к дизайну и скоро сообщим вам об этом.

person Raymond Lu    schedule 27.02.2020
comment
Это плохой дизайн ИМО. Каждый объект имени рабочей книги должен иметь свойство определенной области, как в приложении [Excel]. Еще одна причина, по которой я твердо уверен, что вам нужен надежный разработчик VBA в вашей команде. ;) - person Zack Barresse; 21.03.2020