Διαχείριση Βιβλίων Εργασίας Διαγραμμάτων σε Παρουσιάσεις Χρησιμοποιώντας JavaScript

Επισκόπηση

Αυτό το άρθρο εξηγεί πώς να εργάζεστε με βιβλία εργασίας διαγραμμάτων στο Aspose.Slides. Δείχνει πώς να διαβάζετε και να γράφετε δεδομένα διαγράμματος μέσω ροών βιβλίου εργασίας, να χρησιμοποιείτε κελιά βιβλίου εργασίας ως ετικέτες δεδομένων διαγράμματος, να έχετε πρόσβαση σε συλλογές φύλλων εργασίας και να καθορίζετε τον τύπο πηγής δεδομένων για τις τιμές του διαγράμματος.

Καλύπτει επίσης την εργασία με εξωτερικά βιβλία εργασίας ως πηγές δεδομένων διαγράμματος. Τα παραδείγματα δείχνουν πώς να δημιουργήσετε και να εκχωρήσετε ένα εξωτερικό βιβλίο εργασίας, να ανακτήσετε τη διαδρομή ενός εξωτερικού βιβλίου εργασίας που είναι συνδεδεμένο σε διάγραμμα και να επεξεργαστείτε τα δεδομένα του διαγράμματος όταν το βιβλίο εργασίας είναι διαθέσιμο.

Ανάγνωση και Εγγραφή Δεδομένων Διαγράμματος από Βιβλίο Εργασίας

Το Aspose.Slides παρέχει τις μεθόδους readWorkbookStream και writeWorkbookStream που επιτρέπουν να διαβάζετε και να γράφετε βιβλία εργασίας δεδομένων διαγράμματος (που περιέχουν δεδομένα διαγράμματος επεξεργασμένα με το Aspose.Cells). Σημείωση ότι τα δεδομένα του διαγράμματος πρέπει να είναι οργανωμένα με τον ίδιο τρόπο ή να έχουν δομή παρόμοια με την πηγή.

This JavaScript code demonstrates a sample operation:

var aspose = aspose || {};
aspose.slides = require("aspose.slides.via.java");

var pres = new aspose.slides.Presentation("chart.pptx");
try {
    var chart = pres.getSlides().get_Item(0).getShapes().get_Item(0);
    var data = chart.getChartData();
    var stream = data.readWorkbookStream();
    data.getSeries().clear();
    data.getCategories().clear();
    data.writeWorkbookStream(stream);
} finally {
    if (pres != null) {
        pres.dispose();
    }
}

Επικύρωση Διάταξης Διαγράμματος μετά την Τροποποίηση του Βιβλίου Εργασίας

Αν αντικαταστήσετε ένα ενσωματωμένο βιβλίο εργασίας με ένα τροποποιημένο, το διάγραμμα διατηρεί τις αρχικές σειρές και συλλογές κατηγοριών του. Αυτή η ασυμφωνία μπορεί να προκαλέσει την αποτυχία της μεθόδου Chart.validateChartLayout με σφάλμα εκτός ορίων δείκτη. Καθαρίστε τις υπάρχουσες σειρές και κατηγορίες πριν γράψετε το ενημερωμένο βιβλίο εργασίας πίσω στο διάγραμμα.

// Μετά την τροποποίηση της ροής του βιβλίου εργασίας (π.χ., χρησιμοποιώντας Aspose.Cells)
var updatedWorkbook = chartData.readWorkbookStream();

// Καθαρίστε τις υπάρχουσες αναφορές δεδομένων.
chartData.getSeries().clear();
chartData.getCategories().clear();

chartData.writeWorkbookStream(updatedWorkbook);

chart.validateChartLayout();

Ο καθαρισμός των συλλογών εξασφαλίζει ότι η δομή των δεδομένων του διαγράμματος είναι συνεπής με το νέο βιβλίο εργασίας, επιτρέποντας στο validateChartLayout να ολοκληρωθεί χωρίς σφάλματα.

Ορισμός Κελιού WorkBook ως Ετικέτα Δεδομένων Διαγράμματος

  1. Δημιουργήστε ένα παράδειγμα της κλάσης Presentation.
  2. Αποκτήστε μία αναφορά σλάϊδα μέσω του δείκτη του.
  3. Προσθέστε ένα γράφημα Bubble με κάποιο δεδομένα.
  4. Προσπελάστε τις σειρές του διαγράμματος.
  5. Ορίστε το κελί του βιβλίου εργασίας ως ετικέτα δεδομένων.
  6. Αποθηκεύστε την παρουσίαση.

