Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.
تنقل الطريقة pivotTable.addFieldToArea(fieldType, fieldName) حقلًا أساسيًا من بيانات المصدر إلى إحدى مناطق الجدول المحوري الأربع. تقبل الوسيطة fieldType إحدى قيم PivotFieldType التالية.
Row — حقول موضوعة عموديًا على اليسارColumn — حقول موضوعة أفقيًا عبر الأعلىData — حقول يتم تجميع قيمهاPage — حقول تُستخدم كمرشحات للتقرير
ترتيب تداخل الحقول مهم. فعند إضافة Category إلى منطقة الصفوف أولًا ثم Item، ينتج جدول محوري يكون التجميع الخارجي فيه هو Category والتجميع الداخلي فيه هو Item. ويؤدي عكس الترتيب إلى عكس التسلسل الهرمي.تتحكم الطريقة pivotField.setSubtotals(subtotalType, shown) في صفوف المجاميع الفرعية التي تظهر لحقل الجدول المحوري. يبدّل كل استدعاء نوعًا واحدًا من المجاميع الفرعية بشكل مستقل. يؤدي تمرير shown = true إلى عرض المجموع الفرعي، بينما يؤدي shown = false إلى إخفائه. ولأن كل استدعاء يؤثر في نوع واحد فقط، فإن استدعاء الطريقة عدة مرات بقيم subtotalType المختلفة يبني مجموعة فرعية مخصصة من المجاميع الفرعية.
يحدد التعداد PivotFieldSubtotalType أنواع المجاميع الفرعية المتاحة.
Automatic — يختار Aspose.Cells التحديد الافتراضي (عادةً Sum للحقول الرقمية)None — يمنع عرض كل صفوف المجاميع الفرعيةSumCountAverageMaxMinProductStdDevStdDevpVarVarpsetSubtotals بلا تأثير ظاهر في هذه الحالة. لذلك تضع هذه المقالة حقلين في منطقة الصفوف، هما Category كحقل خارجي وItem كحقل داخلي، في كل مثال، حتى يظهر الحد الفاصل للمجاميع الفرعية بين كل مجموعة Category.
إذا لم تستدعِ setSubtotals إطلاقًا، فسيطبق Aspose.Cells تحديد Automatic على الحقول الرقمية. ويؤكد المثال التالي هذا السلوك صراحةً من خلال استدعاء setSubtotals(PivotFieldSubtotalType.Automatic, true) على حقل الصف الخارجي Category.
<!DOCTYPE html>
<html>
<head>
<title>Aspose.Cells Example</title>
</head>
<body>
<h1>Aspose.Cells Example</h1>
<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 } = AsposeCells;
const readyPromise = 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 workbook = new Workbook();
const worksheet = workbook.worksheets.get(0);
worksheet.name = "Data";
const cells = worksheet.cells;
cells.get(0, 0).value = "Category";
cells.get(0, 1).value = "Item";
cells.get(0, 2).value = "Year";
cells.get(0, 3).value = "Amount";
cells.get(1, 0).value = "Fruit";
cells.get(1, 1).value = "Apple";
cells.get(1, 2).value = 2020;
cells.get(1, 3).value = 100;
cells.get(2, 0).value = "Fruit";
cells.get(2, 1).value = "Apple";
cells.get(2, 2).value = 2021;
cells.get(2, 3).value = 150;
cells.get(3, 0).value = "Fruit";
cells.get(3, 1).value = "Banana";
cells.get(3, 2).value = 2020;
cells.get(3, 3).value = 80;
cells.get(4, 0).value = "Fruit";
cells.get(4, 1).value = "Banana";
cells.get(4, 2).value = 2021;
cells.get(4, 3).value = 90;
cells.get(5, 0).value = "Vegetable";
cells.get(5, 1).value = "Carrot";
cells.get(5, 2).value = 2020;
cells.get(5, 3).value = 50;
cells.get(6, 0).value = "Vegetable";
cells.get(6, 1).value = "Carrot";
cells.get(6, 2).value = 2021;
cells.get(6, 3).value = 60;
cells.get(7, 0).value = "Vegetable";
cells.get(7, 1).value = "Daikon";
cells.get(7, 2).value = 2020;
cells.get(7, 3).value = 40;
cells.get(8, 0).value = "Vegetable";
cells.get(8, 1).value = "Daikon";
cells.get(8, 2).value = 2021;
cells.get(8, 3).value = 45;
const pivotTable = worksheet.pivotTables.add("=A1:D9", 2, 5);
pivotTable.addFieldToArea(AsposeCells.PivotFieldType.Row, "Category");
pivotTable.addFieldToArea(AsposeCells.PivotFieldType.Row, "Item");
pivotTable.addFieldToArea(AsposeCells.PivotFieldType.Column, "Year");
pivotTable.addFieldToArea(AsposeCells.PivotFieldType.Data, "Amount");
const categoryField = pivotTable.rowFields.get(0);
categoryField.setSubtotals(AsposeCells.PivotFieldSubtotalType.Automatic, true);
pivotTable.calculateData();
const outputData = workbook.save(AsposeCells.SaveFormat.Xlsx);
const blob = new Blob([outputData]);
const downloadLink = document.getElementById('downloadLink');
downloadLink.href = URL.createObjectURL(blob);
downloadLink.download = "output_automatic.xlsx";
downloadLink.style.display = "block";
document.getElementById('result').innerHTML = '<p style="color: green;">Done! Click the download link to get the result file.</p>';
});
</script>
</html>
يزيل استدعاء setSubtotals(PivotFieldSubtotalType.None, true) جميع صفوف المجاميع الفرعية من الجدول المحوري، تاركًا صفوف الحقول فقط والإجمالي الكلي في الأسفل. وهذا مفيد عند الرغبة في عرض البيانات المجمَّعة الخام دون أي صفوف ملخص.
<!DOCTYPE html>
<html>
<head>
<title>Aspose.Cells Example</title>
</head>
<body>
<h1>Aspose.Cells Example</h1>
<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 } = 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 workbook = new Workbook();
const worksheet = workbook.worksheets.get(0);
worksheet.name = "Data";
const headers = ["Category", "Item", "Year", "Amount"];
for (let j = 0; j < headers.length; j++) {
worksheet.cells.get(0, j).value = headers[j];
}
const data = [
["Fruit", "Apple", 2020, 100],
["Fruit", "Apple", 2021, 150],
["Fruit", "Banana", 2020, 80],
["Fruit", "Banana", 2021, 90],
["Vegetable", "Carrot", 2020, 50],
["Vegetable", "Carrot", 2021, 60],
["Vegetable", "Daikon", 2020, 40],
["Vegetable", "Daikon", 2021, 45]
];
for (let i = 0; i < data.length; i++) {
for (let j = 0; j < data[i].length; j++) {
worksheet.cells.get(i + 1, j).value = data[i][j];
}
}
const pivotTable = worksheet.pivotTables.add("=A1:D9", 2, 5);
pivotTable.addFieldToArea(AsposeCells.PivotFieldType.Row, "Category");
pivotTable.addFieldToArea(AsposeCells.PivotFieldType.Row, "Item");
pivotTable.addFieldToArea(AsposeCells.PivotFieldType.Column, "Year");
pivotTable.addFieldToArea(AsposeCells.PivotFieldType.Data, "Amount");
const categoryField = pivotTable.rowFields.get(0);
categoryField.setSubtotals(AsposeCells.PivotFieldSubtotalType.None, true);
pivotTable.calculateData();
const outputData = workbook.save(SaveFormat.Xlsx);
const blob = new Blob([outputData]);
const downloadLink = document.getElementById('downloadLink');
downloadLink.href = URL.createObjectURL(blob);
downloadLink.download = "output_none.xlsx";
downloadLink.style.display = "block";
document.getElementById('result').innerHTML = '<p style="color: green;">Done! Click the download link to get the result file.</p>';
});
</script>
</html>
لا يتقيد الاستخدام بنوع واحد من المجاميع الفرعية. يعمل كل استدعاء لـ setSubtotals بشكل مستقل على نوع واحد. ومن ثم، فإن استدعاء الطريقة مرتين — مرة مع Sum ومرة مع Average — ينتج مجموعة فرعية مخصصة من صفين للمجاميع الفرعية لكل مجموعة Category.
<!DOCTYPE html>
<html>
<head>
<title>Aspose.Cells Example</title>
</head>
<body>
<h1>Aspose.Cells Example</h1>
<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 } = 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 workbook = new Workbook();
const worksheet = workbook.worksheets.get(0);
worksheet.name = "Data";
const cells = worksheet.cells;
cells.get("A1").value = "Category";
cells.get("B1").value = "Item";
cells.get("C1").value = "Year";
cells.get("D1").value = "Amount";
cells.get(1, 0).value = "Fruit";
cells.get(1, 1).value = "Apple";
cells.get(1, 2).value = 2020;
cells.get(1, 3).value = 100;
cells.get(2, 0).value = "Fruit";
cells.get(2, 1).value = "Apple";
cells.get(2, 2).value = 2021;
cells.get(2, 3).value = 150;
cells.get(3, 0).value = "Fruit";
cells.get(3, 1).value = "Banana";
cells.get(3, 2).value = 2020;
cells.get(3, 3).value = 80;
cells.get(4, 0).value = "Fruit";
cells.get(4, 1).value = "Banana";
cells.get(4, 2).value = 2021;
cells.get(4, 3).value = 90;
cells.get(5, 0).value = "Vegetable";
cells.get(5, 1).value = "Carrot";
cells.get(5, 2).value = 2020;
cells.get(5, 3).value = 50;
cells.get(6, 0).value = "Vegetable";
cells.get(6, 1).value = "Carrot";
cells.get(6, 2).value = 2021;
cells.get(6, 3).value = 60;
cells.get(7, 0).value = "Vegetable";
cells.get(7, 1).value = "Daikon";
cells.get(7, 2).value = 2020;
cells.get(7, 3).value = 40;
cells.get(8, 0).value = "Vegetable";
cells.get(8, 1).value = "Daikon";
cells.get(8, 2).value = 2021;
cells.get(8, 3).value = 45;
const pivotTables = worksheet.pivotTables;
const pivotTable = pivotTables.add("=A1:D9", 2, 5);
pivotTable.addFieldToArea(AsposeCells.PivotFieldType.Row, "Category");
pivotTable.addFieldToArea(AsposeCells.PivotFieldType.Row, "Item");
pivotTable.addFieldToArea(AsposeCells.PivotFieldType.Column, "Year");
pivotTable.addFieldToArea(AsposeCells.PivotFieldType.Data, "Amount");
const categoryField = pivotTable.rowFields.get(0);
categoryField.setSubtotals(AsposeCells.PivotFieldSubtotalType.Sum, true);
categoryField.setSubtotals(AsposeCells.PivotFieldSubtotalType.Average, true);
pivotTable.calculateData();
const outputData = workbook.save(SaveFormat.Xlsx);
const blob = new Blob([outputData]);
const downloadLink = document.getElementById('downloadLink');
downloadLink.href = URL.createObjectURL(blob);
downloadLink.download = "output_custom.xlsx";
downloadLink.style.display = "block";
document.getElementById('result').innerHTML = '<p style="color: green;">Done! Click the download link to get the result file.</p>';
});
</script>
</html>
تختلف السيناريوهات الثلاثة في شيء واحد فقط: استدعاءات setSubtotals. وكل ما عدا ذلك — مجموعة البيانات والحقول والمناطق التي تُسنَد إليها — متطابق، وهو ما يجعل التخطيطات قابلة للمقارنة مباشرة.
pivotTable.addFieldToArea(PivotFieldType.Row, fieldName) عمودًا من بيانات المصدر إلى إحدى المناطق. وداخل المنطقة الواحدة، يمثل ترتيب الاستدعاءات ترتيب العرض، لذا تكون نتيجة الاستدعاء الأول هي المجموعة الخارجية. تحتاج المجاميع الفرعية إلى حقلين أو أكثر ضمن المنطقة نفسها: فمع حقل واحد لا يوجد شيء بين المجموعات يمكن تلخيصه.setSubtotals يترك الخيار إلى Excel، الذي يطبق مجموعه الفرعي الافتراضي على الحقول الرقمية. ويؤدي استدعاء setSubtotals مع PivotFieldSubtotalType.Automatic إلى تسجيل هذا الاختيار صراحةً بدلًا من تركه ضمنيًا.setSubtotals مع PivotFieldSubtotalType.None إلى تعطيل المجموع الفرعي الافتراضي، فيحتفظ الجدول المحوري بصفوف الحقول والإجمالي الكلي، لكنه يحذف صفوف المجاميع الفرعية التي كان Excel سيدرجها بينهما.PivotFieldSubtotalType.Sum ومرة أخرى مع PivotFieldSubtotalType.Average، يبقى كلا النوعين مفعّلًا، ويعرض الجدول المحوري مجموعًا فرعيًا من نوع Sum، ومتوسطًا فرعيًا من نوع Average، وإجماليًا كليًا.setSubtotals على حقل مأخوذ من pivotTable.getColumnFields() التخطيطات الثلاثة ذاتها على محور الأعمدة، لأن هذا الإعداد يخص حقل الجدول المحوري، لا المحور الذي وُضع فيه.
Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.