Excel 加载项疑难解答

本文讨论 Excel 特有的故障排除问题。 请使用页面底部的反馈工具来建议可添加到本文的其他问题。

活动工作簿切换时的 API 限制

Excel 加载项旨在一次在单个工作簿上运行。 当与运行外接程序的工作簿分开的工作簿获得焦点时,可能会出现错误。 仅当焦点更改时,特定方法处于被调用过程中时,才会发生这种情况。

以下 API 受此工作簿开关的影响。

Excel JavaScript API 引发错误
Chart.activate GeneralException
Range.select GeneralException
Table.clearFilters GeneralException
Workbook.getActiveCell InvalidSelection
Workbook.getSelectedRange InvalidSelection
Workbook.getSelectedRanges InvalidSelection
Worksheet.activate GeneralException
Worksheet.delete InvalidSelection
Worksheet.gridlines GeneralException
Worksheet.showHeadings GeneralException
WorksheetCollection.add GeneralException
WorksheetFreezePanes.freezeAt GeneralException
WorksheetFreezePanes.freezeColumns GeneralException
WorksheetFreezePanes.freezeRows GeneralException
WorksheetFreezePanes.getLocationOrNullObject GeneralException
WorksheetFreezePanes.unfreeze GeneralException

注意

这仅适用于在 Windows 或 Mac 上打开的多个 Excel 工作簿。

共同创作

有关在共同创作环境中用于事件的模式,请参阅 Excel 加载项中的合著。 本文还讨论了使用某些 API(例如 TableRowCollection.add)时的潜在合并冲突。

已知问题

绑定事件返回临时 Binding 对象

BindingDataChangedEventArgs.bindingBindingSelectionChangedEventArgs.binding 都返回一个临时Binding对象,该对象包含引发事件的对象的 IDBinding。 将此 ID 与 用于 BindingCollection.getItem(id) 检索 Binding 引发事件的 对象。

下面的代码示例演示如何使用此临时绑定 ID 检索相关 Binding 对象。 在示例中,将事件侦听器分配给绑定。 侦听器在 getBindingId 触发事件时 onDataChanged 调用 方法。 方法 getBindingId 使用临时 Binding 对象的 ID 检索 Binding 引发事件的 对象。

async function run() {
    await Excel.run(async (context) => {
        // Retrieve your binding.
        let binding = context.workbook.bindings.getItemAt(0);
    
        await context.sync();
    
        // Register an event listener to detect changes to your binding
        // and then trigger the `getBindingId` method when the data changes. 
        binding.onDataChanged.add(getBindingId);
        await context.sync();
    });
}

async function getBindingId(eventArgs) {
    await Excel.run(async (context) => {
        // Get the temporary binding object and load its ID. 
        let tempBindingObject = eventArgs.binding;
        tempBindingObject.load("id");

        // Use the temporary binding object's ID to retrieve the original binding object. 
        let originalBindingObject = context.workbook.bindings.getItem(tempBindingObject.id);

        // You now have the binding object that raised the event: `originalBindingObject`. 
    });
}

单元格格式 useStandardHeightuseStandardWidth 问题

useStandardHeight 属性CellPropertiesFormat在 Excel web 版 中无法正常工作。 由于Excel web 版 UI 中存在问题,将 属性设置为useStandardHeighttrue在此平台上不精确地计算高度。 例如,在Excel web 版中,标准高度 14 修改为 14.25

在所有平台上, 的 useStandardHeightuseStandardWidth 属性 CellPropertiesFormat 仅用于设置为 true。 将这些属性设置为 false 不起作用。

Excel for Mac上不支持的范围getImage方法

Excel for Mac目前不支持 Range getImage 方法。 有关当前状态,请参阅 OfficeDev/office-js 问题 #235

范围返回字符限制

Worksheet.getRange (address) Worksheet.getRanges (address) 方法的地址字符串限制为 8192 个字符。 超过此限制时,地址字符串将被截断为 8192 个字符。

另请参阅