私は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()" を呼び出します。
これを処理する方法を教えてください。また、私のアプローチは正しいですか?