Obtención de precedentes de fórmulas y dependientes mediante la API de JavaScript de Excel
Las fórmulas de Excel suelen contener referencias a otras celdas de la misma hoja de cálculo o libro. Estas referencias entre celdas se conocen como "precedentes" y "dependientes". Un precedente es una celda que proporciona datos a una fórmula. Un dependiente es una celda que contiene una fórmula que hace referencia a otras celdas. Para obtener más información sobre las características de la interfaz de usuario de Excel relacionadas con precedentes y dependientes, como precedentes de seguimiento y dependientes de seguimiento, vea Mostrar las relaciones entre fórmulas y celdas.
Una celda precedente puede tener sus propias celdas precedentes. Cada celda precedente de esta cadena de precedentes sigue siendo un precedente de la celda original. Existe la misma relación para los dependientes. Cualquier celda afectada por otra celda depende de esa celda. Un "precedente directo" es el primer grupo de celdas anterior de esta secuencia, similar al concepto de elementos primarios en una relación entre elementos primarios y secundarios. Un "dependiente directo" es el primer grupo dependiente de celdas de una secuencia, similar a los elementos secundarios de una relación primario-secundario.
En este artículo se proporcionan ejemplos de código que recuperan los precedentes y los dependientes de las fórmulas mediante la API de JavaScript de Excel. Para obtener la lista completa de propiedades y métodos que admite el Range
objeto, consulte Objeto range (API de JavaScript para Excel).
Obtención de los precedentes de una fórmula
Busque las celdas anteriores de una fórmula con Range.getPrecedents.
Range.getPrecedents
devuelve un WorkbookRangeAreas
objeto . Este objeto contiene las direcciones de todos los precedentes del libro. Tiene un objeto independiente RangeAreas
para cada hoja de cálculo que contiene al menos un precedente de fórmula. Para obtener más información sobre el RangeAreas
objeto, vea Trabajar con varios rangos simultáneamente en complementos de Excel.
Para buscar solo las celdas anteriores directas de una fórmula, use Range.getDirectPrecedents.
Range.getDirectPrecedents
funciona como Range.getPrecedents
y devuelve un WorkbookRangeAreas
objeto que contiene las direcciones de precedentes directos.
En la captura de pantalla siguiente se muestra el resultado de seleccionar el botón Precedentes de seguimiento en la interfaz de usuario de Excel. Este botón dibuja una flecha de las celdas precedentes a la celda seleccionada. La celda seleccionada, E3, contiene la fórmula "=C3 * D3", por lo que tanto C3 como D3 son celdas precedentes. A diferencia del botón de interfaz de usuario de Excel, los getPrecedents
métodos y getDirectPrecedents
no dibujan flechas.
Importante
Los getPrecedents
métodos y getDirectPrecedents
no recuperan celdas precedentes entre libros.
En el ejemplo de código siguiente se muestra cómo trabajar con los Range.getPrecedents
métodos y Range.getDirectPrecedents
. El ejemplo obtiene los precedentes del rango activo y, a continuación, cambia el color de fondo de esas celdas precedentes. El color de fondo de las celdas precedentes directas se establece en amarillo y el color de fondo de las otras celdas precedentes se establece en naranja.
// This code sample shows how to find and highlight the precedents
// and direct precedents of the currently selected cell.
await Excel.run(async (context) => {
let range = context.workbook.getActiveCell();
// Precedents are all cells that provide data to the selected formula.
let precedents = range.getPrecedents();
// Direct precedents are the parent cells, or the first preceding group of cells that provide data to the selected formula.
let directPrecedents = range.getDirectPrecedents();
range.load("address");
precedents.areas.load("address");
directPrecedents.areas.load("address");
await context.sync();
console.log(`All precedent cells of ${range.address}:`);
// Use the precedents API to loop through all precedents of the active cell.
for (let i = 0; i < precedents.areas.items.length; i++) {
// Highlight and print out the address of all precedent cells.
precedents.areas.items[i].format.fill.color = "Orange";
console.log(` ${precedents.areas.items[i].address}`);
}
console.log(`Direct precedent cells of ${range.address}:`);
// Use the direct precedents API to loop through direct precedents of the active cell.
for (let i = 0; i < directPrecedents.areas.items.length; i++) {
// Highlight and print out the address of each direct precedent cell.
directPrecedents.areas.items[i].format.fill.color = "Yellow";
console.log(` ${directPrecedents.areas.items[i].address}`);
}
});
Nota:
Los Range.getPrecedents
métodos y Range.getDirectPrecedents
devuelven un ItemNotFound
error si no se encuentra ninguna celda precedente.
Obtener los dependientes de una fórmula
Busque las celdas dependientes de una fórmula con Range.getDependents. Al igual que Range.getPrecedents
, Range.getDependents
también devuelve un WorkbookRangeAreas
objeto . Este objeto contiene las direcciones de todos los dependientes del libro. Tiene un objeto independiente RangeAreas
para cada hoja de cálculo que contiene al menos una fórmula dependiente. Para obtener más información sobre cómo trabajar con el RangeAreas
objeto , vea Trabajar con varios rangos simultáneamente en complementos de Excel.
Para buscar solo las celdas dependientes directas de una fórmula, use Range.getDirectDependents.
Range.getDirectDependents
funciona como Range.getDependents
y devuelve un WorkbookRangeAreas
objeto que contiene las direcciones de los dependientes directos.
En la captura de pantalla siguiente se muestra el resultado de seleccionar el botón Dependientes de seguimiento en la interfaz de usuario de Excel. Este botón dibuja una flecha de la celda seleccionada a celdas dependientes. La celda seleccionada, D3, tiene la celda E3 como dependiente.
E3 contiene la fórmula "=C3 * D3". A diferencia del botón de interfaz de usuario de Excel, los getDependents
métodos y getDirectDependents
no dibujan flechas.
Importante
Los getDependents
métodos y getDirectDependents
no recuperan celdas dependientes entre libros.
En el ejemplo de código siguiente se muestra cómo trabajar con los Range.getDependents
métodos y Range.getDirectDependents
. El ejemplo obtiene los dependientes del rango activo y, a continuación, cambia el color de fondo de esas celdas dependientes. El color de fondo de las celdas dependientes directas se establece en amarillo y el color de fondo de las otras celdas dependientes se establece en naranja.
// This code sample shows how to find and highlight the dependents
// and direct dependents of the currently selected cell.
await Excel.run(async (context) => {
let range = context.workbook.getActiveCell();
// Dependents are all cells that contain formulas that refer to other cells.
let dependents = range.getDependents();
// Direct dependents are the child cells, or the first succeeding group of cells in a sequence of cells that refer to other cells.
let directDependents = range.getDirectDependents();
range.load("address");
dependents.areas.load("address");
directDependents.areas.load("address");
await context.sync();
console.log(`All dependent cells of ${range.address}:`);
// Use the dependents API to loop through all dependents of the active cell.
for (let i = 0; i < dependents.areas.items.length; i++) {
// Highlight and print out the addresses of all dependent cells.
dependents.areas.items[i].format.fill.color = "Orange";
console.log(` ${dependents.areas.items[i].address}`);
}
console.log(`Direct dependent cells of ${range.address}:`);
// Use the direct dependents API to loop through direct dependents of the active cell.
for (let i = 0; i < directDependents.areas.items.length; i++) {
// Highlight and print the address of each dependent cell.
directDependents.areas.items[i].format.fill.color = "Yellow";
console.log(` ${directDependents.areas.items[i].address}`);
}
});
Nota:
Los Range.getDependents
métodos y Range.getDirectDependents
devuelven un ItemNotFound
error si no se encuentra ninguna celda dependiente.