0

オフィス用のシンプルなコンテンツ アプリを開発しようとしています。

いくつかの範囲を設定し、後でそれを読みたいと思います。ユーザーはいくつかのボックスに入力する必要があり、いくつかのボタンをクリックした後、データを分析する必要があります。VBA や VSTO では非常に簡単ですが、オフィス用のアプリとして実行する必要があります。このオフィス JavaScript API は、私にとって非常に不自然です。

いくつかの短いシナリオ:

  1. ユーザーがExcelでいくつかの範囲を選択し、いくつかのボタンをクリックすると、選択した範囲がいくつかのパブリック変数に設定されます
  2. ユーザーがボタンをクリックして関数を実行すると、いくつかの範囲からデータが読み込まれて分析されます。

誰でも助けてもらえますか?

VBA の場合:

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
4

2 に答える 2

1

最初にバインディングを作成して、後で参照できるようにする必要があります。

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
                    }
                });
        }
    });
于 2015-02-26T14:01:58.840 に答える