PHP का उपयोग करके प्रस्तुतियों में चार्ट वर्कबुक्स का प्रबंधन
समीक्ष़ा
यह लेख Aspose.Slides में चार्ट वर्कबुक्स के साथ काम करने का तरीका समझाता है। यह दिखाता है कि वर्कबुक स्ट्रीम्स के माध्यम से चार्ट डेटा को कैसे पढ़ा और लिखा जाए, वर्कबुक सेल्स को चार्ट डेटा लेबल्स के रूप में कैसे उपयोग किया जाए, वर्कशीट कलेक्शन तक कैसे पहुँचें, और चार्ट मानों के लिए डेटा स्रोत प्रकार कैसे निर्दिष्ट करें।
यह बाहरी वर्कबुक्स को चार्ट डेटा स्रोत के रूप में उपयोग करने को भी कवर करता है। उदाहरण दिखाते हैं कि कैसे एक बाहरी वर्कबुक बनाएं और असाइन करें, चार्ट से जुड़ी बाहरी वर्कबुक का पथ प्राप्त करें, और जब वर्कबुक उपलब्ध हो तो चार्ट डेटा को संपादित करें।
उपलब्ध डेटा वाले सेल्स के लिए खाली सेल के प्रदर्शन को नियंत्रित करने हेतु Control the Display of Empty Cells देखें, जहाँ खाली सेल और शून्य के बीच का अंतर तथा उपलब्ध प्रदर्शन मोड्स के लाइन-चार्ट तुलना दिखायी गई है।
छिपी पंक्तियों और कॉलमों से डेटा शामिल करें
छिपी वर्कशीट पंक्तियों और कॉलमों से डेटा प्लॉट करने के लिये Chart::setPlotVisibleCellsOnly का उपयोग करें। केवल दृश्यमान सेल्स को प्लॉट करने हेतु इसे true सेट करें, या दृश्यमान और छिपे दोनों सेल्स को शामिल करने हेतु false सेट करें। यह सेटिंग केवल चार्ट प्लॉटिंग को नियंत्रित करती है; यह वर्कशीट पंक्तियों या कॉलमों को छिपाती या दिखाती नहीं है।
sample presentation में पहले स्लाइड पर पहले आकार के रूप में एक कॉलम चार्ट है। एम्बेडेड वर्कशीट, Sheet1, में निम्न स्रोत रेंज, A1:C4 है। पंक्ति 3 और कॉलम C छिपे हुए हैं, लेकिन उनके सेल्स में अभी भी मान हैं।
| Worksheet row | A: Month | B: Retail | C: Wholesale (छिपा कॉलम) |
|---|---|---|---|
| 2 | January | 10 | 30 |
| 3 (छिपी पंक्ति) | February | 40 | 60 |
| 4 | March | 20 | 50 |
ChartData::getChartDataWorkbook के माध्यम से स्रोत सेल्स तक पहुँचें और ChartDataCell::isHidden का उपयोग करके उनकी छिपी स्थिति की जाँच करें। यह विधि स्थिति को बदले बिना रिपोर्ट करती है। इस फ़ाइल में, B2 दृश्यमान है, B3 छिपी पंक्ति से संबंधित है, और C2 छिपे कॉलम से संबंधित है; उदाहरण क्रमशः false, true, और true प्रिंट करता है।
इस उदाहरण के लिए, प्लॉटिंग सेटिंग बदलने के बाद चार्ट डेटा को रीफ़्रेश करें: एम्बेडेड वर्कबुक को readWorkbookStream से प्राप्त करें और उसे writeWorkbookStream से पुनः लोड करें। सभी सेल्स को शामिल करने के लिए, छिपी फ़रवरी श्रेणी को भी पुनर्स्थापित करने हेतु setRange का उपयोग करें। केवल फ़्लैग बदलना इस नमूने के कैश्ड चार्ट डेटा और श्रेणी लेबल को रीफ़्रेश करने के लिए पर्याप्त नहीं है।
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
$presentation = new Presentation("hidden-source-data.pptx");
try {
$slide = $presentation->getSlides()->get_Item(0);
$shapeCount = java_values($slide->getShapes()->size());
if ($shapeCount > 0 && java_instanceof($slide->getShapes()->get_Item(0), new JavaClass("com.aspose.slides.IChart"))) {
$chart = $slide->getShapes()->get_Item(0);
$workbook = $chart->getChartData()->getChartDataWorkbook();
echo "B2 hidden: " . (java_values($workbook->getCell(0, "B2")->isHidden()) ? "true" : "false"), PHP_EOL;
echo "B3 hidden: " . (java_values($workbook->getCell(0, "B3")->isHidden()) ? "true" : "false"), PHP_EOL;
echo "C2 hidden: " . (java_values($workbook->getCell(0, "C2")->isHidden()) ? "true" : "false"), PHP_EOL;
$workbookData = $chart->getChartData()->readWorkbookStream();
foreach ([true, false] as $visibleOnly) {
$chart->setPlotVisibleCellsOnly($visibleOnly);
// एम्बेडेड वर्कबुक से चार्ट डेटा को रीफ़्रेश करें।
$chart->getChartData()->writeWorkbookStream($workbookData);
if (!$visibleOnly) {
// छिपी श्रेणियों सहित पूर्ण स्रोत रेंज को पुनर्स्थापित करें।
$chart->getChartData()->setRange('Sheet1!$A$1:$C$4');
}
$presentation->save("hidden_cells_" . ($visibleOnly ? "true" : "false") . ".pptx", SaveFormat::Pptx);
}
} else {
echo "The first shape is not a chart.", PHP_EOL;
}
} finally {
$presentation->dispose();
}
उदाहरण दो संस्करणों की प्रस्तुति को सहेजता है: एक जिसमें केवल दृश्यमान Retail मान (10 और 20) हैं, और दूसरा जिसमें सभी छह मान हैं। नीचे चित्र दो प्लॉटिंग मोड्स को दर्शाते हैं। पंक्ति 3 और कॉलम C दोनों एम्बेडेड वर्कबुक में छिपे रहते हैं।
केवल दृश्यमान सेल्स (true) |
सभी सेल्स (false) |
|---|---|
![]() |
![]() |
एक छिपा सेल जिसमें मान हो, वह खाली सेल से अलग होता है। Chart::setDisplayBlanksAs निर्धारित करता है कि लापता मानों को कैसे प्रदर्शित किया जाए; यह छिपे स्रोत डेटा को शामिल या बहिष्कृत नहीं करता। उदाहरण के लिए देखें Control the Display of Empty Cells।
चार्ट की डेटा रेंज प्राप्त करें
किसी मौजूदा प्रस्तुति में वर्कबुक डेटा को अपडेट करने से पहले, स्रोत रेंज की जाँच करें ताकि यह पहचान सकें कि प्रत्येक चार्ट कौनसी वर्कशीट सेल्स का उपयोग करता है। ChartData::getRange विधि वर्तमान डेटा रेंज को वर्कशीट-योग्य सूत्र के रूप में लौटाती है, जैसे Sheet1!$A$1:$D$5। यहाँ Sheet1 वर्कशीट का नाम है, ! इसे सेल रेंज से अलग करता है, और $A$1:$D$5 सेल्स A1 से D5 (समेत) को दर्शाता है। डॉलर साइन एब्सोल्यूट पंक्ति और कॉलम संदर्भ को संकेतित करता है।
विधि वर्तमान रेंज को पढ़ती है बिना चार्ट या उसके वर्कबुक को बदले। यदि चार्ट अपना डेटा स्रोत वर्कबुक के रूप में उपयोग नहीं करता, तो यह अपवाद फेंकेगा। अधिक जानकारी के लिये देखें ChartData API Reference।
यह उदाहरण एक प्रस्तुति खोलता है और प्रत्येक स्लाइड पर सीधे आकारों को चार्ट के लिये जांचता है। यह प्रत्येक चार्ट का नाम और स्रोत रेंज प्रिंट करता है। यदि कोई चार्ट वर्कबुक का उपयोग नहीं करता, तो यह एक संदेश प्रिंट करता है और अगले चार्ट पर जारी रहता है।
use aspose\slides\Presentation;
$presentation = new Presentation("presentation.pptx");
try {
$slideCount = java_values($presentation->getSlides()->size());
for ($slideIndex = 0; $slideIndex < $slideCount; $slideIndex++) {
$slide = $presentation->getSlides()->get_Item($slideIndex);
$shapeCount = java_values($slide->getShapes()->size());
for ($shapeIndex = 0; $shapeIndex < $shapeCount; $shapeIndex++) {
$shape = $slide->getShapes()->get_Item($shapeIndex);
if (java_instanceof($shape, new JavaClass("com.aspose.slides.IChart"))) {
$chart = $shape;
try {
$range = $chart->getChartData()->getRange();
echo $chart->getName() . ": " . $range, PHP_EOL;
} catch (JavaException $exception) {
if (java_instanceof($exception, new JavaClass("com.aspose.slides.exceptions.InvalidOperationException"))) {
echo $chart->getName() . ": The chart does not use a workbook as its data source.", PHP_EOL;
} else {
echo $chart->getName() . ": " . $exception->getMessage(), PHP_EOL;
}
}
}
}
}
} finally {
$presentation->dispose();
}
वर्कबुक से चार्ट डेटा पढ़ें और लिखें
Aspose.Slides for PHP via Java readWorkbookStream और writeWorkbookStream मेथड प्रदान करता है जो आपको चार्ट डेटा वर्कबुक्स (जिनमें Aspose.Cells के साथ संपादित डेटा होता है) को पढ़ने और लिखने देता है। Note कि चार्ट डेटा को उसी रूप में व्यवस्थित होना चाहिए या स्रोत के समान संरचना रखना चाहिए।
यह उदाहरण पहले स्लाइड पर पहले आकार के रूप में एक चार्ट वाली प्रस्तुति का उपयोग करता है। यह एम्बेडेड वर्कबुक को बाइट एरे में पढ़ता है, मौजूदा सीरीज़ और श्रेणियों को साफ़ करता है, और वही वर्कबुक वापस लिखता है। परिवर्तन मेमोरी में रहते हैं; उदाहरण प्रस्तुति को सहेजता नहीं है।
use aspose\slides\Presentation;
$presentation = new Presentation("chart.pptx");
try {
$slide = $presentation->getSlides()->get_Item(0);
$shapeCount = java_values($slide->getShapes()->size());
if ($shapeCount > 0 && java_instanceof($slide->getShapes()->get_Item(0), new JavaClass("com.aspose.slides.IChart"))) {
$chart = $slide->getShapes()->get_Item(0);
$chartData = $chart->getChartData();
$workbookData = $chartData->readWorkbookStream();
$chartData->getSeries()->clear();
$chartData->getCategories()->clear();
$chartData->writeWorkbookStream($workbookData);
} else {
echo "The first shape is not a chart.", PHP_EOL;
}
} finally {
$presentation->dispose();
}
वर्कबुक संशोधन के बाद चार्ट लेआउट को मान्य करें
जब आप एम्बेडेड वर्कबुक को संशोधित वर्कबुक से बदलते हैं, तो चार्ट अपनी मूल सीरीज़ और श्रेणी कलेक्शन बरकरार रखता है। यह असंगतता Chart::validateChartLayout को इंडेक्स-आउट-ऑफ-रेंज त्रुटि के साथ विफल कर सकती है। अपडेटेड वर्कबुक को चार्ट में लिखने से पहले मौजूदा सीरीज़ और श्रेणियों को साफ़ करें। यह उदाहरण पहली स्लाइड की पहली आकार वाले चार्ट का उपयोग करता है। टिप्पणी दर्शाती है कि वर्कबुक संपादन कहाँ होगा; चलनशील उदाहरण मूल वर्कबुक को वापस लिखता है और मेमोरी में लेआउट को मान्य करता है।
use aspose\slides\Presentation;
$presentation = new Presentation("chart.pptx");
try {
$slide = $presentation->getSlides()->get_Item(0);
$shapeCount = java_values($slide->getShapes()->size());
if ($shapeCount > 0 && java_instanceof($slide->getShapes()->get_Item(0), new JavaClass("com.aspose.slides.IChart"))) {
$chart = $slide->getShapes()->get_Item(0);
$chartData = $chart->getChartData();
$workbookData = $chartData->readWorkbookStream();
// वर्कबुक बाइट्स को यहाँ संशोधित करें, उदाहरण के लिए, Aspose.Cells का उपयोग करके.
$chartData->getSeries()->clear();
$chartData->getCategories()->clear();
$chartData->writeWorkbookStream($workbookData);
$chart->validateChartLayout();
} else {
echo "The first shape is not a chart.", PHP_EOL;
}
} finally {
$presentation->dispose();
}
कलेक्शन को साफ़ करने से वर्कबुक को वापस लिखने से पहले पुराने डेटा रेफ़रेंसेज़ हट जाते हैं। अपडेटेड वर्कबुक के लिये आवश्यक सीरीज़ और श्रेणी मैपिंग को पुनः बनाएँ फिर चार्ट का उपयोग करें।
वर्कबुक सेल को चार्ट डेटा लेबल के रूप में सेट करें
आप वर्कबुक सेल्स से टेक्स्ट को चार्ट डेटा लेबल के रूप में उपयोग कर सकते हैं।
यह उदाहरण मौजूदा प्रस्तुति की पहली स्लाइड पर एक बबल चार्ट को डिफ़ॉल्ट डेटा के साथ जोड़ता है। यह वर्कशीट 0 की सेल्स A10:A12 को पहली सीरीज़ के पहले तीन लेबल के लिये उपयोग करता है, सेल्स से लेबल सक्षम करता है, और अपडेटेड प्रस्तुति को सहेजता है।
use aspose\slides\Presentation;
use aspose\slides\ChartType;
use aspose\slides\SaveFormat;
$presentation = new Presentation("chart2.pptx");
try {
$slide = $presentation->getSlides()->get_Item(0);
$chart = $slide->getShapes()->addChart(ChartType::Bubble, 50, 50, 600, 400, true);
$series = $chart->getChartData()->getSeries()->get_Item(0);
$workbook = $chart->getChartData()->getChartDataWorkbook();
$series->getLabels()->getDefaultDataLabelFormat()->setShowLabelValueFromCell(true);
$series->getLabels()->get_Item(0)->setValueFromCell($workbook->getCell(0, "A10", "Label 0 cell value"));
$series->getLabels()->get_Item(1)->setValueFromCell($workbook->getCell(0, "A11", "Label 1 cell value"));
$series->getLabels()->get_Item(2)->setValueFromCell($workbook->getCell(0, "A12", "Label 2 cell value"));
$presentation->save("resultchart.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
वर्कशीट्स का प्रबंधन करें
ChartDataWorkbook::getWorksheets मेथड चार्ट वर्कबुक में वर्कशीट्स तक पहुंच प्रदान करता है। यह उदाहरण डिफ़ॉल्ट डेटा वाले एक पाई चार्ट को बनाता है और प्रत्येक वर्कशीट का नाम कंसोल पर प्रिंट करता है।
use aspose\slides\Presentation;
use aspose\slides\ChartType;
$presentation = new Presentation();
try {
$slide = $presentation->getSlides()->get_Item(0);
$chart = $slide->getShapes()->addChart(ChartType::Pie, 50, 50, 400, 500);
$workbook = $chart->getChartData()->getChartDataWorkbook();
for ($i = 0; $i < java_values($workbook->getWorksheets()->size()); $i++) {
echo $workbook->getWorksheets()->get_Item($i)->getName(), PHP_EOL;
}
} finally {
$presentation->dispose();
}
डेटा स्रोत प्रकार निर्दिष्ट करें
यह उदाहरण डिफ़ॉल्ट डेटा वाले एक 3D कॉलम चार्ट को बनाता है और दो सीरीज़ नामों को विभिन्न डेटा स्रोतों का उपयोग करके सेट करता है। पहला नाम स्ट्रिंग लिटेरल से आता है; दूसरा नाम वर्कशीट 0 के सेल C1 से आता है। DataSourceType एनेमरेशन प्रत्येक नाम के लिये स्रोत चुनता है। उदाहरण अपडेटेड सीरीज़ नामों के साथ प्रस्तुति को सहेजता है।
use aspose\slides\Presentation;
use aspose\slides\ChartType;
use aspose\slides\SaveFormat;
use aspose\slides\DataSourceType;
$presentation = new Presentation();
try {
$slide = $presentation->getSlides()->get_Item(0);
$chart = $slide->getShapes()->addChart(ChartType::Column3D, 50, 50, 600, 400, true);
$literalName = $chart->getChartData()->getSeries()->get_Item(0)->getName();
$literalName->setDataSourceType(DataSourceType::StringLiterals);
$literalName->setData("LiteralString");
$cellName = $chart->getChartData()->getSeries()->get_Item(1)->getName();
$nameCell = $chart->getChartData()->getChartDataWorkbook()->getCell(0, "C1", "NewCell");
$cellName->setDataSourceType(DataSourceType::Worksheet);
$cellName->setData($nameCell);
$presentation->save("pres.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
असमर्थित एम्बेडेड वर्कबुक फॉर्मैट्स का पता लगाएँ
Aspose.Slides कुछ चार्ट्स में एम्बेडेड Excel बाइनरी वर्कबुक (.xlsb) फॉर्मैट का समर्थन नहीं करता। आप ChartData पर getEmbeddedWorkbookType मेथड को WorkbookType एनेमरेशन के साथ उपयोग करके असमर्थित फॉर्मैट्स का पता लगा सकते हैं और उन चार्ट्स को स्किप कर सकते हैं। यह उदाहरण मौजूदा प्रस्तुति की पहली स्लाइड पर आकारों की जाँच करता है, गैर-चार्ट आकारों को छोड़ता है, और प्रत्येक .xlsb एम्बेडेड वर्कबुक वाले चार्ट के लिये डायग्नोस्टिक संदेश प्रिंट करता है।
use aspose\slides\Presentation;
use aspose\slides\ChartDataSourceType;
use aspose\slides\WorkbookType;
$presentation = new Presentation("sample.pptx");
try {
$slide = $presentation->getSlides()->get_Item(0);
$shapeCount = java_values($slide->getShapes()->size());
for ($shapeIndex = 0; $shapeIndex < $shapeCount; $shapeIndex++) {
$shape = $slide->getShapes()->get_Item($shapeIndex);
if (!java_instanceof($shape, new JavaClass("com.aspose.slides.IChart"))) {
continue;
}
$chart = $shape;
$chartData = $chart->getChartData();
$isInternalWorkbook = java_values($chartData->getDataSourceType()) == ChartDataSourceType::InternalWorkbook;
$isBinaryMacro = java_values($chartData->getEmbeddedWorkbookType()) == WorkbookType::WorkbookBinaryMacro;
if ($isInternalWorkbook && $isBinaryMacro) {
echo "Skipping a chart with an unsupported .xlsb workbook.", PHP_EOL;
continue;
}
// यहाँ समर्थित चार्ट वर्कबुक डेटा को पढ़ें या संशोधित करें।
}
} finally {
$presentation->dispose();
}
बाहरी वर्कबुक
Aspose.Slides चार्ट्स के लिये डेटा स्रोत के रूप में बाहरी वर्कबुक्स का उपयोग करने का समर्थन करता है।
एक बाहरी वर्कबुक बनाएं
readWorkbookStream और setExternalWorkbook का उपयोग करके एम्बेडेड चार्ट वर्कबुक को फ़ाइल में निर्यात करें और चार्ट को उस बाहरी वर्कबुक से लिंक करें।
यह उदाहरण डिफ़ॉल्ट डेटा वाले एक पाई चार्ट को बनाता है और उसकी वर्कबुक को निर्यात करता है। फ़ाइल लिखने के बाद बाहरी वर्कबुक को चार्ट डेटा स्रोत के रूप में असाइन करता है, फिर लिंक्ड प्रस्तुति को सहेजता है।
use aspose\slides\Presentation;
use aspose\slides\ChartType;
use aspose\slides\SaveFormat;
$presentation = new Presentation();
try {
$slide = $presentation->getSlides()->get_Item(0);
$chart = $slide->getShapes()->addChart(ChartType::Pie, 50, 50, 400, 600);
$workbookPath = new Java("java.io.File", "externalWorkbook1.xlsx");
$workbookData = $chart->getChartData()->readWorkbookStream();
try {
$fileStream = new Java("java.io.FileOutputStream", $workbookPath);
try {
$fileStream->write($workbookData);
} finally {
$fileStream->close();
}
$chart->getChartData()->setExternalWorkbook($workbookPath->getAbsolutePath());
$presentation->save("externalWorkbook.pptx", SaveFormat::Pptx);
} catch (JavaException $exception) {
echo "Could not write the external workbook: " . $exception->getMessage(), PHP_EOL;
}
} finally {
$presentation->dispose();
}
बाहरी वर्कबुक सेट करें
setExternalWorkbook मेथड का उपयोग करके आप किसी चार्ट के लिये बाहरी वर्कबुक को डेटा स्रोत के रूप में असाइन कर सकते हैं। यह मेथड बाहरी वर्कबुक के पथ को अपडेट करने के लिये भी उपयोग किया जा सकता है (यदि वह स्थानांतरित किया गया हो)।
जबकि आप रिमोट लोकेशन या संसाधनों में संग्रहीत वर्कबुक्स के डेटा को संपादित नहीं कर सकते, आप फिर भी ऐसे वर्कबुक्स को बाहरी डेटा स्रोत के रूप में उपयोग कर सकते हैं। यदि बाहरी वर्कबुक के लिये रिलेटिव पथ प्रदान किया जाता है, तो उसे स्वचालित रूप से पूर्ण पथ में परिवर्तित किया जाता है।
यह उदाहरण एक बाहरी वर्कबुक का उपयोग करता है जिसकी वर्कशीट Sheet1 में B1 में एक सीरीज़ नाम, A2:A4 में श्रेणी नाम, और B2:B4 में संख्यात्मक मान हैं। उदाहरण एक पाई चार्ट बनाता है, वर्कबुक को लिंक करता है, और setRange का उपयोग करके A1:B4 को एक सीरीज़ और तीन श्रेणियों के लिये मैप करता है। यह लिंक्ड चार्ट के साथ प्रस्तुति को सहेजता है।
use aspose\slides\Presentation;
use aspose\slides\ChartType;
use aspose\slides\SaveFormat;
$presentation = new Presentation();
try {
$slide = $presentation->getSlides()->get_Item(0);
$chart = $slide->getShapes()->addChart(ChartType::Pie, 50, 50, 400, 600, true);
$chartData = $chart->getChartData();
$workbookFile = new Java("java.io.File", "externalWorkbook.xlsx");
$workbookPath = $workbookFile->getAbsolutePath();
$chartData->setExternalWorkbook($workbookPath);
$chartData->setRange('Sheet1!$A$1:$B$4');
$presentation->save("Presentation_with_externalWorkbook.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
setExternalWorkbook का updateChartData पैरामीटर यह नियंत्रित करता है कि वर्कबुक लोड की जाए या नहीं।
- जब
updateChartDatafalseहो, तो केवल वर्कबुक पथ अपडेट किया जाता है। चार्ट डेटा लक्ष्य वर्कबुक से लोड या अपडेट नहीं किया जाता, इसलिए वर्कबुक उपलब्ध नहीं भी हो सकती। - जब
updateChartDatatrueहो, तो चार्ट डेटा लक्ष्य वर्कबुक से अपडेट किया जाता है।
निम्न उदाहरण updateChartData को false सेट करके एक प्लेसहोल्डर URL असाइन करता है। यह पाई चार्ट की डिफ़ॉल्ट डेटा को बरकरार रखता है और अनुपलब्ध वर्कबुक को लोड किए बिना प्रस्तुति को सहेजता है।
use aspose\slides\Presentation;
use aspose\slides\ChartType;
use aspose\slides\SaveFormat;
$presentation = new Presentation();
try {
$slide = $presentation->getSlides()->get_Item(0);
$chart = $slide->getShapes()->addChart(ChartType::Pie, 50, 50, 400, 600, true);
$chart->getChartData()->setExternalWorkbook("https://example.com/unavailable-workbook.xlsx", false);
$presentation->save("SetExternalWorkbookWithUpdateChartData.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
चार्ट की बाहरी डेटा स्रोत वर्कबुक पथ प्राप्त करें
किसी चार्ट से लिंक्ड वर्कबुक की पहचान करने के लिये, जांचें कि चार्ट बाहरी डेटा स्रोत का उपयोग करता है या नहीं और उसका वर्कबुक पथ प्राप्त करें।
यह उदाहरण एक प्रस्तुति की पहली स्लाइड के पहले आकार की जाँच करता है जिसमें लिंक्ड बाहरी वर्कबुक है। यदि वह एक चार्ट है जो बाहरी वर्कबुक से जुड़ा है, तो यह कंसोल पर getExternalWorkbookPath प्रिंट करता है। फिर यह प्रस्तुति की एक कॉपी सहेजता है।
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
use aspose\slides\ChartDataSourceType;
$presentation = new Presentation("externalWorkbook.pptx");
try {
$slide = $presentation->getSlides()->get_Item(0);
$shapeCount = java_values($slide->getShapes()->size());
if ($shapeCount > 0 && java_instanceof($slide->getShapes()->get_Item(0), new JavaClass("com.aspose.slides.IChart"))) {
$chart = $slide->getShapes()->get_Item(0);
$chartData = $chart->getChartData();
if (java_values($chartData->getDataSourceType()) == ChartDataSourceType::ExternalWorkbook) {
echo $chartData->getExternalWorkbookPath(), PHP_EOL;
} else {
echo "The chart does not use an external workbook.", PHP_EOL;
}
} else {
echo "The first shape is not a chart.", PHP_EOL;
}
$presentation->save("Result.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
चार्ट डेटा संपादित करें
आप बाहरी वर्कबुक्स के डेटा को उसी प्रकार संपादित कर सकते हैं जैसे आप आंतरिक वर्कबुक्स के डेटा को बदलते हैं। जब कोई बाहरी वर्कबुक लोड नहीं हो पाती, तो अपवाद फेंका जाता है।
यह उदाहरण पहली स्लाइड की पहली आकार वाले चार्ट का उपयोग करता है जो एक सुलभ बाहरी वर्कबुक से लिंक्ड है। यह पहली सीरीज़ के पहले डेटा पॉइंट का सेल-आधारित मान 100 पर सेट करता है और अपडेटेड प्रस्तुति को सहेजता है। सेल मानों को संपादित करने से लिंक्ड बाहरी XLSX फ़ाइल अपडेट हो सकती है, इसलिए मूल वर्कबुक को संरक्षित रखने के लिये कॉपी का उपयोग करें।
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
$presentation = new Presentation("presentation.pptx");
try {
$slide = $presentation->getSlides()->get_Item(0);
$shapeCount = java_values($slide->getShapes()->size());
if ($shapeCount > 0 && java_instanceof($slide->getShapes()->get_Item(0), new JavaClass("com.aspose.slides.IChart"))) {
$chart = $slide->getShapes()->get_Item(0);
$series = $chart->getChartData()->getSeries();
if (java_values($series->size()) > 0 && java_values($series->get_Item(0)->getDataPoints()->size()) > 0) {
$valueCell = $series->get_Item(0)->getDataPoints()->get_Item(0)->getValue()->getAsCell();
if (!java_is_null($valueCell)) {
$valueCell->setValue(100);
$presentation->save("presentation_out.pptx", SaveFormat::Pptx);
} else {
echo "The first data point is not linked to a workbook cell.", PHP_EOL;
}
} else {
echo "The chart has no data points to edit.", PHP_EOL;
}
} else {
echo "The first shape is not a chart.", PHP_EOL;
}
} finally {
$presentation->dispose();
}
चार्ट कैश से वर्कबुक पुनः प्राप्त करें
यदि कोई चार्ट ऐसी बाहरी वर्कबुक का उपयोग करता है जो लापता या अनुपलब्ध है, तो Aspose.Slides प्रस्तुति में कैश किए गए डेटा से चार्ट वर्कबुक को पुनः निर्मित कर सकता है। LoadOptions बनाएं, LoadOptions::setSpreadsheetOptions को कॉल करें, और SpreadsheetOptions::setRecoverWorkbookFromChartCache को true सेट करें, फिर प्रस्तुति खोलें।
निम्न PHP उदाहरण उस चार्ट के लिये वर्कबुक डेटा को पुनः प्राप्त करता है जो पहली स्लाइड की पहली आकार है और एक अनुपलब्ध बाहरी वर्कबुक का संदर्भ देता है। यह पुनः प्राप्त डेटा को Chart::getChartData और ChartData::getChartDataWorkbook के माध्यम से एक्सेस करता है:
use aspose\slides\Presentation;
use aspose\slides\SpreadsheetOptions;
use aspose\slides\LoadOptions;
$spreadsheetOptions = new SpreadsheetOptions();
$spreadsheetOptions->setRecoverWorkbookFromChartCache(true);
$loadOptions = new LoadOptions();
$loadOptions->setSpreadsheetOptions($spreadsheetOptions);
$presentation = new Presentation("presentation.pptx", $loadOptions);
try {
$slide = $presentation->getSlides()->get_Item(0);
$shapeCount = java_values($slide->getShapes()->size());
if ($shapeCount > 0 && java_instanceof($slide->getShapes()->get_Item(0), new JavaClass("com.aspose.slides.IChart"))) {
$chart = $slide->getShapes()->get_Item(0);
$recoveredWorkbook = $chart->getChartData()->getChartDataWorkbook();
// रिकवर्ड वर्कबुक डेटा को यहाँ पढ़ें या संशोधित करें।
} else {
echo "The first shape is not a chart.", PHP_EOL;
}
} finally {
$presentation->dispose();
}
यदि बाहरी वर्कबुक अनुपलब्ध है और रिकवरी अक्षम है, तो Aspose.Slides अपवाद फेंकेगा। केवल तभी रिकवरी सक्षम करें जब कैश्ड चार्ट डेटा का उपयोग एक स्वीकार्य बैकअप समाधान हो, क्योंकि कैश में बाहरी वर्कबुक में किए गए परिवर्तन शामिल नहीं हो सकते।
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) तैयार करें और उस कॉपी से लिंक करें।
क्या कई चार्ट्स एक ही बाहरी वर्कबुक का संदर्भ दे सकते हैं?
हाँ। प्रत्येक चार्ट अपना लिंक संग्रहीत करता है। यदि सभी एक ही फ़ाइल की ओर इशारा करते हैं, तो फ़ाइल को अपडेट करने से प्रत्येक चार्ट में अगली बार डेटा लोड होने पर परिवर्तन प्रतिबिंबित होंगे।

