จัดการสมุดงานแผนภูมิในงานนำเสนอด้วย .NET

ภาพรวม

บทความนี้อธิบายวิธีทำงานกับแผนภูมิที่ใช้สมุดงานใน Aspose.Slides แสดงวิธีอ่านและเขียนข้อมูลแผนภูมิผ่านสตรีมของสมุดงาน ใช้เซลล์ของสมุดงานเป็นป้ายข้อมูลของแผนภูมิ เข้าถึงคอลเลกชันของชีตงาน และระบุประเภทแหล่งข้อมูลสำหรับค่าของแผนภูมิ

ยังครอบคลุมการทำงานกับสมุดงานภายนอกเป็นแหล่งข้อมูลของแผนภูมิ ตัวอย่างจะแสดงวิธีสร้างและกำหนดสมุดงานภายนอก ดึงเส้นทางของสมุดงานภายนอกที่เชื่อมโยงกับแผนภูมิ และแก้ไขข้อมูลแผนภูมิเมื่อสมุดงานพร้อมใช้งาน

สำหรับเซลล์ของสมุดงานที่แสดงข้อมูลหายไป ดูที่ ควบคุมการแสดงผลของเซลล์ที่ว่างเปล่า เพื่อเปรียบเทียบความแตกต่างระหว่างเซลล์ว่างและศูนย์ รวมถึงการเปรียบเทียบแบบแผนภูมิเส้นของโหมดการแสดงผลที่มีให้

รวมข้อมูลจากแถวและคอลัมน์ที่ซ่อน

ใช้ IChart.PlotVisibleCellsOnly เพื่อควบคุมว่าข้อความของแผนภูมิจะพล็อตข้อมูลจากแถวและคอลัมน์ของชีตงานที่ซ่อนหรือไม่ ตั้งค่าเป็น true เพื่อพล็อตเฉพาะเซลล์ที่มองเห็นได้ หรือ false เพื่อรวมเซลล์ที่มองเห็นและที่ซ่อนไว้ การตั้งค่านี้ส่งผลต่อการพล็อตของแผนภูมิเท่านั้น ไม่ได้ซ่อนหรือแสดงแถวหรือคอลัมน์ของชีตงาน

ดาวน์โหลดไฟล์ hidden-source-data.pptx และวางไว้ในโฟลเดอร์ทำงาน สไลด์แรกมีแผนภูมิคอลัมน์เป็นรูปร่างแรก ชีตงานที่ฝังอยู่ Sheet1 มีช่วงข้อมูลต้นแบบ A1:C4 แถว 3 และคอลัมน์ C ถูกซ่อน แต่เซลล์ยังคงมีค่า

แถวของชีตงาน A: เดือน B: ขายปลีก C: ขายส่ง (คอลัมน์ที่ซ่อน)
2 January 10 30
3 (แถวที่ซ่อน) February 40 60
4 March 20 50

เข้าถึงเซลล์ต้นแบบผ่าน IChartData.ChartDataWorkbook และอ่านคุณสมบัติ IChartDataCell.IsHidden เพื่อดูสถานะการซ่อน คุณสมบัตินี้เป็นแบบอ่านอย่างเดียว ในไฟล์นี้ B2 มองเห็นได้, B3 อยู่ในแถวที่ซ่อน, และ C2 อยู่ในคอลัมน์ที่ซ่อน; ตัวอย่างจะแสดงผล False, True, และ True ตามลำดับ

สำหรับตัวอย่างนี้ ให้รีเฟรชข้อมูลแผนภูมิหลังจากเปลี่ยนการตั้งค่าการพล็อต: รักษาสมุดงานที่ฝังอยู่ด้วย ReadWorkbookStream แล้วโหลดใหม่ด้วย WriteWorkbookStream เมื่อรวมทุกเซลล์ ให้ใช้ SetRange เพื่อคืนช่วงข้อมูลเต็มรวมถึงหมวดเดือน February ที่ซ่อนอยู่ การเปลี่ยนค่าสถานะอย่างเดียวไม่เพียงพอที่จะรีเฟรชข้อมูลแผนภูมิและป้ายหมวดที่แคชไว้ในตัวอย่างนี้

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.");
}

ตัวอย่างจะบันทึก hidden_cells_True.pptx ที่มีเฉพาะค่าขายปลีกที่มองเห็น (10 และ 20) และ hidden_cells_False.pptx ที่มีค่าทั้งหกค่า รูปภาพด้านล่างแสดงจากการเปิดนำเสนอที่บันทึกแล้ว; ทั้งสองไฟล์รักษาการตั้งค่าการพล็อตของตนเอง แถว 3 และคอลัมน์ C ยังคงซ่อนอยู่ในสมุดงานที่ฝังทั้งสอง

