Excel Web Services使用Excel mashupembedded式excel中的Javascript API(在for循环中调用asynchronous函数)

下面是使用ExcelMashup [ http://www.excelmashup.com/jsapi]的embedded式excel文件。 我正在尝试使用Microsoft Javascript API(JSOM,EWA Namespce对象)来处理excel数据。

要查看excel,您可以保存以下代码并使用本地服务器启动HtML。

![在浏览器中embeddedExcel视图] [1]

我试图改变A1的值使用for循环,这将改变A18的值(A18 = A1 + A2),做到这一点有一个asynchronous函数.getRangeA1Async('A1',InputCall,null);

但问题是.getRangeA1Async不调用它的callback函数InputCall。 每次InputCall取值为i = 5;

如果任何人有任何关于这个问题或解决scheme的想法,一些帮助,将不胜感激。 提前致谢。

我是JavaScript编码新手。

<div id="myExcelDiv" style="width: 550px; height: 550px"></div> <script type="text/javascript" src="http://r.office.microsoft.com/r/rlidExcelWLJS?v=1&kip=1"></script> <script type="text/javascript"> var fileToken = "SD3D1427D14BCFA9E8!126/4401186515721365992/t=0&s=0&v=!ABnVwO79FtwFFj4"; if (window.attachEvent) { window.attachEvent("onload", loadEwaOnPageLoad); } else { window.addEventListener("DOMContentLoaded", loadEwaOnPageLoad, false); } function loadEwaOnPageLoad() { var props = { uiOptions: { showGridlines: false, showRowColumnHeaders: false, showParametersTaskPane: false }, interactivityOptions: { allowTypingAndFormulaEntry: true, allowParameterModification: true, allowSorting: false, allowFiltering: false, allowPivotTableInteractivity: false } }; Ewa.EwaControl.loadEwaAsync(fileToken, "myExcelDiv", props, null); } function getRangeA1Callback() { var i; var datawrite; var storeData; for(var i=0;i<5;i++) { ewa = Ewa.EwaControl.getInstances().getItem(0); datawrite=ewa.getActiveWorkbook().getSheets().getItemByName('Sheet1').getRangeA1Async('A1',InputCall,null); function InputCall(datawrite) { var range = datawrite.getReturnValue(); values = new Array(1); values[0] = new Array(1); alert(i); values[0][0] = i; range.setValuesAsync(values,null,null); var DataRead =ewa.getActiveWorkbook().getSheets().getItemByName('Sheet1').getRangeA1Async('A18', getRangeValues,null); function getRangeValues(DataRead) { var DataRead1 = DataRead.getReturnValue().getValuesAsync(0, StoreValues); } function StoreValues (DataRead1) { storeData = DataRead1.getReturnValue(); } } } } </script> <input type="button" id="GetRange" value="Update Charts" onclick="getRangeA1Callback()" />