This JavaScript code shows you to set a workbook cell as a chart data label:

var aspose = aspose || {};
aspose.slides = require("aspose.slides.via.java");

var lbl0 = "Label 0 cell value";
var lbl1 = "Label 1 cell value";
var lbl2 = "Label 2 cell value";
// Δημιουργεί μια κλάση παρουσίασης που αντιπροσωπεύει ένα αρχείο παρουσίασης
var pres = new aspose.slides.Presentation("chart2.pptx");
try {
    var slide = pres.getSlides().get_Item(0);
    var chart = slide.getShapes().addChart(aspose.slides.ChartType.Bubble, 50, 50, 600, 400, true);
    var series = chart.getChartData().getSeries();
    var dataLabelCollection = series.get_Item(0).getLabels();
    dataLabelCollection.getDefaultDataLabelFormat().setShowLabelValueFromCell(true);
    var 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", aspose.slides.SaveFormat.Pptx);
} finally {
    if (pres != null) {
        pres.dispose();
    }
}

Διαχείριση Φύλλων Εργασίας

This JavaScript code demonstrates an operation where the ChartDataWorkbook.getWorksheets method is used to access a worksheet collection:

var aspose = aspose || {};
aspose.slides = require("aspose.slides.via.java");

var pres = new aspose.slides.Presentation();
try {
    var chart = pres.getSlides().get_Item(0).getShapes().addChart(aspose.slides.ChartType.Pie, 50, 50, 400, 500);
    var wb = chart.getChartData().getChartDataWorkbook();
    for (var i = 0; i < wb.getWorksheets().size(); i++) {
        console.log(wb.getWorksheets().get_Item(i).getName());
    }
} finally {
    if (pres != null) {
        pres.dispose();
    }
}

Καθορισμός Τύπου Πηγής Δεδομένων

This JavaScript code shows you how to specify a type for a data source:

var aspose = aspose || {};
aspose.slides = require("aspose.slides.via.java");