เฉพาะเซลล์ที่มองเห็น (true) ทุกเซลล์ (false)
Only visible cells: Retail values 10 and 20 for January and March. All cells: Retail and Wholesale values for January, February, and March.

เซลล์ที่ซ่อนและมีค่าแตกต่างจากเซลล์ว่างเปล่า IChart.DisplayBlanksAs ควบคุมวิธีการแสดงค่าที่หายไป; มันไม่ได้รวมหรือยกเว้นข้อมูลต้นแบบที่ซ่อน ดูที่ ควบคุมการแสดงผลของเซลล์ที่ว่างเปล่า สำหรับตัวอย่าง

อ่านและเขียนข้อมูลแผนภูมิจากสมุดงาน

Aspose.Slides for .NET มีเมธอด ReadWorkbookStream และ WriteWorkbookStream ที่ให้คุณอ่านและเขียนสมุดงานข้อมูลแผนภูมิ (ซึ่งอาจถูกแก้ไขด้วย Aspose.Cells) หมายเหตุ ข้อมูลแผนภูมิต้องจัดเรียงในรูปแบบเดียวกันหรือมีโครงสร้างที่คล้ายกับต้นแบบ

ตัวอย่างนี้เปิด chart.pptx ซึ่งต้องมีแผนภูมิเป็นรูปร่างแรกบนสไลด์แรก มันจะอ่านสมุดงานที่ฝังอยู่เป็นสตรีม ล้างชุดข้อมูลและหมวดหมู่เดิม แล้วเขียนสมุดงานเดิมกลับเข้าไป การเปลี่ยนแปลงอยู่ในหน่วยความจำ; ตัวอย่างไม่ได้บันทึกการนำเสนอ

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 ให้ล้างชุดข้อมูลและหมวดเดิมก่อนเขียนสมุดงานที่อัปเดตกลับเข้ากับแผนภูมิ ตัวอย่างนี้ต้องการไฟล์ chart.pptx ที่มีแผนภูมิเป็นรูปร่างแรกบนสไลด์แรก คอมเมนต์ระบุจุดที่การแก้ไขสมุดงานจะเกิดขึ้น; ตัวอย่างทำงานจะเขียนสมุดงานต้นฉบับกลับและตรวจสอบโครงสร้างในหน่วยความจำ

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.");
}

การล้างคอลเลกชันจะลบการอ้างอิงข้อมูลเก่าออกก่อนเขียนสมุดงานกลับมา สร้างการแม็พชุดข้อมูลและหมวดใหม่ตามสมุดงานที่อัปเดตก่อนใช้งานแผนภูมิ

กำหนดเซลล์ของสมุดงานเป็นป้ายข้อมูลแผนภูมิ

คุณสามารถใช้ข้อความจากเซลล์ของสมุดงานเป็นป้ายข้อมูลแผนภูมิ ขั้นตอนต่อไปนี้แสดงวิธีเชื่อมป้ายในแผนภูมิบับเบิลกับเซลล์ในสมุดข้อมูลของมัน

  1. สร้างอินสแตนซ์ของคลาส Presentation
  2. เข้าถึงสไลด์แรกโดยใช้ดัชนีเริ่มจากศูนย์
  3. เพิ่มแผนภูมิบับเบิลด้วยข้อมูลเริ่มต้น
  4. เข้าถึงชุดข้อมูลของแผนภูมิ
  5. ตั้งค่าเซลล์ของสมุดงานเป็นป้ายข้อมูล
  6. บันทึกการนำเสนอ

ตัวอย่างนี้เปิด chart2.pptx ซึ่งต้องมีสไลด์อย่างน้อยหนึ่งสไลด์และเพิ่มแผนภูมิบับเบิลด้วยข้อมูลเริ่มต้น มันใช้เซลล์ A10:A12 ในชีตที่ 0 สำหรับป้ายสามอันแรกของชุดแรก เปิดใช้งานป้ายจากเซลล์ และบันทึกผลลัพธ์เป็น resultchart.pptx

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);
}

ระบุประเภทแหล่งข้อมูล

