Solución de problemas de complementos de Excel

En este artículo se describe la solución de problemas que son únicos para Excel. Use la herramienta de comentarios de la parte inferior de la página para sugerir otros problemas que se pueden agregar al artículo.

Limitaciones de API cuando cambia el libro activo

Los complementos para Excel están diseñados para funcionar en un solo libro a la vez. Los errores pueden surgir cuando un libro que es independiente del que ejecuta el complemento obtiene el foco. Esto solo ocurre cuando determinados métodos están en proceso de llamada cuando cambia el foco.

Este modificador de libro afecta a las siguientes API.

API de JavaScript de Excel Error generado
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

Nota:

Esto solo se aplica a varios libros de Excel abiertos en Windows o Mac.

Coautoría

Vea Coautoría en complementos de Excel para ver los patrones que se usan con eventos en un entorno de coautoría. En el artículo también se describen los posibles conflictos de combinación al usar ciertas API, como TableRowCollection.add.

Problemas conocidos

Los eventos de enlace devuelven objetos temporales Binding

Tanto BindingDataChangedEventArgs.binding comoBindingSelectionChangedEventArgs.binding devuelven un objeto temporal Binding que contiene el identificador del Binding objeto que generó el evento. Use este identificador con BindingCollection.getItem(id) para recuperar el Binding objeto que generó el evento.

En el ejemplo de código siguiente se muestra cómo usar este identificador de enlace temporal para recuperar el objeto relacionado Binding . En el ejemplo, se asigna un agente de escucha de eventos a un enlace. El agente de escucha llama al getBindingId método cuando se desencadena el onDataChanged evento. El getBindingId método usa el identificador del objeto temporal Binding para recuperar el Binding objeto que generó el evento.

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`. 
    });
}

Problemas y useStandardWidth formato useStandardHeight de celda

La propiedad useStandardHeight de CellPropertiesFormat no funciona correctamente en Excel en la Web. Debido a un problema en la interfaz de usuario de Excel en la Web, establecer la propiedad para true calcular el useStandardHeight alto de forma imprecisa en esta plataforma. Por ejemplo, un alto estándar de 14 se modifica a 14,25 en Excel en la Web.

En todas las plataformas, las propiedades useStandardHeight y useStandardWidth de CellPropertiesFormat solo están diseñadas para establecerse en true. Establecer estas propiedades false en no tiene ningún efecto.

Método range getImage no admitido en Excel para Mac

El método Range getImage no se admite actualmente en Excel para Mac. Consulte OfficeDev/office-js Issue #235 (Problema de OfficeDev/office-js n.º 235 ) para obtener el estado actual.

Límite de caracteres devueltos por intervalo

Los métodos Worksheet.getRange(address) y Worksheet.getRanges(address) tienen un límite de cadena de dirección de 8192 caracteres. Cuando se supera este límite, la cadena de dirección se trunca a 8192 caracteres.

Vea también