var pres = new aspose.slides.Presentation();
try {
    var chart = pres.getSlides().get_Item(0).getShapes().addChart(aspose.slides.ChartType.Column3D, 50, 50, 600, 400, true);
    var val = chart.getChartData().getSeries().get_Item(0).getName();
    val.setDataSourceType(aspose.slides.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", aspose.slides.SaveFormat.Pptx);
} finally {
    if (pres != null) {
        pres.dispose();
    }
}

Ανίχνευση Μη Υποστηριζόμενων Ενσωματωμένων Μορφών Βιβλίου Εργασίας

Το Aspose.Slides δεν υποστηρίζει τη μορφή Excel binary workbook (.xlsb) που μπορεί να ενσωματωθεί σε ορισμένα διαγράμματα. Μπορείτε να χρησιμοποιήσετε τη μέθοδο getEmbeddedWorkbookType στο ChartData μαζί με την απαρίθμηση WorkbookType για την ανίχνευση μη υποστηριζόμενων μορφών και την παράλειψη αυτών των διαγραμμάτων.

var aspose = aspose || {};
aspose.slides = require("aspose.slides.via.java");
const java = require("java");

let presentation = new aspose.slides.Presentation("sample.pptx");
try {
    let slide = presentation.getSlides().get_Item(0);
    let shapes = slide.getShapes();

    for (let shapeIndex = 0; shapeIndex < shapes.size(); shapeIndex++) {
        let shape = shapes.get_Item(shapeIndex);

        if (!java.instanceOf(shape, "com.aspose.slides.IChart")) continue;

        let chart = shape;
        let chartData = chart.getChartData();

        if (chartData.getDataSourceType() == aspose.slides.ChartDataSourceType.InternalWorkbook &&
                chartData.getEmbeddedWorkbookType() == aspose.slides.WorkbookType.WorkbookBinaryMacro) {
            // Το ενσωματωμένο βιβλίο εργασίας είναι σε μορφή .xlsb, η οποία δεν υποστηρίζεται.
            continue;
        }

        // Διαβάστε ή τροποποιήστε εδώ τα δεδομένα του βιβλίου εργασίας διαγράμματος.
    }
} finally {
    presentation.dispose();
}

Εξωτερικό Βιβλίο Εργασίας

Το Aspose.Slides υποστηρίζει εξωτερικά βιβλία εργασίας ως πηγή δεδομένων για διαγράμματα.

Δημιουργία Εξωτερικού Βιβλίου Εργασίας

Χρησιμοποιώντας τις μεθόδους readWorkbookStream και setExternalWorkbook, μπορείτε είτε να δημιουργήσετε ένα εξωτερικό βιβλίο εργασίας από την αρχή είτε να κάνετε ένα εσωτερικό βιβλίο εργασίας εξωτερικό.

This JavaScript code demonstrates the external workbook creation process:

var aspose = aspose || {};
aspose.slides = require("aspose.slides.via.java");
const fileSystem = require("fs");

var pres = new aspose.slides.Presentation();
try {
    var workbookPath = "externalWorkbook1.xlsx";
    var chart = pres.getSlides().get_Item(0).getShapes().addChart(aspose.slides.ChartType.Pie, 50, 50, 400, 600);
    // Η μέθοδος readWorkbookStream επιστρέφει τα byte του βιβλίου εργασίας ως Node Buffer.
    var workbookData = chart.getChartData().readWorkbookStream();
    fileSystem.writeFileSync(workbookPath, Buffer.from(workbookData));
    chart.getChartData().setExternalWorkbook(workbookPath);
    pres.save("externalWorkbook.pptx", aspose.slides.SaveFormat.Pptx);
} catch (e) {console.log(e);
} finally {
    if (pres != null) {
        pres.dispose();
    }
}

Ορισμός Εξωτερικού Βιβλίου Εργασίας

Χρησιμοποιώντας τη μέθοδο setExternalWorkbook, μπορείτε να εκχωρήσετε ένα εξωτερικό βιβλίο εργασίας σε ένα διάγραμμα ως πηγή δεδομένων του. Η μέθοδος αυτή μπορεί επίσης να χρησιμοποιηθεί για την ανανέωση μιας διαδρομής προς το εξωτερικό βιβλίο εργασίας (εάν αυτό μετακινηθεί).

Ενώ δεν μπορείτε να επεξεργαστείτε τα δεδομένα σε βιβλία εργασίας που αποθηκεύονται σε απομακρυσμένες θέσεις ή πόρους, μπορείτε παρακάμπτως να τα χρησιμοποιήσετε ως εξωτερική πηγή δεδομένων. Εάν παρέχεται σχετική διαδρομή για ένα εξωτερικό βιβλίο εργασίας, αυτή μετατρέπεται αυτόματα σε πλήρη διαδρομή.

This JavaScript code shows you how to set an external workbook:

var aspose = aspose || {};
aspose.slides = require("aspose.slides.via.java");

// Δημιουργεί ένα στιγμιότυπο της κλάσης Presentation
var pres = new aspose.slides.Presentation("chart.pptx");
try {
    var chart = pres.getSlides().get_Item(0).getShapes().addChart(aspose.slides.ChartType.Pie, 50, 50, 400, 600, false);
    var chartData = chart.getChartData();
    chartData.setExternalWorkbook("externalWorkbook.xlsx");
    chartData.getSeries().add(chartData.getChartDataWorkbook().getCell(0, "B1"), aspose.slides.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", aspose.slides.SaveFormat.Pptx);
} finally {
    if (pres != null) {
        pres.dispose();
    }
}

Η δεύτερη παράμετρος της μεθόδου setExternalWorkbook, updateChartData, καθορίζει εάν το Excel workbook θα φορτωθεί ή όχι.

  • Όταν το updateChartData οριστεί σε false, ενημερώνεται μόνο η διαδρομή του βιβλίου εργασίας — τα δεδομένα του διαγράμματος δεν θα φορτωθούν ή ενημερωθούν από το βιβλίο εργασίας προορισμού. Αυτή η ρύθμιση μπορεί να είναι χρήσιμη όταν το βιβλίο εργασίας προορισμού δεν υπάρχει ή δεν είναι διαθέσιμο.
  • Όταν το updateChartData οριστεί σε true, τα δεδομένα του διαγράμματος ενημερώνονται από το βιβλίο εργασίας προορισμού.
var aspose = aspose || {};
aspose.slides = require("aspose.slides.via.java");

// Δημιουργεί ένα στιγμιότυπο της κλάσης Presentation
var pres = new aspose.slides.Presentation("chart.pptx");
try {
    var chart = pres.getSlides().get_Item(0).getShapes().addChart(aspose.slides.ChartType.Pie, 50, 50, 400, 600, true);
    var chartData = chart.getChartData();
    chartData.setExternalWorkbook("http://path/doesnt/exists", false);
    pres.save("Presentation_with_externalWorkbookWithUpdateChartData.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
    if (pres != null) {
        pres.dispose();
    }
}

Ανάκτηση Διαδρομής Βιβλίου Εργασίας Εξωτερικής Πηγής Δεδομένων Διαγράμματος

  1. Δημιουργήστε ένα παράδειγμα της κλάσης Presentation.
  2. Αποκτήστε μία αναφορά σλάϊδα μέσω του δείκτη του.
  3. Δημιουργήστε ένα αντικείμενο για το σχήμα του διαγράμματος.
  4. Δημιουργήστε ένα αντικείμενο για τον τύπο πηγής (ChartDataSourceType) που αντιπροσωπεύει την πηγή δεδομένων του διαγράμματος.
  5. Καθορίστε τη σχετική συνθήκη με βάση το αν ο τύπος πηγής είναι ο ίδιος με τον τύπο εξωτερικού βιβλίου εργασίας.

This JavaScript code demonstrates the operation:

var aspose = aspose || {};
aspose.slides = require("aspose.slides.via.java");

// Δημιουργεί ένα στιγμιότυπο της κλάσης Presentation
var pres = new aspose.slides.Presentation("chart.pptx");
try {
    var slide = pres.getSlides().get_Item(1);
    var chart = slide.getShapes().get_Item(0);
    var sourceType = chart.getChartData().getDataSourceType();
    if (sourceType == aspose.slides.ChartDataSourceType.ExternalWorkbook) {
        var path = chart.getChartData().getExternalWorkbookPath();
    }
    // Αποθηκεύει την παρουσίαση
    pres.save("result.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
    if (pres != null) {
        pres.dispose();
    }
}

Επεξεργασία Δεδομένων Διαγράμματος

Μπορείτε να επεξεργαστείτε τα δεδομένα σε εξωτερικά βιβλία εργασίας με τον ίδιο τρόπο που κάνετε αλλαγές στα περιεχόμενα εσωτερικών βιβλίων εργασίας. Όταν ένα εξωτερικό βιβλίο εργασίας δεν μπορεί να φορτωθεί, εγείρεται μια εξαίρεση.

// Δημιουργεί ένα στιγμιότυπο της κλάσης Presentation
var aspose = aspose || {};
aspose.slides = require("aspose.slides.via.java");

var pres = new aspose.slides.Presentation("chart.pptx");
try {
    var chart = pres.getSlides().get_Item(0).getShapes().get_Item(0);
    var chartData = chart.getChartData();
    chartData.getSeries().get_Item(0).getDataPoints().get_Item(0).getValue().getAsCell().setValue(100);
    pres.save("presentation_out.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
    if (pres != null) {
        pres.dispose();
    }
}

Ανάκτηση Βιβλίου Εργασίας από την Κρυφή Μνήμη του Διαγράμματος

Εάν ένα διάγραμμα χρησιμοποιεί ένα εξωτερικό βιβλίο εργασίας που λείπει ή δεν είναι διαθέσιμο, το Aspose.Slides μπορεί να ανασυστήσει το βιβλίο εργασίας του διαγράμματος από τα δεδομένα που έχουν αποθηκευτεί στην παρουσίαση. Δημιουργήστε LoadOptions, διαμορφώστε το με SpreadsheetOptions, και καλέστε SpreadsheetOptions.setRecoverWorkbookFromChartCache με true πριν ανοίξετε την παρουσίαση.

Το παρακάτω παράδειγμα JavaScript ανοίγει μια παρουσίαση της οποίας τα διαγράμματα αναφέρονται σε μη διαθέσιμο εξωτερικό βιβλίο εργασίας και προσπελάζει τα ανακτημένα δεδομένα μέσω ChartData.getChartDataWorkbook:

var aspose = aspose || {};
aspose.slides = require("aspose.slides.via.java");

const spreadsheetOptions = new aspose.slides.SpreadsheetOptions();
spreadsheetOptions.setRecoverWorkbookFromChartCache(true);

const loadOptions = new aspose.slides.LoadOptions();
loadOptions.setSpreadsheetOptions(spreadsheetOptions);

const presentation = new aspose.slides.Presentation("presentation.pptx", loadOptions);
try {
    const chart = presentation.getSlides().get_Item(0).getShapes().get_Item(0);
    const recoveredWorkbook = chart.getChartData().getChartDataWorkbook();

    // Διαβάστε ή τροποποιήστε εδώ τα δεδομένα του ανάκτητου βιβλίου εργασίας.
} finally {
    presentation.dispose();
}

Εάν το εξωτερικό βιβλίο εργασίας δεν είναι διαθέσιμο και η ανάκτηση είναι απενεργοποιημένη, το Aspose.Slides ρίχνει μια εξαίρεση. Ενεργοποιήστε την ανάκτηση μόνο όταν η χρήση των αποθηκευμένων δεδομένων διαγράμματος αποτελεί αποδεκτό εναλλακτικό, επειδή η κρυφή μνήμη ίσως να μην περιέχει αλλαγές που έγιναν στο εξωτερικό βιβλίο εργασίας μετά την τελευταία ενημέρωση της παρουσίασης.

Συχνές Ερωτήσεις

Μπορώ να καθορίσω εάν ένα συγκεκριμένο διάγραμμα είναι συνδεδεμένο με εξωτερικό ή ενσωματωμένο βιβλίο εργασίας;

Ναι. Ένα διάγραμμα διαθέτει έναν data source type και μια path to an external workbook. Εάν η πηγή είναι εξωτερικό βιβλίο εργασίας, μπορείτε να διαβάσετε τη πλήρη διαδρομή για να βεβαιωθείτε ότι χρησιμοποιείται ένα εξωτερικό αρχείο.

Υποστηρίζονται σχετικές διαδρομές προς εξωτερικά βιβλία εργασίας και πώς αποθηκεύονται;

Ναι. Εάν καθορίσετε σχετική διαδρομή, αυτή μετατρέπεται αυτόματα σε απόλυτη διαδρομή. Αυτό είναι βολικό για φορητότητα του έργου· ωστόσο, η παρουσίαση αποθηκεύει την απόλυτη διαδρομή στο αρχείο PPTX.

Μπορώ να χρησιμοποιήσω βιβλία εργασίας που βρίσκονται σε πόρους/κοινόχρηστους δικτύου;

Ναι, τέτοια βιβλία εργασίας μπορούν να χρησιμοποιηθούν ως εξωτερική πηγή δεδομένων. Ωστόσο, η άμεση επεξεργασία απομακρυσμένων βιβλίων εργασίας από το Aspose.Slides δεν υποστηρίζεται· μπορούν μόνο να χρησιμοποιηθούν ως πηγή.

Αντικαθιστά το Aspose.Slides το εξωτερικό XLSX κατά την αποθήκευση της παρουσίασης;

Όχι. Η παρουσίαση αποθηκεύει έναν link to the external file και τον χρησιμοποιεί μόνο για την ανάγνωση των δεδομένων. Το εξωτερικό αρχείο δεν τροποποιείται όταν αποθηκεύεται η παρουσίαση.

Τι πρέπει να κάνω εάν το εξωτερικό αρχείο είναι προστατευμένο με κωδικό;

Το Aspose.Slides δεν δέχεται κωδικό κατά τη σύνδεση. Συνήθης προσέγγιση είναι η αφαίρεση της προστασίας εκ των προτέρων ή η προετοιμασία ενός αποκρυπτογραφημένου αντιγράφου (π.χ., χρησιμοποιώντας Aspose.Cells) και η σύνδεση σε αυτό το αντίγραφο.

Μπορούν πολλαπλά διαγράμματα να αναφέρονται στο ίδιο εξωτερικό βιβλίο εργασίας;

Ναι. Κάθε διάγραμμα αποθηκεύει το δικό του σύνδεσμο. Εάν όλα δείχνουν στο ίδιο αρχείο, η ενημέρωση του αρχείου θα αντικατοπτρίζεται σε κάθε διάγραμμα την επόμενη φορά που θα φορτωθούν τα δεδομένα.