ตัวอย่างนี้สร้างแผนภูมิคอลัมน์ 3 มิติด้วยข้อมูลเริ่มต้นและตั้งชื่อสองชุดโดยใช้แหล่งข้อมูลต่างกัน ชื่อแรกใช้สตริงลิเทรัล; ชื่อที่สองใช้เซลล์ C1 ในชีตที่ 0 ค่าธรรมชาติ DataSourceType จะเลือกแหล่งสำหรับแต่ละชื่อ ผลลัพธ์บันทึกเป็น pres.pptx

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 ร่วมกับค่ำ enumerations WorkbookType เพื่อค้นหารูปแบบที่ไม่รองรับและข้ามแผนภูมิเหล่านั้น ตัวอย่างนี้ตรวจสอบรูปร่างบนสไลด์แรกของ sample.pptx ข้ามรูปร่างที่ไม่ใช่แผนภูมิ และพิมพ์ข้อความวินิจฉัยสำหรับแต่ละแผนภูมิที่มีสมุดงาน .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 เพื่อส่งออกสมุดงานแผนภูมิที่ฝังเป็นไฟล์และเชื่อมแผนภูมิกับสมุดงานภายนอกนั้น

ตัวอย่างนี้สร้างแผนภูมิวงกลมด้วยข้อมูลเริ่มต้น เขียนสมุดงานของมันไปที่ externalWorkbook1.xlsx แล้วปิดสตรีมผลลัพธ์ก่อนกำหนดไฟล์เป็นแหล่งข้อมูลของแผนภูมิ บันทึกการนำเสนอที่เชื่อมโยงเป็น externalWorkbook.pptx

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 คุณสามารถกำหนดสมุดงานภายนอกให้กับแผนภูมิเป็นแหล่งข้อมูลได้ เมธอดนี้ยังใช้เพื่ออัปเดตเส้นทางไปยังสมุดงานภายนอก (หากไฟล์นั้นถูกย้าย)

แม้ว่าจะไม่สามารถแก้ไขข้อมูลในสมุดงานที่อยู่บนทรัพยากรระยะไกลได้ แต่ยังสามารถใช้สมุดงานเหล่านั้นเป็นแหล่งข้อมูลภายนอกได้ หากระบุเส้นทางสัมพัทธ์สำหรับสมุดงานภายนอก ระบบจะเปลี่ยนเป็นเส้นทางเต็มโดยอัตโนมัติ

ตัวอย่างนี้ต้องการไฟล์ externalWorkbook.xlsx ในโฟลเดอร์ทำงาน ชีตที่ชื่อ Sheet1 ต้องมีชื่อชุดข้อมูลใน B1, ชื่อหมวดใน A2:A4, และค่าตัวเลขใน B2:B4 ตัวอย่างสร้างแผนภูมิวงกลม เชื่อมสมุดงาน และใช้ SetRange เพื่อแม็พ A1:B4 เป็นชุดข้อมูลหนึ่งชุดและสามหมวด บันทึกผลลัพธ์เป็น Presentation_with_externalWorkbook.pptx

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 ควบคุมว่าจะแปลงสมุดงานหรือไม่

  • เมื่อ updateChartData เป็น false จะอัปเดตเพียงเส้นทางของสมุดงาน แผนภูมิจะไม่โหลดหรืออัปเดตข้อมูลจากสมุดงานเป้าหมาย ดังนั้นสมุดงานอาจไม่พร้อมใช้งาน
  • เมื่อ updateChartData เป็น 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);

รับเส้นทางของสมุดงานแหล่งข้อมูลภายนอกของแผนภูมิ

เพื่อตรวจสอบสมุดงานที่เชื่อมโยงกับแผนภูมิ ให้ตรวจสอบก่อนว่าแผนภูมิใช้แหล่งข้อมูลภายนอกหรือไม่ หากใช่ ให้ดึงเส้นทางของสมุดงานตามขั้นตอนต่อไปนี้

  1. สร้างอินสแตนซ์ของคลาส Presentation
  2. เข้าถึงสไลด์แรกโดยใช้ดัชนีเริ่มจากศูนย์
  3. ตรวจสอบว่ารูปร่างแรกเป็นแผนภูมิหรือไม่
  4. อ่านประเภทแหล่งข้อมูลของแผนภูมิ
  5. หากเป็นสมุดงานภายนอก ให้อ่านเส้นทางของมัน

ตัวอย่างนี้เปิด externalWorkbook.pptx ที่สร้างจากตัวอย่างก่อนหน้า และตรวจสอบรูปร่างแรกบนสไลด์แรก หากเป็นแผนภูมิที่เชื่อมกับสมุดงานภายนอก ตัวอย่างจะแสดงผล ExternalWorkbookPath ไปยังคอนโซล จากนั้นบันทึกสำเนาการนำเสนอเป็น Result.pptx

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);

แก้ไขข้อมูลแผนภูมิ

คุณสามารถแก้ไขข้อมูลในสมุดงานภายนอกได้เช่นเดียวกับการแก้ไขข้อมูลในสมุดงานภายใน หากไม่สามารถโหลดสมุดงานภายนอกได้ จะเกิดข้อยกเว้น

