إدارة دفاتر عمل المخططات في العروض التقديمية في .NET
نظرة عامة
هذه المقالة تشرح كيفية العمل مع دفاتر عمل المخططات في Aspose.Slides. توضح كيفية قراءة وكتابة بيانات المخطط عبر تدفقات دفتر العمل، واستخدام خلايا دفتر العمل كعناوين بيانات للمخطط، والوصول إلى مجموعات أوراق العمل، وتحديد نوع مصدر البيانات لقيم المخطط.
كما تغطي العمل مع دفاتر عمل خارجية كمصادر بيانات للمخطط. تُظهر الأمثلة كيفية إنشاء وتعيين دفتر عمل خارجي، واسترداد مسار دفتر العمل الخارجي المرتبط بمخطط، وتحرير بيانات المخطط عندما يكون دفتر العمل متاحًا.
لخلايا دفتر العمل التي تمثل بيانات مفقودة، راجع Control the Display of Empty Cells لفهم الفرق بين الخلية الفارغة والصفر، ومقارنة مخطط خطي لأوضاع العرض المتاحة.
تضمين البيانات من الصفوف والأعمدة المخفية
استخدم IChart.PlotVisibleCellsOnly للتحكم فيما إذا كان المخطط يرسم البيانات من صفوف وأعمدة ورقة العمل المخفية. ضع القيمة true لت رسم الخلايا المرئية فقط، أو false لتضمين كل من الخلايا المرئية والمخفية. هذه الإعدادات تتحكم في رسم المخطط؛ فهي لا تخفي أو تظهر صفوف أو أعمدة ورقة العمل.
تحتوي sample presentation على مخطط عمودي كأول شكل في شريحةه الأولى. ورقة العمل المضمّنة، Sheet1، تحتوي على النطاق المصدر A1:C4. الصف 3 والعمود C مخفيان، لكن خلاياهما لا تزال تحتوي على قيم.
| صف ورقة العمل | A: شهر | B: تجزئة | C: جملة (عمود مخفي) |
|---|---|---|---|
| 2 | يناير | 10 | 30 |
| 3 (صف مخفي) | فبراير | 40 | 60 |
| 4 | مارس | 20 | 50 |
الوصول إلى الخلايا المصدر عبر IChartData.ChartDataWorkbook وقراءة IChartDataCell.IsHidden لفحص حالة الإخفاء. هذه الخاصية للقراءة فقط. في هذا الملف، B2 مرئية، B3 تنتمي إلى الصف المخفي، وC2 تنتمي إلى العمود المخفي؛ المثال يطبع False، True، وTrue على التوالي.
في هذا المثال، قم بتحديث بيانات المخطط بعد تغيير إعداد الرسم: احتفظ بدفتر العمل المضمّن باستخدام ReadWorkbookStream وأعد تحميله باستخدام WriteWorkbookStream. عند تضمين كل الخلايا، استخدم أيضًا SetRange لاستعادة النطاق الكامل، بما في ذلك فئة فبراير المخفية. مجرد تغيير العلامة ليس كافيًا لتحديث بيانات المخطط المخزنة مؤقتًا وعناوين الفئات في هذا المثال.
using System;
using Aspose.Slides;
using Aspose.Slides.Charts;
using Aspose.Slides.Export;
using var presentation = new Presentation("hidden-source-data.pptx");
var slide = presentation.Slides[0];
if (slide.Shapes[0] is IChart chart)
{
var workbook = chart.ChartData.ChartDataWorkbook;
Console.WriteLine($"B2 hidden: {workbook.GetCell(0, "B2").IsHidden}");
Console.WriteLine($"B3 hidden: {workbook.GetCell(0, "B3").IsHidden}");
Console.WriteLine($"C2 hidden: {workbook.GetCell(0, "C2").IsHidden}");
using var workbookStream = chart.ChartData.ReadWorkbookStream();
foreach (var visibleOnly in new[] { true, false })
{
chart.PlotVisibleCellsOnly = visibleOnly;
// تحديث بيانات المخطط من دفتر العمل المضمّن.
workbookStream.Position = 0;
chart.ChartData.WriteWorkbookStream(workbookStream);
if (!visibleOnly)
{
// استعادة النطاق المصدر الكامل، بما في ذلك الفئات المخفية.
chart.ChartData.SetRange("Sheet1!$A$1:$C$4");
}
presentation.Save($"hidden_cells_{visibleOnly}.pptx", SaveFormat.Pptx);
}
}
else
{
Console.WriteLine("The first shape is not a chart.");
}
يحفظ المثال نسختين من العرض: واحدة تحتوي فقط على قيم التجزئة المرئية (10 و20)، والأخرى تحتوي على جميع القيم الستة. تم توليد الصور أدناه من العروض المحفوظة بعد إعادة فتحها؛ كلا الملفين يحافظان على إعداد الرسم المعيّن. يظل الصف 3 والعمود C مخفيين في كل من دفاتر العمل المضمّنة.
الخلايا الظاهرة فقط (true) |
جميع الخلايا (false) |
|---|---|
![]() |
![]() |
الخلية المخفية التي تحتوي على قيمة تختلف عن الخلية الفارغة. يتحكم IChart.DisplayBlanksAs في طريقة عرض القيم المفقودة؛ فهو لا يضمّن أو يستثني البيانات المصدر المخفية. راجع Control the Display of Empty Cells للحصول على مثال.
استرجاع نطاق بيانات المخطط
قبل تحديث بيانات دفتر العمل في عرض موجود، افحص النطاقات المصدر لتحديد أي خلايا ورقة عمل يستخدمها كل مخطط. تُعيد طريقة IChartData.GetRange النطاق الحالي للبيانات على شكل صيغة مؤهلة بورقة العمل، مثل Sheet1!$A$1:$D$5. هنا، Sheet1 هو اسم ورقة العمل، و! يفصلها عن نطاق الخلايا، و$A$1:$D$5 يحدد الخلايا من A1 إلى D5 شاملًا. علامات الدولار تشير إلى مراجع ثابتة للصف والفئة.
تقرأ الطريقة النطاق الحالي دون تغيير المخطط أو دفتر عمله. إذا لم يستخدم المخطط دفتر عمل كمصدر للبيانات، فإنها ترمي استثناء InvalidOperationException. لمزيد من المعلومات، راجع ChartData API Reference.
يفتح هذا المثال عرضًا ويتفقد الأشكال مباشرةً على كل شريحة للبحث عن المخططات. يطبع اسم كل مخطط والنطاق المصدر. إذا لم يستخدم مخطط دفتر عمل، يطبع رسالة ويستمر إلى المخطط التالي.
using System;
using Aspose.Slides;
using Aspose.Slides.Charts;
using var presentation = new Presentation("presentation.pptx");
foreach (var slide in presentation.Slides)
{
foreach (var shape in slide.Shapes)
{
if (shape is IChart chart)
{
try
{
var range = chart.ChartData.GetRange();
Console.WriteLine($"{chart.Name}: {range}");
}
catch (InvalidOperationException)
{
Console.WriteLine($"{chart.Name}: The chart does not use a workbook as its data source.");
}
}
}
}
قراءة وكتابة بيانات المخطط من دفتر عمل
توفر Aspose.Slides for .NET الطريقتين ReadWorkbookStream وWriteWorkbookStream التي تسمح بقراءة وكتابة دفاتر عمل بيانات المخطط (التي تحتوي على بيانات مخطط تم تعديلها باستخدام Aspose.Cells). ملاحظة أن بيانات المخطط يجب أن تُنظم بنفس الطريقة أو يجب أن تكون ذات بنية مشابهة للمصدر.
يستخدم هذا المثال عرضًا يحتوي على مخطط كأول شكل في شريحته الأولى. يقرأ دفتر العمل المضمّن إلى تدفق، يمسح السلاسل والفئات الحالية، ثم يكتب دفتر العمل نفسه مرة أخرى. تظل التغييرات في الذاكرة؛ لا يحفظ المثال العرض.
using System;
using Aspose.Slides;
using Aspose.Slides.Charts;
using var presentation = new Presentation("chart.pptx");
var slide = presentation.Slides[0];
var shapeCount = slide.Shapes.Count;
if (shapeCount > 0 && slide.Shapes[0] is IChart chart)
{
var chartData = chart.ChartData;
using var workbookStream = chartData.ReadWorkbookStream();
chartData.Series.Clear();
chartData.Categories.Clear();
workbookStream.Position = 0;
chartData.WriteWorkbookStream(workbookStream);
}
else
{
Console.WriteLine("The first shape is not a chart.");
}
التحقق من تخطيط المخطط بعد تعديل دفتر العمل
عند استبدال دفتر العمل المضمّن بآخر معدل، يحتفظ المخطط بسلسلاته ومجموعات فئاته الأصلية. هذا الاختلاف قد يتسبب في فشل IChart.ValidateChartLayout بسبب خطأ “index‑out‑of‑range”. امسح السلاسل والفئات الحالية قبل كتابة دفتر العمل المحدث مرة أخرى إلى المخطط. يستخدم هذا المثال مخططًا هو الشكل الأول في الشريحة الأولى. العلامة التعليق تشير إلى مكان تعديل دفتر العمل؛ المثال القابل للتنفيذ يكتب دفتر العمل الأصلي مرة أخرى ويُحقق من التخطيط في الذاكرة.
using System;
using Aspose.Slides;
using Aspose.Slides.Charts;
using var presentation = new Presentation("chart.pptx");
var slide = presentation.Slides[0];
var shapeCount = slide.Shapes.Count;
if (shapeCount > 0 && slide.Shapes[0] is IChart chart)
{
var chartData = chart.ChartData;
using var workbookStream = chartData.ReadWorkbookStream();
// قم بتعديل تدفق دفتر العمل هنا، على سبيل المثال، باستخدام Aspose.Cells.
chartData.Series.Clear();
chartData.Categories.Clear();
workbookStream.Position = 0;
chartData.WriteWorkbookStream(workbookStream);
chart.ValidateChartLayout();
}
else
{
Console.WriteLine("The first shape is not a chart.");
}
يمسح مسح المجموعات المراجع القديمة قبل كتابة دفتر العمل مرة أخرى. أعد بناء أي سلاسل أو تعيينات فئات مطلوبة لدفتر العمل المحدث قبل استخدام المخطط.
تعيين تنسيقات رقمية مخصصة لخلايا دفتر العمل
استخدم ChartDataCell.CustomNumberFormat للتحكم في طريقة ظهور القيم الرقمية في دفتر عمل المخطط المضمّن. على سبيل المثال، قد يحتاج تقرير إلى عرض معدل التحويل كنسبة مئوية بأربعة منازل عشرية ومعامل بخمسة منازل عشرية. حافظ على كلا القيمتين كرقميين لتبقى متاحة للحسابات ورسم المخطط.
تغيّر تنسيق الرقم العرض فقط، لا القيمة المخزنة. التنسيق 0.0000% يعرض 0.125 كـ 12.5000%؛ ولا يستبدل الرقم المخزن بـ 12.5. بالمثل، 0.00000 يعرض 0.1234567 كـ 0.12346 دون تقريب القيمة المخزنة. إذا كان التنسيق المخصص سلسلة فارغة ("")، يُستخدم PresetNumberFormat بدلاً منه.
ينشئ المثال التالي مخططًا عموديًا ويصل إلى خلاياه عبر ChartDataWorkbook. في ورقة العمل 0، يحتوي B2 على معدل التحويل وC2 على المعامل. كلا الخليتين توفران قيم المخطط. يفعّل المثال أيضًا عناوين القيم المرتبطة بالتنسيقات المصدر.
using Aspose.Slides;
using Aspose.Slides.Charts;
using Aspose.Slides.Export;
using var presentation = new Presentation();
presentation.SlideSize.SetSize(720, 270, SlideSizeScaleType.DoNotScale);
var slide = presentation.Slides[0];
var chart = slide.Shapes.AddChart(ChartType.ClusteredColumn, 50, 20, 620, 210);
chart.HasTitle = false;
chart.Axes.VerticalAxis.IsNumberFormatLinkedToSource = false;
chart.Axes.VerticalAxis.NumberFormat = "0.00";
chart.Axes.VerticalAxis.IsAutomaticMinValue = false;
chart.Axes.VerticalAxis.MinValue = 0;
chart.ChartData.Series.Clear();
chart.ChartData.Categories.Clear();
var workbook = chart.ChartData.ChartDataWorkbook;
workbook.Clear(0);
var categoryCell = workbook.GetCell(0, "A2", "Sample");
chart.ChartData.Categories.Add(categoryCell);
var percentageCell = workbook.GetCell(0, "B2", 0.125);
percentageCell.CustomNumberFormat = "0.0000%";
var percentageName = workbook.GetCell(0, "B1", "Conversion rate");
var percentageSeries = chart.ChartData.Series.Add(percentageName, chart.Type);
percentageSeries.DataPoints.AddDataPointForBarSeries(percentageCell);
var precisionCell = workbook.GetCell(0, "C2", 0.1234567);
precisionCell.CustomNumberFormat = "0.00000";
var precisionName = workbook.GetCell(0, "C1", "Coefficient");
var precisionSeries = chart.ChartData.Series.Add(precisionName, chart.Type);
precisionSeries.DataPoints.AddDataPointForBarSeries(precisionCell);
foreach (var series in chart.ChartData.Series)
{
var labelFormat = series.DataPoints[0].Label.DataLabelFormat;
labelFormat.ShowValue = true;
labelFormat.IsNumberFormatLinkedToSource = true;
}
presentation.Save("CustomCellFormats.pptx", SaveFormat.Pptx);
تنسيقات خلايا دفتر العمل منفصلة عن التنسيقات المطبقة مباشرةً على محاور المخطط أو عناوين البيانات. في هذا المثال، كل عنوان يعرض قيمة خلية المصدر لأنه تم تمكين ShowValue، ويتبع تنسيق الرقم المصدر لأن IsNumberFormatLinkedToSource هو true. بعد الحفظ وإعادة فتح العرض، تعرض العناوين 12.5000% و0.12346، كما هو موضح أدناه. يستخدم المحور الرأسي تنسيق NumberFormat الخاص به 0.00، مع IsNumberFormatLinkedToSource مضبوطة على false.
لتنسيق عنوان بيانات بشكل مستقل، ضع علم الارتباط بالمصدر إلى false وعين NumberFormat. هذا لا يغيّر تنسيق خلية دفتر العمل. على سبيل المثال، تنسيق مستقل للعنوان بـ 0.00 يعرض القيمة الأولى كـ 0.13، بينما يظل B2 يعرض 12.5000%. راجع Chart Data Labels لتنسيق العناوين مباشرةً.
الصورة أدناه تم توليدها من العرض المحفوظ بعد إعادة فتحه:

