我们正在使用office.js和Excel.run功能。目标是单击工作表中的单个单元格并捕获该工作表中的所有数据。这已在运行Excel 2016和Excel API v1.3的Visual Studio 2015中成功测试。
但是,在Excel Online上运行相同的操作时,会在return ctx.sync().then(function () {
行创建一个例外。
例外:
GeneralException: An internal error has occurred.
Debug info: {"code":"GeneralException","message":"An internal error has occurred."}
所有浏览器都会出现此问题。目前使用Chrome版本63.0.3239.18(官方版本)测试版(64位)。
我们试图理解为什么它只能在Excel Online中失败,而不能在Excel 2016 for Windows中失败。
这是没有Office 2013范例的代码。不幸的是,它会导致同样的错误。我注意到堆栈跟踪提到'Promise rejected(async)'。
注意:代码未经过优化。只是修剪以显示数据访问。
// read data from the sheet
function readDataExportConfirm() {
Excel.run(function (ctx) {
// Create a proxy object for the active worksheet
var sheet = ctx.workbook.worksheets.getActiveWorksheet();
// auto select entire sheet
var range = sheet.getUsedRange();
// fill proxy objects
range.load('values');
console.log("fill proxy objects");
// sync on the request context synchronizes the state between
// proxy objects and objects in Excel doc
return ctx.sync().then(function () {
var selectedData = range.values;
console.log('data length: ' + selectedData.length + ' rows');
console.log('for row ' + 0 + ', got: ' + selectedData[0].length + ' columns');
// get rows
var rows = selectedData.length;
for (var row = 0; row < rows; row++) {
var cols = selectedData[row].length;
for (var col = 0; col < cols; col++) {
console.log(' for row ' + row + ', col ' + col
+ ' = ' +selectedData[row][col].toString());
}
}
});
})
.catch(function (error) {
// Always be sure to catch any accumulated errors that bubble up from the Excel.run execution
console.error("Error: " + error);
console.error("Error stack: " + error.stack);
if (error instanceof OfficeExtension.Error) {
console.error("Debug info: " + JSON.stringify(error.debugInfo));
}
});
}
然后使用https://dev.office.com/docs/add-ins/excel/excel-add-ins-ranges页面上的“使用Excel JavaScript API处理范围”页面中的代码 在“获取整个范围”部分中,并在堆栈跟踪中使用“Promise rejected(async)”获得相同的错误。 在Visual Studio 2015 / Excel 2016中运行良好。
非常感谢您解决此问题的帮助。
答案 0 :(得分:2)
在花了很多时间检查代码,使用Visual Studio Enterprise 2015版本14.0.25431更新3创建新的Excel加载项并在Excel中在Excel中进行测试和测试后,我找出了导致问题的原因。这是清单中的一行!
版本从清单中的1.0.0.0更改为版本1.0。改回来解决了'GeneralException'的问题。现在,加载项在Excel中在线运行。
答案 1 :(得分:1)
此代码至少存在一个问题:您正在将Office 2013范例(&#34; getSelectedDataAsync&#34;)与Office 2016+范例(&#34; Excel.run(批处理)&#34混合使用) )。如果您仅使用新的2016+范例,您的代码将更有效率。它也可能会修复你的&#34; GeneralException&#34;问题(在混合两种范式时,你有可能出现某种时间问题)。
如果仍然无法解决您的问题,请发布更新。