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.binding 和 BindingSelectionChangedEventArgs.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`.
});
}
单元格格式 useStandardHeight
和 useStandardWidth
问题
的 useStandardHeight 属性CellPropertiesFormat
在 Excel web 版 中无法正常工作。 由于Excel web 版 UI 中存在问题,将 属性设置为useStandardHeight
true
在此平台上不精确地计算高度。 例如,在Excel web 版中,标准高度 14 修改为 14.25。
在所有平台上, 的 useStandardHeight 和 useStandardWidth 属性 CellPropertiesFormat
仅用于设置为 true
。 将这些属性设置为 false
不起作用。
Excel for Mac上不支持的范围getImage
方法
Excel for Mac目前不支持 Range getImage 方法。 有关当前状态,请参阅 OfficeDev/office-js 问题 #235 。
范围返回字符限制
Worksheet.getRange (address) 和 Worksheet.getRanges (address) 方法的地址字符串限制为 8192 个字符。 超过此限制时,地址字符串将被截断为 8192 个字符。