تعيين خلية دفتر العمل كعلامة بيانات للمخطط
يمكنك استخدام النص من خلايا دفتر العمل كعناوين بيانات للمخطط.
يضيف هذا المثال مخطط فقاعة ببيانات افتراضية إلى الشريحة الأولى من عرض موجود. يستخدم الخلايا A10:A12 في ورقة العمل 0 للعلامات الثلاث الأولى في السلسلة الأولى، يفعّل العناوين من الخلايا، ويحفظ العرض المحدث.
using Aspose.Slides;
using Aspose.Slides.Charts;
using Aspose.Slides.Export;
using var presentation = new Presentation("chart2.pptx");
var slide = presentation.Slides[0];
var chart = slide.Shapes.AddChart(ChartType.Bubble, 50, 50, 600, 400, true);
var series = chart.ChartData.Series[0];
var workbook = chart.ChartData.ChartDataWorkbook;
series.Labels.DefaultDataLabelFormat.ShowLabelValueFromCell = true;
series.Labels[0].ValueFromCell = workbook.GetCell(0, "A10", "Label 0 cell value");
series.Labels[1].ValueFromCell = workbook.GetCell(0, "A11", "Label 1 cell value");
series.Labels[2].ValueFromCell = workbook.GetCell(0, "A12", "Label 2 cell value");
presentation.Save("resultchart.pptx", SaveFormat.Pptx);
إدارة أوراق العمل
توفر الخاصية IChartDataWorkbook.Worksheets إمكانية الوصول إلى أوراق العمل في دفتر عمل المخطط. ينشئ هذا المثال مخططًا دائريًا ببيانات افتراضية ويطبع اسم كل ورقة عمل إلى وحدة التحكم.
using System;
using Aspose.Slides;
using Aspose.Slides.Charts;
using var presentation = new Presentation();
var slide = presentation.Slides[0];
var chart = slide.Shapes.AddChart(ChartType.Pie, 50, 50, 400, 500);
var workbook = chart.ChartData.ChartDataWorkbook;
for (var i = 0; i < workbook.Worksheets.Count; i++)
{
Console.WriteLine(workbook.Worksheets[i].Name);
}
تحديد نوع مصدر البيانات
يمكن أيضًا تخزين قيم نقاط السلسلة مباشرةً كقيم عددية ثابتة. راجع Set Series Values Using Numeric Literals للحصول على مثال كامل يحفظها ويقرأها. نوع مصدر قيم النقاط منفصل عن تكوين دفتر العمل الداخلي أو الخارجي للمخطط؛ استخدام القيم العددية الثابتة لا يزيل دفتر العمل المضمّن بحد ذاته.
ينشئ هذا المثال مخطط عمودي ثلاثي الأبعاد ببيانات افتراضية ويحدد اسمي سلسلتين باستخدام مصادر بيانات مختلفة. الاسم الأول يستخدم سلسلة ثابتة؛ الثاني يستخدم الخلية C1 في ورقة العمل 0. تحدد تعداد DataSourceType المصدر لكل اسم. يحفظ المثال العرض مع أسماء السلاسل المحدثة.
using Aspose.Slides;
using Aspose.Slides.Charts;
using Aspose.Slides.Export;
using var presentation = new Presentation();
var slide = presentation.Slides[0];
var chart = slide.Shapes.AddChart(ChartType.Column3D, 50, 50, 600, 400, true);
var literalName = chart.ChartData.Series[0].Name;
literalName.DataSourceType = DataSourceType.StringLiterals;
literalName.Data = "LiteralString";
var cellName = chart.ChartData.Series[1].Name;
var nameCell = chart.ChartData.ChartDataWorkbook.GetCell(0, "C1", "NewCell");
cellName.DataSourceType = DataSourceType.Worksheet;
cellName.Data = nameCell;
presentation.Save("pres.pptx", SaveFormat.Pptx);
اكتشاف تنسيقات دفتر العمل المضمّنة غير المدعومة
لا تدعم Aspose.Slides تنسيق دفتر العمل الثنائي Excel (.xlsb) الذي يمكن تضمينه في بعض المخططات. يمكنك استخدام الخاصية EmbeddedWorkbookType على IChartData مع تعداد WorkbookType لاكتشاف التنسيقات غير المدعومة وتجاوز تلك المخططات. يتفحص هذا المثال الأشكال في الشريحة الأولى من عرض موجود، يتجاوز الأشكال غير المخططات، ويطبع رسالة تشخيصية لكل مخطط يحتوي على دفتر عمل .xlsb مضمّن.
using System;
using Aspose.Slides;
using Aspose.Slides.Charts;
using var presentation = new Presentation("sample.pptx");
var slide = presentation.Slides[0];
foreach (var shape in slide.Shapes)
{
if (shape is not IChart chart)
{
continue;
}
var chartData = chart.ChartData;
var isInternalWorkbook = chartData.DataSourceType == ChartDataSourceType.InternalWorkbook;
var isBinaryMacro = chartData.EmbeddedWorkbookType == WorkbookType.WorkbookBinaryMacro;
if (isInternalWorkbook && isBinaryMacro)
{
Console.WriteLine("Skipping a chart with an unsupported .xlsb workbook.");
continue;
}
// قراءة أو تعديل بيانات دفتر عمل المخطط المدعومة هنا.
}
دفتر عمل خارجي
تدعم Aspose.Slides استخدام دفاتر عمل خارجية كمصدر بيانات للمخططات.
إنشاء دفتر عمل خارجي
استخدم ReadWorkbookStream وSetExternalWorkbook لتصدير دفتر عمل مخطط مضمّن إلى ملف وربط المخطط بذلك الدفتر الخارجي.
ينشئ هذا المثال مخططًا دائريًا ببيانات افتراضية ويصدّر دفتر عمله. يغلق تدفق الإخراج قبل تعيين دفتر العمل الخارجي كمصدر بيانات للمخطط، ثم يحفظ العرض المرتبط.
using System.IO;
using Aspose.Slides;
using Aspose.Slides.Charts;
using Aspose.Slides.Export;
using var presentation = new Presentation();
var slide = presentation.Slides[0];
var chart = slide.Shapes.AddChart(ChartType.Pie, 50, 50, 400, 600);
var workbookPath = Path.GetFullPath("externalWorkbook1.xlsx");
using (var workbookStream = chart.ChartData.ReadWorkbookStream())
using (var fileStream = File.Create(workbookPath))
{
workbookStream.CopyTo(fileStream);
}
chart.ChartData.SetExternalWorkbook(workbookPath);
presentation.Save("externalWorkbook.pptx", SaveFormat.Pptx);
تعيين دفتر عمل خارجي
باستخدام الطريقة SetExternalWorkbook، يمكنك تعيين دفتر عمل خارجي لمخطط كمصدر بيانات له. يمكن أيضًا استخدام هذه الطريقة لتحديث مسار دفتر العمل الخارجي (إذا تم نقل الأخير).
على الرغم من أنه لا يمكن تحرير البيانات في دفاتر العمل المخزنة في مواقع أو موارد عن بُعد، إلا أنه لا يزال بإمكانك استخدام هذه الدفاتر كمصدر بيانات خارجي. إذا تم توفير مسار نسبي لدفتر عمل خارجي، يتم تحويله تلقائيًا إلى مسار كامل.
يستخدم هذا المثال دفتر عمل خارجي تحتوي ورقة العمل المسماة Sheet1 على اسم سلسلة في B1، وأسماء فئات في A2:A4، وقيم عددية في B2:B4. ينشئ المثال مخططًا دائريًا، يربط دفتر العمل، ويستخدم SetRange لتعيين النطاق A1:B4 لسلسلة واحدة وثلاث فئات. يحفظ العرض مع المخطط المرتبط.
using System.IO;
using Aspose.Slides;
using Aspose.Slides.Charts;
using Aspose.Slides.Export;
using var presentation = new Presentation();
var slide = presentation.Slides[0];
var chart = slide.Shapes.AddChart(ChartType.Pie, 50, 50, 400, 600, true);
var chartData = chart.ChartData;
var workbookPath = Path.GetFullPath("externalWorkbook.xlsx");
chartData.SetExternalWorkbook(workbookPath);
chartData.SetRange("Sheet1!$A$1:$B$4");
presentation.Save("Presentation_with_externalWorkbook.pptx", SaveFormat.Pptx);
معامل updateChartData في SetExternalWorkbook يحدد ما إذا كان دفتر العمل يُحمَّل.
- عندما تكون القيمة
false، يُحدَّث مسار دفتر العمل فقط. لا تُحمَّل بيانات المخطط أو تُحدَّث من دفتر العمل المستهدف، لذلك يمكن أن يكون دفتر العمل غير متاح. - عندما تكون القيمة
true، تُحدَّث بيانات المخطط من دفتر العمل المستهدف.
يعين المثال التالي عنوان URL نائب مع updateChartData مضبوطة على false. يحتفظ بالمخطط الدائري ببياناته الافتراضية ويحفظ العرض دون تحميل دفتر العمل غير المتوفر.
using Aspose.Slides;
using Aspose.Slides.Charts;
using Aspose.Slides.Export;
using var presentation = new Presentation();
var slide = presentation.Slides[0];
var chart = slide.Shapes.AddChart(ChartType.Pie, 50, 50, 400, 600, true);
chart.ChartData.SetExternalWorkbook("https://example.com/unavailable-workbook.xlsx", false);
presentation.Save("SetExternalWorkbookWithUpdateChartData.pptx", SaveFormat.Pptx);
الحصول على مسار دفتر العمل المصدر الخارجي لمخطط
لتحديد دفتر العمل المرتبط بمخطط، تحقق مما إذا كان المخطط يستخدم مصدر بيانات خارجي واسترجع مسار دفتر العمل.
يتفحص هذا المثال الشكل الأول في الشريحة الأولى من عرض يحتوي على دفتر عمل خارجي مرتبط. إذا كان مخططًا مرتبطًا بدفتر عمل خارجي، يطبع ExternalWorkbookPath إلى وحدة التحكم. ثم يحفظ نسخة من العرض.
using System;
using Aspose.Slides;
using Aspose.Slides.Charts;
using Aspose.Slides.Export;
using var presentation = new Presentation("externalWorkbook.pptx");
var slide = presentation.Slides[0];
var shapeCount = slide.Shapes.Count;
if (shapeCount > 0 && slide.Shapes[0] is IChart chart)
{
var chartData = chart.ChartData;
if (chartData.DataSourceType == ChartDataSourceType.ExternalWorkbook)
{
Console.WriteLine(chartData.ExternalWorkbookPath);
}
else
{
Console.WriteLine("The chart does not use an external workbook.");
}
}
else
{
Console.WriteLine("The first shape is not a chart.");
}
presentation.Save("Result.pptx", SaveFormat.Pptx);
تحرير بيانات المخطط
يمكنك تحرير البيانات في دفاتر العمل الخارجية بنفس الطريقة التي تُجري بها تغييرات على محتويات دفاتر العمل الداخلية. عندما لا يمكن تحميل دفتر عمل خارجي، يتم رمي استثناء.
يستخدم هذا المثال مخططًا هو الشكل الأول في الشريحة الأولى ومربوطًا بدفتر عمل خارجي متاح. يضبط قيمة النقطة الأولى في السلسلة الأولى إلى 100 ويحفظ العرض المحدث. تعديل قيم الخلايا يمكن أن يحدث ملف XLSX الخارجي المرتبط، لذا استخدم نسخة إذا احتجت للحفاظ على دفتر العمل الأصلي.
using System;
using Aspose.Slides;
using Aspose.Slides.Charts;
using Aspose.Slides.Export;
using var presentation = new Presentation("presentation.pptx");
var slide = presentation.Slides[0];
var shapeCount = slide.Shapes.Count;
if (shapeCount > 0 && slide.Shapes[0] is IChart chart)
{
var series = chart.ChartData.Series;
if (series.Count > 0 && series[0].DataPoints.Count > 0)
{
var valueCell = series[0].DataPoints[0].Value.AsCell;
if (valueCell != null)
{
valueCell.Value = 100;
presentation.Save("presentation_out.pptx", SaveFormat.Pptx);
}
else
{
Console.WriteLine("The first data point is not linked to a workbook cell.");
}
}
else
{
Console.WriteLine("The chart has no data points to edit.");
}
}
else
{
Console.WriteLine("The first shape is not a chart.");
}
تحديث بيانات المخطط من دفاتر العمل المصدر
تضيف Aspose.Slides for .NET 26.11 الطريقة IChartData.RefreshData لمخطط واحد والطريقة IPresentation.RefreshChartsData للعرض بأكمله. استخدمهما بعد تغيير قيم دفتر العمل المصدر. يجب أن تكون دفاتر العمل الخارجية قابلة للوصول ومدعومة.
مع تثبيت Aspose.Slides for .NET 26.11 أو أحدث، يُحدِّث هذا المثال المخطط الأول في الشريحة الأولى من charts.pptx. يجب أن يكون دفتر العمل المصدر متاحًا. احفظ النتيجة للاحتفاظ ببيانات المخطط المحدثة.
using System;
using System.Linq;
using Aspose.Slides;
using Aspose.Slides.Charts;
using Aspose.Slides.Export;
using var presentation = new Presentation("charts.pptx");
var chart = presentation.Slides[0].Shapes.OfType<IChart>().FirstOrDefault();
if (chart == null)
{
Console.WriteLine("The first slide must contain a chart.");
return;
}
chart.ChartData.RefreshData();
presentation.Save("refreshed-chart.pptx", SaveFormat.Pptx);
لتحديث جميع المخططات، استخدم نسخة عرض منفصلة كما يلي. تمرير false يجعل فشل التحديث ينتقل إلى المستدعي؛ ولا يتراجع عن المخططات التي تم تحديثها بالفعل.
using Aspose.Slides;
using Aspose.Slides.Export;
using var presentation = new Presentation("charts.pptx");
presentation.RefreshChartsData(skipFailedCharts: false);
presentation.Save("refreshed-charts.pptx", SaveFormat.Pptx);
الإعداد الافتراضي هو true: RefreshChartsData يتخطى المخطط الفاشل ويستمر مع الآخرين. لا تُعيد أي نتائج لكل مخطط، لذا لا يُثبت أن كل مخطط تم تحديثه. استخدم استدعاءات RefreshData الفردية إذا كنت بحاجة لتحديد كل مخطط فاشل.
تُعيد عملية التحديث تحميل بيانات المصدر. إنها منفصلة عن حساب الصيغ، والتحقق من تخطيط المخطط، وتحديث معاينة OLE. افحص القيم الحية المدعومة بالخلايا للتحقق من التحديث في الذاكرة. لا يزال CachedValue يمكنه وصف المخطط المحفوظ سابقًا حتى تقوم بحفظ وإعادة فتح العرض.
قراءة قيم المخطط المخزنة مؤقتًا دون دفتر عمل
في .NET 26.11، تقرّأ موصِّلات القيم المخزنة المؤقتًا القيم المخزنة مع المخطط دون فتح دفتر عمله. وهي مفيدة عندما يكون الملف المرتبط غير متاح وتحتاج فقط إلى آخر بيانات مخزنة للمخطط. هذا مختلف عن إعادة بناء دفتر عمل باستخدام خيار الاستعادة أدناه.
| الكائن | موصِّل مخزن |
|---|---|
| نقطة سلسلة عادية | CachedValue |
| نقطة تبعثر أو فقاعة | CachedXValue, CachedYValue |
| نقطة فقاعة | CachedBubbleSize |
| فئة المخطط | CachedValue |
كل موصِّل يُعيد ICachedChartValue. يُظهر Data الكائن المخزن؛ يُوفر ToString نصًا؛ ويُعيد ToDouble NaN لقيمة غائبة أو غير عددية. قد يكون التخزين مفقودًا أو قديمًا، بما في ذلك مخطط جديد لم يُحفظ بعد. لا تفترض أن كل حقل موجود أو يحتوي على رقم.
يقرأ هذا المثال جميع تلك الحقول من cached-chart.pptx، عرضًا محفوظًا يحتوي على مخططات. عدم وجود دفتر عمل خارجي مقبول لأن الشيفرة لا تصل إلى ChartDataWorkbook أو خلايا دفتر العمل الحية.
using System;
using Aspose.Slides;
using Aspose.Slides.Charts;
using var presentation = new Presentation("cached-chart.pptx");
foreach (var slide in presentation.Slides)
foreach (var shape in slide.Shapes)
{
if (shape is not IChart chart)
continue;
foreach (var category in chart.ChartData.Categories)
PrintCache("Category", category.CachedValue);
foreach (var series in chart.ChartData.Series)
foreach (var point in series.DataPoints)
{
PrintCache("Value", point.CachedValue);
PrintCache("X", point.CachedXValue);
PrintCache("Y", point.CachedYValue);
PrintCache("Bubble size", point.CachedBubbleSize);
}
}
static void PrintCache(string name, ICachedChartValue value)
{
var number = value.ToDouble();
if (value.Data == null)
Console.WriteLine($"{name}: no cached value");
else if (double.IsNaN(number))
Console.WriteLine($"{name}: {value} (not numeric)");
else
Console.WriteLine($"{name}: {number}");
}
استخدم التحديث عندما تحتاج إلى بيانات مصدر حالية؛ استخدم القراءة المخزنة عندما تكون اللقطة المخزنة كافية. التخزين المؤقت ليس نسخة كاملة من دفتر العمل ولا يمكنه تزويد التغييرات التي أُجريت بعد آخر تحديث.
استعادة دفتر عمل من ذاكرة المخطط المؤقتة
إذا كان مخطط يستخدم دفتر عمل خارجي مفقود أو غير متاح، يمكن لـ Aspose.Slides إعادة بناء دفتر عمل المخطط من البيانات المخزنة في العرض. أنشئ LoadOptions، اضبط SpreadsheetOptions، وضع ISpreadsheetOptions.RecoverWorkbookFromChartCache إلى true قبل فتح العرض.
يعيد المثال التالي في C# دفتر عمل للبيانات لمخطط هو الشكل الأول في الشريحة الأولى ويشير إلى دفتر عمل خارجي غير متاح. يصل إلى البيانات المستعادة عبر IChart.ChartData وIChartData.ChartDataWorkbook:
using System;
using Aspose.Slides;
using Aspose.Slides.Charts;
var spreadsheetOptions = new SpreadsheetOptions
{
RecoverWorkbookFromChartCache = true
};
var loadOptions = new LoadOptions
{
SpreadsheetOptions = spreadsheetOptions
};
using var presentation = new Presentation("presentation.pptx", loadOptions);
var slide = presentation.Slides[0];
var shapeCount = slide.Shapes.Count;
if (shapeCount > 0 && slide.Shapes[0] is IChart chart)
{
var recoveredWorkbook = chart.ChartData.ChartDataWorkbook;
// قراءة أو تعديل بيانات دفتر العمل المستعاد هنا.
}
else
{
Console.WriteLine("The first shape is not a chart.");
}
إذا وصلت الشيفرة إلى دفتر العمل الخارجي بينما هو غير متاح وتم تعطيل الاستعادة، تُرمي Aspose.Slides استثناء InvalidOperationException. فعّل الاستعادة فقط عندما يكون الاعتماد على البيانات المخزنة للمخطط مقبولًا؛ لأن التخزين المؤقت قد لا يحتوي على تغييرات أجريت على دفتر العمل الخارجي بعد آخر تحديث للعرض.
FAQ
هل يمكنني تحديد ما إذا كان مخطط معين مرتبطًا بدفتر عمل خارجي أو مضمّن؟
نعم. يحتوي المخطط على data source type وPath to an external workbook؛ إذا كان المصدر دفتر عمل خارجي، يمكنك قراءة المسار الكامل للتأكد من استخدام ملف خارجي.
هل تدعم المسارات النسبية لدفاتر العمل الخارجية، وكيف يتم تخزينها؟
نعم. إذا حددت مسارًا نسبيًا، يتم تحويله تلقائيًا إلى مسار مطلق. يخزن العرض المسار المطلق في ملف PPTX، لذا قد يتطلب نقل دفتر العمل تحديث الرابط.
هل يمكنني استخدام دفاتر عمل موجودة على موارد/مشاركة شبكة؟
نعم، يمكن استخدام هذه الدفاتر كمصدر بيانات خارجي. ومع ذلك، لا يُدعم تحرير دفاتر العمل البعيدة مباشرةً من Aspose.Slides؛ يمكن استخدامها فقط كمصدر.
هل تقوم Aspose.Slides باستبدال ملف XLSX الخارجي عند حفظ العرض؟
يخزن العرض link to the external file. يمكن أن يؤدي تحرير بيانات المخطط المدعومة بخلية إلى تحديث ملف XLSX المحلي المرتبط. استخدم نسخة من دفتر العمل إذا كان الأصل يجب أن يظل دون تغيير.
ماذا أفعل إذا كان الملف الخارجي محميًا بكلمة مرور؟
لا تقبل Aspose.Slides كلمة مرور عند الربط. عادةً ما يتم إزالة الحماية مسبقًا أو إعداد نسخة غير مشفّرة (مثلاً باستخدام Aspose.Cells) وربطها بهذه النسخة.
هل يمكن لعدة مخططات الإشارة إلى نفس دفتر العمل الخارجي؟
نعم. كل مخطط يخزن رابطه الخاص. إذا كانت جميع الروابط تشير إلى نفس الملف، فإن تحديث ذلك الملف سينعكس على كل مخطط في المرة التالية التي تُحمَّل فيها البيانات.