ตัวอย่างนี้ต้องการไฟล์ presentation.pptx ที่มีแผนภูมิเป็นรูปร่างแรกบนสไลด์แรกและสมุดงานภายนอกที่เข้าถึงได้ มันตั้งค่าค่าที่ได้จากเซลล์ของจุดข้อมูลแรกในชุดแรกเป็น 100 และบันทึกการนำเสนอเป็น presentation_out.pptx การแก้ไขค่าผ่านเซลล์อาจอัปเดตไฟล์ 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 สามารถสร้างสมุดงานแผนภูมิจากข้อมูลที่แคชไว้ในไฟล์นำเสนอได้ สร้างอ็อบเจ็กต์ LoadOptions ตั้งค่า SpreadsheetOptions และกำหนด ISpreadsheetOptions.RecoverWorkbookFromChartCache เป็น true ก่อนเปิดไฟล์นำเสนอ

ตัวอย่าง C# ด้านล่างเปิด presentation.pptx ซึ่งรูปร่างแรกบนสไลด์แรกต้องเป็นแผนภูมิที่อ้างอิงสมุดงานภายนอกที่ไม่สามารถเข้าถึงได้และเข้าถึงข้อมูลที่กู้คืนผ่าน 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 ให้เปิดใช้งานการกู้คืนเฉพาะเมื่อการใช้ข้อมูลแคชของแผนภูมิเป็นวิธีสำรองที่ยอมรับได้ เนื่องจากแคชอาจไม่มีการเปลี่ยนแปลงที่ทำในสมุดงานภายนอกหลังจากที่นำเสนออัปเดตครั้งสุดท้าย

คำถามที่พบบ่อย

ฉันสามารถระบุได้หรือไม่ว่าแผนภูมิเฉพาะเชื่อมโยงกับสมุดงานภายนอกหรือที่ฝังไว้?

ใช่ แผนภูมิมี ประเภทแหล่งข้อมูล และ เส้นทางไปยังสมุดงานภายนอก หากแหล่งเป็นสมุดงานภายนอก คุณสามารถอ่านเส้นทางเต็มเพื่อยืนยันว่ามีไฟล์ภายนอกถูกใช้

รองรับเส้นทางสัมพัทธ์ไปยังสมุดงานภายนอกหรือไม่ และมันถูกจัดเก็บอย่างไร?

รองรับ หากระบุเส้นทางสัมพัทธ์ ระบบจะเปลี่ยนเป็นเส้นทางเต็มโดยอัตโนมัติ การนำเสนอจะเก็บเส้นทางเต็มในไฟล์ PPTX ดังนั้นการย้ายสมุดงานอาจต้องอัปเดตลิงก์

ฉันสามารถใช้สมุดงานที่อยู่บนเครือข่ายหรือแชร์ได้หรือไม่?

ได้ สมุดงานเหล่านั้นสามารถใช้เป็นแหล่งข้อมูลภายนอกได้ อย่างไรก็ตาม การแก้ไขสมุดงานระยะไกลโดยตรงจาก Aspose.Slides ไม่รองรับ – สามารถใช้เป็นแหล่งข้อมูลเท่านั้น

Aspose.Slides จะเขียนทับไฟล์ XLSX ภายนอกเมื่อบันทึกการนำเสนอหรือไม่?

การนำเสนอจะเก็บ ลิงก์ไปยังไฟล์ภายนอก การแก้ไขข้อมูลแผนภูมิที่มาจากเซลล์อาจอัปเดตไฟล์ XLSX ภายในเครื่องด้วย ใช้สำเนาของสมุดงานหากต้องการให้ไฟล์ต้นฉบับคงเดิม

ถ้าไฟล์ภายนอกมีการป้องกันด้วยรหัสผ่านฉันควรทำอย่างไร?

Aspose.Slides ไม่รับรหัสผ่านเมื่อทำการเชื่อมโยง วิธีทั่วไปคือเอาการป้องกันออกล่วงหน้าหรือเตรียมสำเนาที่ถอดรหัสแล้ว (เช่น โดยใช้ Aspose.Cells) แล้วเชื่อมโยงกับสำเนานั้น

หลายแผนภูมิสามารถอ้างอิงสมุดงานภายนอกเดียวกันได้หรือไม่?

ได้ แต่ละแผนภูมิจะเก็บลิงก์ของตนเอง หากทั้งหมดชี้ไปที่ไฟล์เดียวกัน การอัปเดตไฟล์นั้นจะสะท้อนในทุกแผนภูมิในครั้งต่อไปที่โหลดข้อมูล**