使用Excel Online的Excel加载项中的GeneralException

时间:2017-10-31 21:30:31

标签: excel office-js

我们正在使用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中运行良好。

非常感谢您解决此问题的帮助。

2 个答案:

答案 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;问题(在混合两种范式时,你有可能出现某种时间问题)。

如果仍然无法解决您的问题,请发布更新。