Spécification de la position absolue de l élément du tableau croisé dynamique
Parfois, l’utilisateur doit spécifier la position absolue des éléments du tableau croisé dynamique. L’API Aspose.Cells a exposé quelques nouvelles propriétés et une méthode pour répondre aux besoins de l’utilisateur.
- Ajouté la propriété PivotItem.Position qui peut être utilisée pour spécifier l’index de position dans tous les PivotItems indépendamment du nœud parent. Ajouté la propriété PivotItem.PositionInSameParentNode qui peut être utilisée pour spécifier l’index de position dans les PivotItems sous le même nœud parent.
- Ajout de la méthode PivotItem.Move(int count, bool isSameParent) pour déplacer l’élément vers le haut ou vers le bas en fonction de la valeur du compteur, où le compteur est le nombre de positions pour déplacer l’élément du tableau croisé dynamique vers le haut ou vers le bas. Si la valeur du compteur est inférieure à zéro, l’élément sera déplacé vers le haut, alors que si la valeur du compteur est supérieure à zéro, l’élément du tableau croisé dynamique se déplacera vers le bas. Le paramètre de type booléen isSameParent spécifie si l’opération de déplacement doit être effectuée dans le même nœud parent ou non.
- Obsolète la méthode PivotItem.Move(int count), il est donc conseillé d’utiliser la méthode nouvellement ajoutée PivotItem.Move(int count, bool isSameParent) à la place.
Le code d’exemple suivant crée un tableau croisé dynamique et spécifie ensuite les positions des éléments du tableau croisé dynamique dans le même nœud parent. Vous pouvez télécharger les fichiers Excel source et Excel de sortie pour votre référence. Si vous ouvrez le fichier Excel de sortie, vous verrez l’élément du tableau croisé dynamique “4H12” est à la 0e position dans le parent “K11” et “DIF400” est à la 3e position. De même, CA32 est à la position 1 et AAA3 est à la position 2
// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-.NET | |
// The path to the documents directory. | |
string dataDir = RunExamples.GetDataDir(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); | |
Workbook wb = new Workbook(dataDir + "source.xlsx"); | |
Worksheet wsPivot = wb.Worksheets.Add("pvtNew Hardware"); | |
Worksheet wsData = wb.Worksheets["New Hardware - Yearly"]; | |
// Get the pivottables collection for the pivot sheet | |
PivotTableCollection pivotTables = wsPivot.PivotTables; | |
// Add PivotTable to the worksheet | |
int index = pivotTables.Add("='New Hardware - Yearly'!A1:D621", "A3", "HWCounts_PivotTable"); | |
// Get the PivotTable object | |
PivotTable pvtTable = pivotTables[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 | |
PivotField pivotField = pvtTable.RowFields["Vendor"]; | |
pivotField.SetSubtotals(PivotFieldSubtotalType.None, true); | |
// Turn off grand total | |
pvtTable.ColumnGrand = false; | |
/* | |
* Please call the PivotTable.RefreshData() and PivotTable.CalculateData() | |
* before using PivotItem.Position, | |
* PivotItem.PositionInSameParentNode and PivotItem.Move(int count, bool isSameParent). | |
*/ | |
pvtTable.RefreshData(); | |
pvtTable.CalculateData(); | |
pvtTable.RowFields["Item"].PivotItems["4H12"].PositionInSameParentNode = 0; | |
pvtTable.RowFields["Item"].PivotItems["DIF400"].PositionInSameParentNode = 3; | |
/* | |
* As a result of using PivotItem.PositionInSameParentNode, | |
* it will change the original sort sequence. | |
* So when you use PivotItem.PositionInSameParentNode in another parent node. | |
* You need call the method named "CalculateData" again. | |
*/ | |
pvtTable.CalculateData(); | |
pvtTable.RowFields["Item"].PivotItems["CA32"].PositionInSameParentNode = 1; | |
pvtTable.RowFields["Item"].PivotItems["AAA3"].PositionInSameParentNode = 2; | |
// Save file | |
wb.Save(dataDir + "output_out.xlsx"); |