контент-приложения для офиса: как установить диапазон и читать из него?

Я пытаюсь разработать простое приложение для контента для офиса.

Я хочу установить некоторые диапазоны, а затем прочитать их. Пользователь должен заполнить несколько полей, и после нажатия некоторых кнопок данные должны быть проанализированы. Это было бы очень просто в VBA или VSTO, но я должен сделать это как приложение для офиса. Этот офисный javascript API очень неестественен для меня.

Небольшой сценарий:

  1. пользователь выбирает некоторый диапазон в excel, нажимает какую-то кнопку, и выбранный диапазон устанавливается в некоторую общедоступную переменную
  2. Пользователь нажимает кнопку, функция запускается, и она загружает и анализирует данные из нескольких диапазонов.

Может ли кто-нибудь помочь?

В ВБА:

sub somesub

dim rngSomeRange as range
dim rngSomeRange2 as range
dim rngCell as range
dim colValues as new collection
dim colValues2 as new collection

set rngSomeRange =range("someRange")

for each  rngCell in rngSomeRange

msgbox rngcell.value
colValues.add rngcell.value

next rngCell

for each  rngCell in rngSomeRange2

msgbox rngcell.value
colValues2.add rngcell.value

next rngCell

procAnalyze(colValues, colValues2)

end sub

person buks    schedule 22.10.2014    source источник


Ответы (2)


Сначала вам нужно создать привязку, чтобы вы могли ссылаться на нее позже:

var range = "A5:C5";
var id = "numbers";

Office.context.document.bindings.addFromNamedItemAsync(range, "matrix", { id: id });

Затем вы можете позже ссылаться на эту привязку для установки данных:

var data = [['one', 'two', 'three']]; // 2 dimensional array (matrix)
Office.select("bindings#" + id).setDataAsync(data, { coercionType: "matrix" });

Обратите внимание, что addFromNamedItemAsync и setDataAsync являются асинхронными методами, поэтому вы должны предоставить метод обратного вызова для:

  1. проверить статус результата
  2. убедитесь, что привязка создана, прежде чем писать в нее

Это полный пример:

Office.context.document.bindings.addFromNamedItemAsync(range, "matrix", { id: id },
    function (asyncResult) {
        if (asyncResult.status == "failed") {
            // Error
        } else {
            var data = [['one', 'two', 'three']]; // 2 dimensional array (matrix)
            Office.select("bindings#" + id).setDataAsync(data, { coercionType: "matrix" },
                function (asyncResult) {
                    if (asyncResult.status == "failed") {
                        // Error
                    } else {
                        // Success: 'one' is in A5, 'two' is in B5 and 'three' is in C5
                    }
                });
        }
    });
person Alex Sanséau    schedule 26.02.2015

Сначала выберите несколько ячеек, затем нажмите кнопку, связанную с этой функцией, и она будет привязана к этим ячейкам:

function bindData() { //A3
    Office.context.document.bindings.addFromSelectionAsync("matrix", { id: 'myBindingXXX' },
        function (asyncResult) {

            //NOW DO OUTPUT OR ERROR
            if (asyncResult.status === "failed") {
                writeToPage('Error bindData: ' + asyncResult.error.message, 3);
            } else {
                writeToPage('Added binding with type: ' + asyncResult.value.type + ' and id: ' +
                    asyncResult.value.id, 1);
            }
        });
}

Теперь создайте еще одну функцию для чтения привязки, в которую при необходимости можно добавить собственный анализ.

function readBoundData() { //A4 note how id is used here in the binding
    Office.select("bindings#myBindingXXX").getDataAsync({ coercionType: "matrix" },
        function (asyncResult) {

            //NOW DO OUTPUT OR ERROR
            if (asyncResult.status === "failed") {
                writeToPage('Error readBoundData: ' + asyncResult.error.message, 3);
            } else {
                writeToPage('Selected data: ' + asyncResult.value , 1);
            }
        });
}

Обратите внимание, что после привязки ячеек вам не нужно выделять их для чтения.

Дополнительные сведения см. на странице http://microsoft-office-add-ins.com/.

person stu    schedule 20.08.2015