Specifying the Absolute Position of the Pivot Item
Contents
[
Hide
]
Sometimes, the user needs to specify the absolute position of the pivot items; Aspose.Cells for JavaScript via C++ API has exposed a few new properties and a method to achieve this requirement.
- Added PivotItem.position property that can be used to specify the position index among all the PivotItems regardless of the parent node. Added PivotItem.positionInSameParentNode property that can be used to specify the position index in the PivotItems under the same parent node.
- Added PivotItem.move method in order to move the item up or down based on the count value, where count is the number of positions to move the PivotItem. If the count value is less than zero, the item will be moved up; whereas if the count value is greater than zero, the PivotItem will move down. The Boolean‑type isSameParent parameter specifies whether the moving operation has to be performed in the same parent node or not.
- The PivotItem.move(int count) method is obsolete; therefore, it is recommended to use the newly added method PivotItem.move(number, boolean) instead.
The following sample code creates a Pivot Table and then specifies the Pivot Items' positions in the same parent node. You can download the source Excel and output Excel files for your reference. If you open the output Excel file, you will see the Pivot Item “4H12” is at the 0th position in parent “K11” and “DIF400” is at the 3rd position. Similarly, CA32 is at position 1 and AAA3 is at position 2.
<!DOCTYPE html>
<html>
<head>
<title>Aspose.Cells PivotTable Example</title>
</head>
<body>
<h1>PivotTable Example</h1>
<input type="file" id="fileInput" accept=".xls,.xlsx,.csv" />
<button id="runExample">Run Example</button>
<a id="downloadLink" style="display: none;">Download Result</a>
<div id="result"></div>
</body>
<script src="aspose.cells.js.min.js"></script>
<script type="text/javascript">
const { Workbook, SaveFormat, PivotFieldType, PivotFieldSubtotalType } = AsposeCells;
AsposeCells.onReady({
license: "/lic/aspose.cells.enc",
fontPath: "/fonts/",
fontList: [
"arial.ttf",
"NotoSansSC-Regular.ttf"
]
}).then(() => {
console.log("Aspose.Cells initialized");
});
document.getElementById('runExample').addEventListener('click', async () => {
const fileInput = document.getElementById('fileInput');
const resultDiv = document.getElementById('result');
if (!fileInput.files.length) {
resultDiv.innerHTML = '<p style="color: red;">Please select an Excel file.</p>';
return;
}
const file = fileInput.files[0];
const arrayBuffer = await file.arrayBuffer();
// Instantiating a Workbook object from uploaded file
const workbook = new Workbook(new Uint8Array(arrayBuffer));
// Add pivot worksheet and get data worksheet
const wsPivot = workbook.worksheets.add("pvtNew Hardware");
const wsData = workbook.worksheets.get("New Hardware - Yearly");
// Get the pivottables collection for the pivot sheet
const pivotTables = wsPivot.pivotTables;
// Add PivotTable to the worksheet
const index = pivotTables.add("='New Hardware - Yearly'!A1:D621", "A3", "HWCounts_PivotTable");
// Get the PivotTable object
const pvtTable = pivotTables.get(index);
// Add vendor row field
pvtTable.addFieldToArea(PivotFieldType.Row, "Vendor");
// Add item row field
pvtTable.addFieldToArea(PivotFieldType.Row, "Item");
// Add data field
pvtTable.addFieldToArea(PivotFieldType.Data, "2014");
// Turn off the subtotals for the vendor row field
const pivotField = pvtTable.rowFields.get("Vendor");
pivotField.subtotals = PivotFieldSubtotalType.None;
// Turn off grand total
pvtTable.columnGrand = false;
/*
* Please call the PivotTable.refreshData() and PivotTable.calculateData()
* before using PivotItem.position,
* PivotItem.positionInSameParentNode and PivotItem.move methods.
*/
pvtTable.refreshData();
pvtTable.calculateData();
pvtTable.rowFields.get("Item").pivotItems.get("4H12").positionInSameParentNode = 0;
pvtTable.rowFields.get("Item").pivotItems.get("DIF400").positionInSameParentNode = 3;
/*
* As a result of using PivotItem.positionInSameParentNode,
* the original sort sequence will change.
* So when you use PivotItem.positionInSameParentNode in another parent node,
* you need to call the method named `calculateData` again.
*/
pvtTable.calculateData();
pvtTable.rowFields.get("Item").pivotItems.get("CA32").positionInSameParentNode = 1;
pvtTable.rowFields.get("Item").pivotItems.get("AAA3").positionInSameParentNode = 2;
// Saving the modified Excel file and providing a download link
const outputData = workbook.save(SaveFormat.Xlsx);
const blob = new Blob([outputData]);
const downloadLink = document.getElementById('downloadLink');
downloadLink.href = URL.createObjectURL(blob);
downloadLink.download = 'output_out.xlsx';
downloadLink.style.display = 'block';
downloadLink.textContent = 'Download Modified Excel File';
resultDiv.innerHTML = '<p style="color: green;">PivotTable created successfully! Click the download link to get the modified file.</p>';
});
</script>
</html>
Please note, it is necessary to call the PivotTable.RefreshData and PivotTable.CalculateData methods before using PivotItem.position, PivotItem.positionInSameParentNode properties and PivotItem.move method.