Specificera den absoluta positionen för pivotposten
Ibland behöver användaren specificera den absoluta positionen för pivotposterna. Aspose.Cells API har exponerat några nya egenskaper och en metod för att uppfylla användarens krav.
- Lagt till egenskapen PivotItem.Position som kan användas för att ange positionens index för alla PivotItems oavsett föräldernod. Lagt till egenskapen PivotItem.PositionInSameParentNode som kan användas för att ange positionens index för PivotItems under samma föräldernod.
- Lagt till metoden PivotItem.Move(int count, bool isSameParent) för att flytta posten upp eller ner baserat på räkningsvärdet, där räkningsvärdet är antalet positioner att flytta PivotItem upp eller ner. Om räkningsvärdet är mindre än noll kommer posten att flyttas upp, medan om räkningsvärdet är större än noll kommer PivotItem att flyttas ner, Boolean typen isSameParent-parameter specificerar om flytoperationen måste utföras i samma föräldernod eller inte.
- Föråldrad metoden PivotItem.Move(int count) därför rekommenderas att använda den nyinsatta metoden PivotItem.Move(int count, bool isSameParent) istället.
Följande provkod skapar en pivottabell och sedan specificerar den pivotpostens positioner i samma föräldernod. Du kan ladda ner käll-Excel- och utdata-Excel-filer för din referens. Om du öppnar utdata-Excel-filen kommer du att se att pivotposten “4H12” är på 0: e position i förälder “K11” och “DIF400” är på 3: e position. På samma sätt är CA32 på position 1 och AAA3 är på 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"); |