Especificar la posición absoluta del elemento de la tabla dinámica
A veces, el usuario necesita especificar la posición absoluta de los elementos pivote, la API Aspose.Cells for Node.js via C++ ha expuesto algunas propiedades nuevas y un método para lograr los requerimientos del usuario.
- Se agregó la propiedad PivotItem.setPosition que se puede usar para especificar el índice de posición en todos los PivotItems independientemente del nodo padre. Se agregó la propiedad PivotItem.setPositionInSameParentNode que se puede utilizar para especificar el índice de posición en los PivotItems bajo el mismo nodo padre.
- Se agregó el método PivotItem.move para mover el elemento hacia arriba o hacia abajo en función del valor del recuento, donde el recuento es el número de posiciones para mover el PivotItem hacia arriba o hacia abajo. Si el valor del recuento es menor que cero, el elemento se moverá hacia arriba, mientras que si el valor del recuento es mayor que cero, el PivotItem se moverá hacia abajo. El parámetro de tipo booleano isSameParent especifica si la operación de movimiento debe realizarse en el mismo nodo principal o no.
- Se obsoletó el método PivotItem.move(int count) por lo que se sugiere usar el método PivotItem.move(number, boolean) recién agregado en su lugar.
El siguiente código de ejemplo crea una tabla dinámica y luego especifica las posiciones de los elementos de la tabla dinámica en el mismo nodo principal. Puede descargar los archivos de Excel fuente y salida para su referencia. Si abre el archivo de Excel de salida, verá que el elemento de la tabla dinámica “4H12” está en la posición 0 en el nodo principal “K11” y “DIF400” está en la tercera posición. De manera similar, CA32 está en la posición 1 y AAA3 está en la posición 2.
//For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-.NET | |
const AsposeCells = require("aspose.cells.node"); | |
var wb = new AsposeCells.Workbook("source.xlsx"); | |
var wsPivot = wb.getWorksheets().add("pvtNew Hardware"); | |
var wsData = wb.getWorksheets().get("New Hardware - Yearly"); | |
// Get the pivottables collection for the pivot sheet | |
var pivotTables = wsPivot.getPivotTables(); | |
// Add PivotTable to the worksheet | |
var index = pivotTables.add("='New Hardware - Yearly'!A1:D621", "A3", "HWCounts_PivotTable"); | |
// Get the PivotTable object | |
var pvtTable = pivotTables.get(index); | |
// Add vendor row field | |
pvtTable.addFieldToArea(AsposeCells.PivotFieldType.Row, "Vendor"); | |
// Add item row field | |
pvtTable.addFieldToArea(AsposeCells.PivotFieldType.Row, "Item"); | |
// Add data field | |
pvtTable.addFieldToArea(AsposeCells.PivotFieldType.Data, "2014"); | |
// Turn off the subtotals for the vendor row field | |
var pivotField = pvtTable.getRowFields().get("Vendor"); | |
pivotField.setSubtotals(AsposeCells.PivotFieldSubtotalType.None, true); | |
// Turn off grand total | |
pvtTable.setColumnGrand(false); | |
/* | |
* Please call the PivotTable.refreshData() and PivotTable.calculateData() | |
* before using PivotItem.setPosition, | |
* PivotItem.setPositionInSameParentNode and PivotItem.move methods. | |
*/ | |
pvtTable.refreshData(); | |
pvtTable.calculateData(); | |
pvtTable.getRowFields().get("Item").getPivotItems().get("4H12").setPositionInSameParentNode(0); | |
pvtTable.getRowFields().get("Item").getPivotItems().get("DIF400").setPositionInSameParentNode(3); | |
/* | |
* As a result of using PivotItem.setPositionInSameParentNode, | |
* it will change the original sort sequence. | |
* So when you use PivotItem.setPositionInSameParentNode in another parent node. | |
* You need call the method named "calculateData" again. | |
*/ | |
pvtTable.calculateData(); | |
pvtTable.getRowFields().get("Item").getPivotItems().get("CA32").setPositionInSameParentNode(1); | |
pvtTable.getRowFields().get("Item").getPivotItems().get("AAA3").setPositionInSameParentNode(2); | |
// Save file | |
wb.save("output_out.xlsx"); |