مدیریت کتابکارهای نمودار در ارائهها با استفاده از PHP
نمای کلی
این مقاله توضیح میدهد چگونه با کتابکارهای نمودار در Aspose.Slides کار کنید. نشان میدهد چگونه دادههای نمودار را از طریق جریانهای کتابکار بخوانید و بنویسید، از سلولهای کتابکار به عنوان برچسبهای داده نمودار استفاده کنید، به مجموعههای برگههای کاری دسترسی پیدا کنید و نوع منبع داده برای مقادیر نمودار را مشخص کنید.
همچنین کار با کتابکارهای خارجی به عنوان منابع داده نمودار را پوشش میدهد. نمونهها نشان میدهند چگونه یک کتابکار خارجی ایجاد و اختصاص دهید، مسیر کتابکار خارجی مرتبط با یک نمودار را بازیابی کنید و دادههای نمودار را زمانی که کتابکار در دسترس باشد ویرایش کنید.
خواندن و نوشتن دادههای نمودار از یک کتابکار
Aspose.Slides متدهای readWorkbookStream و writeWorkbookStream را فراهم میکند که به شما امکان خواندن و نوشتن کتابکارهای داده نمودار (شامل دادههای نموداری که با Aspose.Cells ویرایش شدهاند) را میدهد. توجه داشته باشید که دادههای نمودار باید به همان شکل سازماندهی شوند یا ساختاری مشابه منبع داشته باشند.
این کد PHP نمونه عملی را نشان میدهد:
$pres = new Presentation("chart.pptx");
try {
$chart = $pres->getSlides()->get_Item(0)->getShapes()->get_Item(0);
$data = $chart->getChartData();
$stream = $data->readWorkbookStream();
$data->getSeries()->clear();
$data->getCategories()->clear();
$data->writeWorkbookStream($stream);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
تنظیم یک سلول کتابکار به عنوان برچسب داده نمودار
- یک نمونه از کلاس Presentation ایجاد کنید.
- مرجع یک اسلاید را از طریق اندیس آن دریافت کنید.
- یک نمودار حبابی با برخی دادهها اضافه کنید.
- سریهای نمودار را دسترسی پیدا کنید.
- سلول کتابکار را به عنوان برچسب داده تنظیم کنید.
- ارائه را ذخیره کنید.
این کد PHP نشان میدهد چگونه یک سلول کتابکار را به عنوان برچسب داده نمودار تنظیم کنید:
$lbl0 = "Label 0 cell value";
$lbl1 = "Label 1 cell value";
$lbl2 = "Label 2 cell value";
# یک نمونه از کلاس ارائه ایجاد میکند که فایل ارائه را نمایندگی میکند
$pres = new Presentation("chart2.pptx");
try {
$slide = $pres->getSlides()->get_Item(0);
$chart = $slide->getShapes()->addChart(ChartType::Bubble, 50, 50, 600, 400, true);
$series = $chart->getChartData()->getSeries();
$dataLabelCollection = $series->get_Item(0)->getLabels();
$dataLabelCollection->getDefaultDataLabelFormat()->setShowLabelValueFromCell(true);
$wb = $chart->getChartData()->getChartDataWorkbook();
$dataLabelCollection->get_Item(0)->setValueFromCell($wb->getCell(0, "A10", $lbl0));
$dataLabelCollection->get_Item(1)->setValueFromCell($wb->getCell(0, "A11", $lbl1));
$dataLabelCollection->get_Item(2)->setValueFromCell($wb->getCell(0, "A12", $lbl2));
$pres->save("resultchart.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
مدیریت برگههای کاری
این کد PHP عملیاتی را نشان میدهد که در آن از متد ChartDataWorkbook::getWorksheets برای دسترسی به مجموعهای از برگههای کاری استفاده میشود:
$pres = new Presentation();
try {
$chart = $pres->getSlides()->get_Item(0)->getShapes()->addChart(ChartType::Pie, 50, 50, 400, 500);
$wb = $chart->getChartData()->getChartDataWorkbook();
for($i = 0; $i < java_values($wb->getWorksheets()->size()) ; $i++) {
echo($wb->getWorksheets()->get_Item($i)->getName());
}
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
مشخص کردن نوع منبع داده
این کد PHP نشان میدهد چگونه یک نوع برای یک منبع داده مشخص کنید:
$pres = new Presentation();
try {
$chart = $pres->getSlides()->get_Item(0)->getShapes()->addChart(ChartType::Column3D, 50, 50, 600, 400, true);
$val = $chart->getChartData()->getSeries()->get_Item(0)->getName();
$val->setDataSourceType(DataSourceType::StringLiterals);
$val->setData("LiteralString");
$val = $chart->getChartData()->getSeries()->get_Item(1)->getName();
$val->setData($chart->getChartData()->getChartDataWorkbook()->getCell(0, "B1", "NewCell"));
$pres->save("pres.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
تشخیص قالبهای کتابکار جاسازیشده که پشتیبانی نمیشوند
Aspose.Slides از قالب کتابکار باینری Excel (.xlsb) که میتواند در برخی نمودارها جاسازی شود، پشتیبانی نمیکند. میتوانید از متد getEmbeddedWorkbookType روی ChartData به همراه شمارشگر WorkbookType برای تشخیص قالبهای پشتیبانینشده و عبور از آن نمودارها استفاده کنید.
$presentation = new Presentation("sample.pptx");
try {
$slide = $presentation->getSlides()->get_Item(0);
$shapes = $slide->getShapes();
for ($shapeIndex = 0; $shapeIndex < java_values($shapes->size()); $shapeIndex++) {
$shape = $shapes->get_Item($shapeIndex);
if (!java_instanceof($shape, new JavaClass("com.aspose.slides.IChart"))) {
continue;
}
$chart = $shape;
$chartData = $chart->getChartData();
if (java_values($chartData->getDataSourceType()) == ChartDataSourceType::InternalWorkbook &&
java_values($chartData->getEmbeddedWorkbookType()) == WorkbookType::WorkbookBinaryMacro) {
# کتابکار جاسازیشده در قالب .xlsb است که پشتیبانی نمیشود.
continue;
}
# در اینجا دادههای کتابکار نمودار را بخوانید یا تغییر دهید.
}
} finally {
$presentation->dispose();
}
کتابکار خارجی
Aspose.Slides از کتابکارهای خارجی به عنوان منبع داده برای نمودارها پشتیبانی میکند.
ایجاد یک کتابکار خارجی
با استفاده از متدهای readWorkbookStream و setExternalWorkbook میتوانید یک کتابکار خارجی را از صفر ایجاد کنید یا یک کتابکار داخلی را به حالت خارجی درآورید.
این کد PHP فرآیند ایجاد کتابکار خارجی را نشان میدهد:
$pres = new Presentation();
$Array = new java_class("java.lang.reflect.Array");
try {
$workbookPath = "externalWorkbook1.xlsx";
$chart = $pres->getSlides()->get_Item(0)->getShapes()->addChart(ChartType::Pie, 50, 50, 400, 600);
$fileStream = new Java("java.io.FileOutputStream", $workbookPath);
$Array = new java_class("java.lang.reflect.Array");
try {
$workbookData = $chart->getChartData()->readWorkbookStream();
$fileStream->write($workbookData, 0, $Array->getLength($workbookData));
} finally {
if (!java_is_null($fileStream)) {
$fileStream->close();
}
}
$chart->getChartData()->setExternalWorkbook($workbookPath);
$pres->save("externalWorkbook.pptx", SaveFormat::Pptx);
} catch (JavaException $e) {
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
تنظیم یک کتابکار خارجی
با استفاده از متد setExternalWorkbook میتوانید یک کتابکار خارجی را به عنوان منبع داده یک نمودار اختصاص دهید. این متد همچنین میتواند برای بروزرسانی مسیر کتابکار خارجی استفاده شود (اگر کتابکار جابهجا شده باشد).
اگرچه نمیتوانید دادههای موجود در کتابکارهایی که در مکانهای ریموت یا منابع ذخیره شدهاند را ویرایش کنید، هنوز میتوانید از این کتابکارها به عنوان منبع داده خارجی استفاده کنید. اگر مسیر نسبی برای یک کتابکار خارجی ارائه شود، بهطور خودکار به مسیر کامل تبدیل میشود.
این کد PHP نشان میدهد چگونه یک کتابکار خارجی تنظیم کنید:
# یک نمونه از کلاس Presentation ایجاد میکند
$pres = new Presentation("chart.pptx");
try {
$chart = $pres->getSlides()->get_Item(0)->getShapes()->addChart(ChartType::Pie, 50, 50, 400, 600, false);
$chartData = $chart->getChartData();
$chartData->setExternalWorkbook("externalWorkbook.xlsx");
$chartData->getSeries()->add($chartData->getChartDataWorkbook()->getCell(0, "B1"), ChartType::Pie);
$chartData->getSeries()->get_Item(0)->getDataPoints()->addDataPointForPieSeries($chartData->getChartDataWorkbook()->getCell(0, "B2"));
$chartData->getSeries()->get_Item(0)->getDataPoints()->addDataPointForPieSeries($chartData->getChartDataWorkbook()->getCell(0, "B3"));
$chartData->getSeries()->get_Item(0)->getDataPoints()->addDataPointForPieSeries($chartData->getChartDataWorkbook()->getCell(0, "B4"));
$chartData->getCategories()->add($chartData->getChartDataWorkbook()->getCell(0, "A2"));
$chartData->getCategories()->add($chartData->getChartDataWorkbook()->getCell(0, "A3"));
$chartData->getCategories()->add($chartData->getChartDataWorkbook()->getCell(0, "A4"));
$pres->save("Presentation_with_externalWorkbook.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
پارامتر ChartData (در زیر متد setExternalWorkbook) برای تعیین اینکه آیا یک کتابکار اکسل بارگذاری شود یا نه، استفاده میشود.
- زمانی که مقدار
ChartDataرویfalseتنظیم شود، فقط مسیر کتابکار بهروزرسانی میشود—دادههای نمودار از کتابکار هدف بارگذاری یا بهروزرسانی نمیشوند. ممکن است بخواهید از این تنظیم در شرایطی که کتابکار هدف وجود ندارد یا در دسترس نیست، استفاده کنید. - زمانی که مقدار
ChartDataرویtrueتنظیم شود، دادههای نمودار از کتابکار هدف بهروزرسانی میشوند.
# یک نمونه از کلاس Presentation ایجاد میکند
$pres = new Presentation("chart.pptx");
try {
$chart = $pres->getSlides()->get_Item(0)->getShapes()->addChart(ChartType::Pie, 50, 50, 400, 600, true);
$chartData = $chart->getChartData();
$chartData->setExternalWorkbook("http://path/doesnt/exists", false);
$pres->save("Presentation_with_externalWorkbookWithUpdateChartData.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
دریافت مسیر کتابکار منبع داده خارجی یک نمودار
- یک نمونه از کلاس Presentation ایجاد کنید.
- مرجع یک اسلاید را از طریق اندیس آن دریافت کنید.
- یک شی برای شکل نمودار ایجاد کنید.
- یک شی برای نوع منبع (
ChartDataSourceType) که منبع داده نمودار را نمایش میدهد، ایجاد کنید. - شرط مربوطه را بر اساس اینکه نوع منبع همان نوع منبع داده کتابکار خارجی باشد، مشخص کنید.
این کد PHP عمل را نشان میدهد:
# یک نمونه از کلاس Presentation ایجاد میکند
$pres = new Presentation("chart.pptx");
try {
$slide = $pres->getSlides()->get_Item(1);
$chart = $slide->getShapes()->get_Item(0);
$sourceType = $chart->getChartData()->getDataSourceType();
if ($sourceType == ChartDataSourceType::ExternalWorkbook) {
$path = $chart->getChartData()->getExternalWorkbookPath();
}
# ارائه را ذخیره میکند
$pres->save("result.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
ویرایش دادههای نمودار
میتوانید دادههای موجود در کتابکارهای خارجی را به همان صورتی که محتویات کتابکارهای داخلی را تغییر میدهید، ویرایش کنید. وقتی یک کتابکار خارجی بارگذاری نشود، استثنایی پرتاب میشود.
این کد PHP پیادهسازی فرآیند توصیفشده است:
# یک نمونه از کلاس Presentation ایجاد میکند
$pres = new Presentation("chart.pptx");
try {
$chart = $pres->getSlides()->get_Item(0)->getShapes()->get_Item(0);
$chartData = $chart->getChartData();
$chartData->getSeries()->get_Item(0)->getDataPoints()->get_Item(0)->getValue()->getAsCell()->setValue(100);
$pres->save("presentation_out.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
سوالات متداول
آیا میتوانم تعیین کنم که یک نمودار خاص به یک کتابکار خارجی یا جاسازیشده لینک دارد؟
بله. یک نمودار دارای یک نوع منبع داده و یک مسیر به کتابکار خارجی است؛ اگر منبع یک کتابکار خارجی باشد، میتوانید مسیر کامل را بخوانید تا اطمینان حاصل کنید که از یک فایل خارجی استفاده میشود.
آیا مسیرهای نسبی به کتابکارهای خارجی پشتیبانی میشوند و چگونه ذخیره میشوند؟
بله. اگر مسیر نسبی را مشخص کنید، بهصورت خودکار به مسیر مطلق تبدیل میشود. این برای قابلحمل بودن پروژه مفید است؛ اما توجه داشته باشید که ارائه مسیر مطلق را در فایل PPTX ذخیره میکند.
آیا میتوانم از کتابکارهای موجود در منابع/بهاشتراکگذاریهای شبکهای استفاده کنم؟
بله، چنین کتابکارهایی میتوانند به عنوان منبع داده خارجی استفاده شوند. با این حال، ویرایش مستقیم کتابکارهای ریموت از طریق Aspose.Slides پشتیبانی نمیشود—آنها فقط میتوانند به عنوان منبع استفاده شوند.
آیا Aspose.Slides هنگام ذخیره ارائه، فایل XLSX خارجی را بازنویسی میکند؟
خیر. ارائه یک لینک به فایل خارجی را ذخیره میکند و برای خواندن دادهها از آن استفاده میکند. فایل خارجی بهخودی خود هنگام ذخیره ارائه تغییر نمیکند.
اگر فایل خارجی با رمز عبور محافظت شود، چه کاری باید انجام دهم؟
Aspose.Slides هنگام لینک کردن رمز عبور را قبول نمیکند. یک روش معمول این است که پیشاپیش محافظت را حذف کنید یا یک نسخه رمزگشاییشده تهیه کنید (برای مثال با استفاده از Aspose.Cells) و به آن نسخه لینک کنید.
آیا چندین نمودار میتوانند به یک کتابکار خارجی مشترک ارجاع دهند؟
بله. هر نمودار لینک خود را ذخیره میکند. اگر همه به یک فایل اشاره کنند، بهروزرسانی آن فایل در هر بار بارگذاری دادهها در هر نمودار منعکس میشود.