2

私はAPPS for OFFICEを初めて使用します

Excelデータを検証する簡単なコードを試しています。したがって、ctx.sync() で何度もネストするのではなく、次のようなコードを記述しています。

        // **json** object used beneath is somewhat like:
        {"Field":[
            {"FieldName":"Field1", "FieldDesc":"Field 1 desc", "MappedTo":"B2", "IsMandatory":"true", "LOV":"1,2,3"}]}

       // **LOV** in above json data means:- the field data can only be among the values given.
       
        //********** MY PIECE OF CODE**************
       
        var fieldData = "";
        $.each(json, function (index, field) {
            range = ctx.workbook.worksheets.getActiveWorksheet().getRange(field.MappedTo + ":" + field.MappedTo);
            range.load('text');
            ctx.sync();
            fieldData = range.text;

            if(field.IsMandatory == true && (fieldData == "" || fieldData == null))
            {
                headerValidation = headerValidation + "Data is required for Field : " + field.FieldDesc + "\n";
            }
            else if(field.LOV != "" )
            {
                if($.inArray(fieldData, field.LOV.split(',')) == -1)
                {
                    headerValidation = headerValidation + "Data not among LOV for Field : " + field.FieldDesc + "\n";
                }
            }

            range = null;
        });

ご覧のとおり、範囲オブジェクトを何度も読み取る必要があります。そのため、毎回別のアドレスで範囲オブジェクトを使用し、最初に「load()」を呼び出し、次に「ctx.sync()」を呼び出しています。

ゆっくりとデバッグすると、問題なく動作しますが、アプリケーションを実行すると、頻繁にエラーが発生します:-

プロパティ「テキスト」は利用できません。プロパティの値を読み取る前に、それを含むオブジェクトで load メソッドを呼び出し、関連するリクエスト コンテキストで "context.sync()" を呼び出します。

これを処理する方法を教えてください。また、私のアプローチは正しいですか?

4

1 に答える 1