Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.
يعرض الجدول المحوري في Microsoft Excel منطقة حقل صفحة مخصصة تقع فوق منطقة الصفوف/الأعمدة/البيانات في الجدول. تُعرض هذه المنطقة كشريط من عناصر تحكم القائمة المنسدلة للتصفية (واحد لكل حقل صفحة)، وهي التي ينقر عليها المستخدمون لتقسيم الجدول المحوري بحسب معايير مثل السنة أو المنطقة. يقوم Aspose.Cells for Python via Java بنمذجة هذه المنطقة من خلال مجموعة pivot_table.page_fields ويعرض ثلاث خصائص تتحكم في كيفية عرض الشريط بصرياً:
pivot_table.page_field_order (قيمة من النوع Aspose.Cells.PrintOrderType) يحدد ما إذا كانت حقول الصفحة الإضافية ستوضع بجانب الحقول الموجودة أو أسفل منها.pivot_table.page_field_wrap_count يحدد عدد حقول الصفحة التي توضع في كل صف أو عمود قبل الالتفاف.pivot_table.page_fields.move(curr_index, dest_index) يعيد ترتيب حقول الصفحة دون تغيير وضع الترتيب.
تستعرض هذه المقالة ثلاثة أمثلة برمجية توضح كل عملية من هذه العمليات على مجموعة بيانات مشتركة، حتى تتمكن من مقارنة التخطيطات الناتجة جنباً إلى جنب.تحمّل جميع الأمثلة الثلاثة أدناه صفوف بيانات المبيعات الثمانية هذه في ورقة عمل باسم PivotData. تحتوي البيانات على مرشحَين محتملَين لحقل الصفحة (Year، Region)، ومرشحاً واحداً لحقل الصف (Fruit)، ومقياساً واحداً (Amount)، مما يجعل شريط حقل الصفحة جديراً بالفحص.
يتم ملء جميع الصفوف الثمانية في كل مثال برمجي، وبنفس الترتيب، لذا لا تختلف بيانات المصدر أبداً بين السيناريوهات — فقط خصائص تخطيط حقل الصفحة هي التي تتغير.
في السيناريو الأول، نُكوّن حقلَي الصفحة (Year، Region) ليظهروا جنباً إلى جنب في صف واحد في أعلى الجدول المحوري. نخصص Fruit لمحور الصفوف، ونضع Year أولاً وRegion ثانياً على محور الصفحة (يحدد ترتيب استدعاءات add_field_to_area مؤشر البداية)، ونضيف Amount (Sum) كحقل بيانات، ثم نعيّن page_field_order إلى PrintOrderType.OVER_THEN_DOWN مع page_field_wrap_count = 2. باستخدام OVER_THEN_DOWN وعدد التفاف قدره 2، يتم ترتيب حقلَي الصفحة أفقياً جنباً إلى جنب في صف واحد في أعلى الجدول المحوري، لذا يشغل الشريط صفاً واحداً بعرض اثنين.
import jpype
import asposecells
jpype.startJVM()
from asposecells.api import Workbook
from asposecells.api import Workbook, WorksheetCollection, Worksheet, Cells, PivotTableCollection, PivotTable, PivotFieldType, ConsolidationFunction, PrintOrderType
dataDir = "output"
if not os.path.exists(dataDir):
os.makedirs(dataDir, exist_ok=True)
workbook = Workbook()
worksheets = workbook.getWorksheets()
pivotDataIdx = worksheets.add("PivotData")
pivotDataSheet = worksheets.get(pivotDataIdx)
pivotDataCells = pivotDataSheet.getCells()
# Headers (row 0)
pivotDataCells.get(0, 0).putValue("Fruit")
pivotDataCells.get(0, 1).putValue("Year")
pivotDataCells.get(0, 2).putValue("Region")
pivotDataCells.get(0, 3).putValue("Amount")
# Row 1: Apple, 2022, North, 150
pivotDataCells.get(1, 0).putValue("Apple")
pivotDataCells.get(1, 1).putValue(2022)
pivotDataCells.get(1, 2).putValue("North")
pivotDataCells.get(1, 3).putValue(150)
# Row 2: Apple, 2023, North, 180
pivotDataCells.get(2, 0).putValue("Apple")
pivotDataCells.get(2, 1).putValue(2023)
pivotDataCells.get(2, 2).putValue("North")
pivotDataCells.get(2, 3).putValue(180)
# Row 3: Banana, 2022, South, 120
pivotDataCells.get(3, 0).putValue("Banana")
pivotDataCells.get(3, 1).putValue(2022)
pivotDataCells.get(3, 2).putValue("South")
pivotDataCells.get(3, 3).putValue(120)
# Row 4: Banana, 2023, South, 140
pivotDataCells.get(4, 0).putValue("Banana")
pivotDataCells.get(4, 1).putValue(2023)
pivotDataCells.get(4, 2).putValue("South")
pivotDataCells.get(4, 3).putValue(140)
# Row 5: Cherry, 2022, East, 200
pivotDataCells.get(5, 0).putValue("Cherry")
pivotDataCells.get(5, 1).putValue(2022)
pivotDataCells.get(5, 2).putValue("East")
pivotDataCells.get(5, 3).putValue(200)
# Row 6: Cherry, 2023, East, 220
pivotDataCells.get(6, 0).putValue("Cherry")
pivotDataCells.get(6, 1).putValue(2023)
pivotDataCells.get(6, 2).putValue("East")
pivotDataCells.get(6, 3).putValue(220)
# Row 7: Grape, 2022, West, 90
pivotDataCells.get(7, 0).putValue("Grape")
pivotDataCells.get(7, 1).putValue(2022)
pivotDataCells.get(7, 2).putValue("West")
pivotDataCells.get(7, 3).putValue(90)
# Row 8: Grape, 2023, West, 110
pivotDataCells.get(8, 0).putValue("Grape")
pivotDataCells.get(8, 1).putValue(2023)
pivotDataCells.get(8, 2).putValue("West")
pivotDataCells.get(8, 3).putValue(110)
# Add PivotTableReport sheet
pivotTableSheetIdx = worksheets.add("PivotTableReport")
pivotTableSheet = worksheets.get(pivotTableSheetIdx)
pivotTables = pivotTableSheet.getPivotTables()
# Create pivot table sourced from PivotData!A1:D9 placed at A1 on PivotTableReport
pivotIndex = pivotTables.add("PivotData!A1:D9", "A1", "PivotTable1")
pivotTable = pivotTables.get(pivotIndex)
# Add fields
pivotTable.addFieldToArea(PivotFieldType.ROW, 0) # Fruit
pivotTable.addFieldToArea(PivotFieldType.PAGE, 1) # Year
pivotTable.addFieldToArea(PivotFieldType.PAGE, 2) # Region
pivotTable.addFieldToArea(PivotFieldType.DATA, 3) # Amount
pivotTable.getDataFields().get(0).setFunction(ConsolidationFunction.SUM)
# Configure page field area layout: place page fields across first, wrap after every 2
pivotTable.setPageFieldOrder(PrintOrderType.OVER_THEN_DOWN)
pivotTable.setPageFieldWrapCount(2)
# Refresh and calculate
pivotTable.calculateData()
# Save
workbook.save(os.path.join(dataDir, "pageFieldLayout_overThenDown.xlsx"))
jpype.shutdownJVM()
في هذا المثال، نضع Fruit على محور الصفوف، وYear وRegion على محور الصفحة (مع Year أولاً)، وAmount (Sum) كحقل بيانات — تماماً كما في المثال 1. ثم نعيّن page_field_order إلى PrintOrderType.DOWN_THEN_OVER وpage_field_wrap_count إلى 2. باستخدام DOWN_THEN_OVER وعدد تفاف قدره 2، يتم تكديس حقلَي الصفحة عمودياً — Year في الأعلى، وRegion تحته مباشرة — مشكلَين عموداً واحداً في أعلى الجدول المحوري. وبالتالي يشغل الشريط صفَين بعرض واحد، على عكس المثال 1.
import jpype
import asposecells
jpype.startJVM()
from asposecells.api import Workbook
from asposecells.api import Workbook, PivotFieldType, PrintOrderType
workbook = Workbook()
pivotData = workbook.getWorksheets().get(0)
pivotData.setName("PivotData")
pivotReportIdx = workbook.getWorksheets().add("PivotTableReport")
pivotReport = workbook.getWorksheets().get(pivotReportIdx)
headers = ["Fruit", "Year", "Region", "Amount"]
for c in range(len(headers)):
pivotData.getCells().get(0, c).putValue(headers[c])
data = [
["Apple", 2022, "North", 150],
["Apple", 2023, "North", 180],
["Banana", 2022, "South", 120],
["Banana", 2023, "South", 140],
["Cherry", 2022, "East", 200],
["Cherry", 2023, "East", 220],
["Grape", 2022, "West", 90],
["Grape", 2023, "West", 110]
]
for r in range(len(data)):
for c in range(len(data[r])):
pivotData.getCells().get(r + 1, c).putValue(data[r][c])
idx = pivotReport.getPivotTables().add("PivotData!A1:D9", "A1", "PivotTable")
pivotTable = pivotReport.getPivotTables().get(idx)
pivotTable.addFieldToArea(PivotFieldType.ROW, 0)
pivotTable.addFieldToArea(PivotFieldType.PAGE, 1)
pivotTable.addFieldToArea(PivotFieldType.PAGE, 2)
pivotTable.addFieldToArea(PivotFieldType.DATA, 3)
pivotTable.setPageFieldOrder(PrintOrderType.DOWN_THEN_OVER)
pivotTable.setPageFieldWrapCount(2)
pivotTable.calculateData()
workbook.save("pageFieldLayout_downThenOver.xlsx")
jpype.shutdownJVM()
في السيناريو الثالث، نحتفظ بمجموعة البيانات وتخصيص الحقول هذا، ونعيّن تخطيطاً محايداً (OVER_THEN_DOWN مع عدد تفاف 2)، ثم نوضح عملية page_fields.move. ينقل استدعاء move(0, 1) حقل الصفحة عند المؤشر 0 (Year) إلى الموضع 1، وحقل الصفحة الذي كان في الموضع 1 (Region) ينتقل إلى الموضع 0. بعد هذا الاستدعاء، يصبح Region هو حقل الصفحة الأول وYear هو الثاني. يظل وضع الالتفاف والترتيب بدون تغيير، لذا يُعرض الشريط أفقياً جنباً إلى جنب — فقط ترتيب القائمتَين المنسدلتَين قد تبدّل.
import jpype
import asposecells
jpype.startJVM()
from asposecells.api import Workbook
from asposecells.api import Workbook, Worksheet, Cells, Range, SaveFormat, PivotFieldType, PrintOrderType
workbook = Workbook()
dataSheet = workbook.getWorksheets().get(0)
dataSheet.setName("PivotData")
dataSheet.getCells().get("A1").putValue("Fruit")
dataSheet.getCells().get("B1").putValue("Year")
dataSheet.getCells().get("C1").putValue("Region")
dataSheet.getCells().get("D1").putValue("Amount")
dataSheet.getCells().get("A2").putValue("Apple")
dataSheet.getCells().get("B2").putValue(2022)
dataSheet.getCells().get("C2").putValue("North")
dataSheet.getCells().get("D2").putValue(150)
dataSheet.getCells().get("A3").putValue("Apple")
dataSheet.getCells().get("B3").putValue(2023)
dataSheet.getCells().get("C3").putValue("North")
dataSheet.getCells().get("D3").putValue(180)
dataSheet.getCells().get("A4").putValue("Banana")
dataSheet.getCells().get("B4").putValue(2022)
dataSheet.getCells().get("C4").putValue("South")
dataSheet.getCells().get("D4").putValue(120)
dataSheet.getCells().get("A5").putValue("Banana")
dataSheet.getCells().get("B5").putValue(2023)
dataSheet.getCells().get("C5").putValue("South")
dataSheet.getCells().get("D5").putValue(140)
dataSheet.getCells().get("A6").putValue("Cherry")
dataSheet.getCells().get("B6").putValue(2022)
dataSheet.getCells().get("C6").putValue("East")
dataSheet.getCells().get("D6").putValue(200)
dataSheet.getCells().get("A7").putValue("Cherry")
dataSheet.getCells().get("B7").putValue(2023)
dataSheet.getCells().get("C7").putValue("East")
dataSheet.getCells().get("D7").putValue(220)
dataSheet.getCells().get("A8").putValue("Grape")
dataSheet.getCells().get("B8").putValue(2022)
dataSheet.getCells().get("C8").putValue("West")
dataSheet.getCells().get("D8").putValue(90)
dataSheet.getCells().get("A9").putValue("Grape")
dataSheet.getCells().get("B9").putValue(2023)
dataSheet.getCells().get("C9").putValue("West")
dataSheet.getCells().get("D9").putValue(110)
pivotSheetIdx = workbook.getWorksheets().add("PivotTableReport")
pivotSheet = workbook.getWorksheets().get(pivotSheetIdx)
pivotIdx = pivotSheet.getPivotTables().add("PivotData!A1:D9", "A3", "PivotTable")
pivotTable = pivotSheet.getPivotTables().get(pivotIdx)
pivotTable.addFieldToArea(PivotFieldType.ROW, 0)
pivotTable.addFieldToArea(PivotFieldType.PAGE, 1)
pivotTable.addFieldToArea(PivotFieldType.PAGE, 2)
pivotTable.addFieldToArea(PivotFieldType.DATA, 3)
pivotTable.setPageFieldOrder(PrintOrderType.OVER_THEN_DOWN)
pivotTable.setPageFieldWrapCount(2)
pivotTable.getPageFields().move(0, 1)
pivotTable.calculateData()
workbook.save("pageFieldLayout_move.xlsx")
jpype.shutdownJVM()
SUM المستخدم في هذه المقالة.refresh_data وcalculate_data، المطلوبَين بعد إعادة ترتيب حقول الصفحة.Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.