Ошибка InvalidArgument при вызове Binding.getRange ()

1

Когда я вызываю метод getRange() для объекта Binding, я получаю следующую ошибку:

code: "InvalidArgument",
errorLocation: "Binding.getRange",
message: "The argument is invalid or missing or has an incorrect format."

Это кажется бессмысленным, потому что у метода нет параметров в соответствии с API, приведенным выше.

Даже новый проект с кодом примера docs для getRange() вызывает эту ошибку для меня (после того, как я добавил привязку, конечно):

Excel.run(function (ctx) { 
    var binding = ctx.workbook.bindings.getItemAt(0);
    var range = binding.getRange();
    range.load('cellCount');
    return ctx.sync().then(function() {
        console.log(range.cellCount);
    });
}).catch(function(error) {
        console.log("Error: " + error);
        if (error instanceof OfficeExtension.Error) {
            console.log("Debug info: " + JSON.stringify(error.debugInfo));
        }
});

Есть ли какая-то, казалось бы, не связанная с этим проблема?

Я работаю на Windows 10 с Office Pro Plus 2016, версия 1709 (сборка 8528.2139), которая поддерживает ExcelApi 1.6.


Обновить

Я также вижу эту ошибку при попытке добавить привязку с привязками .add() или .addFromNamedItem() следующим образом:

ctx.workbook.bindings.addFromNamedItem("Name", Office.CoercionType.Text, "Name");

получая:

code: "InvalidArgument",
errorLocation: "BindingCollection.addFromNamedItem",
message: "The argument is invalid or missing or has an incorrect format."

Однако мой старый код с использованием метода addFromNamedItemAsync() успешно добавляет привязку без проблем.

Я продолжу экспериментировать, пытаясь определить, происходит ли это со всеми связанными с Binding методами в ExcelApi или с помощью любых методов, не связанных с привязкой или общего API.

  • 0
    У тебя я не смог повторить это (буквально копируй и вставляй свой код). Вы используете производственную библиотеку из CDN?
  • 0
    @MarcLaFleur Тот же результат с последними office.js из nuget, CDN и бета из CDN. Я также получаю эту ошибку от других методов (см. Обновление выше). Я прошу прощения за то, что не опубликовал полный пример проекта, но я не могу найти место для загрузки источника, который не заблокирован моей организацией.
Показать ещё 2 комментария
Теги:
excel
office-js

1 ответ

1
Лучший ответ

Вы добавляете неверную привязку. Во-первых, адрес должен содержать имя листа, так как коллекция привязок находится в рабочей книге. Таким образом, он не знает, к какому диапазону вы обращаетесь. Во-вторых, вы должны создать привязку типа Range. Наконец, использование getItemAt ограничено, поскольку позиция может изменяться в зависимости от действий удаления. getItem с ключом - лучший метод для получения объекта привязки.

...
ctx.workbook.bindings.add("Sheet1!D3", "Range", "Binding2");
await ctx.sync();
var binding = ctx.workbook.bindings.getItem("Binding2");
var range = binding.getRange();
range.load('cellCount');
return ctx.sync().then(function () {
     console.log(range.cellCount);
});
...
  • 0
    Спасибо за советы. Я пробовал это раньше, но не в надуманном примере, который я привел. Почему «Диапазон» для одной ячейки? Что бы «Текст» вообще был для?
  • 0
    Если вам нужно сохранить значение настроек, не привязанное к диапазону, вы можете использовать привязку текста. Он предоставляется в качестве моста к более старому API, в котором была эта опция. Однако для этого сценария я бы использовал свойства документа ...
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню