Πώς να εργαστείτε με πίνακες στη Java

Πώς να εργαστείτε με πίνακες στη Java

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

Οδηγός βήμα-βήμα

Βήμα 1: Προσθέστε την εξάρτηση Maven

<dependency>
  <groupId>org.aspose.slides.foss</groupId>
  <artifactId>aspose-slides-foss</artifactId>
  <version>1.0.0</version>
</dependency>

Βήμα 2: Δημιουργία ή Άνοιγμα Παρουσίασης

import org.aspose.slides.foss.Presentation;
import org.aspose.slides.foss.ISlide;
import org.aspose.slides.foss.ITable;
import org.aspose.slides.foss.ICell;
import org.aspose.slides.foss.IParagraphCollection;
import org.aspose.slides.foss.IPortionFormat;
import org.aspose.slides.foss.NullableBool;
import org.aspose.slides.foss.FillType;
import org.aspose.slides.foss.export.SaveFormat;
import org.aspose.slides.foss.drawing.Color;

try (Presentation prs = new Presentation()) {
    ISlide slide = prs.getSlides().get(0);
    // ... add table ...
    prs.save("table.pptx", SaveFormat.PPTX);
}

Βήμα 3: Ορισμός Πλάτους Στηλών και Ύψους Γραμμών

Οι πίνακες απαιτούν ρητά πλάτη στηλών και ύψη γραμμών σε μονάδες σημείου (1 σημείο = 1/72 ίντσα). Μια τυπική διαφάνεια έχει πλάτος 720 σημείων και ύψος 540 σημείων.

double[] colWidths = {200.0, 150.0, 150.0};   // 3 columns
double[] rowHeights = {45.0, 40.0, 40.0};     // 3 rows

Βήμα 4: Προσθήκη του Πίνακα

slide.getShapes().addTable(x, y, colWidths, rowHeights) δημιουργεί τον πίνακα στη θέση (x, y):

import org.aspose.slides.foss.Presentation;
import org.aspose.slides.foss.ISlide;
import org.aspose.slides.foss.ITable;
import org.aspose.slides.foss.ICell;
import org.aspose.slides.foss.IParagraphCollection;
import org.aspose.slides.foss.IPortionFormat;
import org.aspose.slides.foss.NullableBool;
import org.aspose.slides.foss.FillType;
import org.aspose.slides.foss.export.SaveFormat;
import org.aspose.slides.foss.drawing.Color;

try (Presentation prs = new Presentation()) {
    ISlide slide = prs.getSlides().get(0);

    double[] colWidths = {200.0, 150.0, 150.0};
    double[] rowHeights = {45.0, 40.0, 40.0};
    ITable table = slide.getShapes().addTable(50, 100, colWidths, rowHeights);

    prs.save("table.pptx", SaveFormat.PPTX);
}

Βήμα 5: Ορισμός κειμένου κελιού

Πρόσβαση στα κελιά μέσω table.getRows().get(rowIndex).get(colIndex) και ανάθεση κειμένου μέσω .getTextFrame().setText():

import org.aspose.slides.foss.Presentation;
import org.aspose.slides.foss.ISlide;
import org.aspose.slides.foss.ITable;
import org.aspose.slides.foss.ICell;
import org.aspose.slides.foss.IParagraphCollection;
import org.aspose.slides.foss.IPortionFormat;
import org.aspose.slides.foss.NullableBool;
import org.aspose.slides.foss.FillType;
import org.aspose.slides.foss.export.SaveFormat;
import org.aspose.slides.foss.drawing.Color;

try (Presentation prs = new Presentation()) {
    ISlide slide = prs.getSlides().get(0);

    double[] colWidths = {200.0, 150.0, 150.0};
    double[] rowHeights = {45.0, 40.0, 40.0};
    ITable table = slide.getShapes().addTable(50, 100, colWidths, rowHeights);

    // Header row (row 0)
    String[] headers = {"Product", "Units Sold", "Revenue"};
    for (int col = 0; col < headers.length; col++) {
        table.getRows().get(0).get(col).getTextFrame().setText(headers[col]);
    }

    // Data rows
    String[][] data = {
        {"Widget A", "1,200", "$24,000"},
        {"Widget B", "850", "$17,000"},
    };
    for (int row = 0; row < data.length; row++) {
        for (int col = 0; col < data[row].length; col++) {
            table.getRows().get(row + 1).get(col)
                .getTextFrame().setText(data[row][col]);
        }
    }

    prs.save("sales-table.pptx", SaveFormat.PPTX);
}

Βήμα 6: Διαμόρφωση κειμένου κελιού κεφαλίδας

Εφαρμόστε έντονη μορφοποίηση στα κελιά κεφαλίδας χρησιμοποιώντας PortionFormat:

import org.aspose.slides.foss.Presentation;
import org.aspose.slides.foss.ISlide;
import org.aspose.slides.foss.ITable;
import org.aspose.slides.foss.ICell;
import org.aspose.slides.foss.IParagraphCollection;
import org.aspose.slides.foss.IPortionFormat;
import org.aspose.slides.foss.NullableBool;
import org.aspose.slides.foss.FillType;
import org.aspose.slides.foss.export.SaveFormat;
import org.aspose.slides.foss.drawing.Color;

for (int col = 0; col < headers.length; col++) {
    ICell cell = table.getRows().get(0).get(col);
    IParagraphCollection paragraphs = cell.getTextFrame().getParagraphs();
    if (paragraphs.size() > 0 && paragraphs.get(0).getPortions().size() > 0) {
        IPortionFormat fmt = paragraphs.get(0).getPortions().get(0)
            .getPortionFormat();
        fmt.setFontBold(NullableBool.TRUE);
        fmt.getFillFormat().setFillType(FillType.SOLID);
        fmt.getFillFormat().getSolidFillColor().setColor(
            Color.fromArgb(255, 255, 255, 255)
        );
    }
}

Πλήρες Παράδειγμα Λειτουργίας

import org.aspose.slides.foss.Presentation;
import org.aspose.slides.foss.ISlide;
import org.aspose.slides.foss.ITable;
import org.aspose.slides.foss.ICell;
import org.aspose.slides.foss.IParagraphCollection;
import org.aspose.slides.foss.IPortionFormat;
import org.aspose.slides.foss.NullableBool;
import org.aspose.slides.foss.FillType;
import org.aspose.slides.foss.export.SaveFormat;
import org.aspose.slides.foss.drawing.Color;

public class CreateTable {
    public static void main(String[] args) {
        String[][] dataRows = {
            {"North", "$1.2M", "+8%"},
            {"South", "$0.9M", "+4%"},
            {"East",  "$1.5M", "+12%"},
            {"West",  "$0.7M", "+2%"},
        };
        String[] headers = {"Region", "Revenue", "Growth"};

        try (Presentation prs = new Presentation()) {
            ISlide slide = prs.getSlides().get(0);

            double[] colWidths = {180.0, 140.0, 120.0};
            double[] rowHeights = new double[dataRows.length + 1];
            rowHeights[0] = 45.0;
            for (int i = 1; i < rowHeights.length; i++) {
                rowHeights[i] = 38.0;
            }

            ITable table = slide.getShapes().addTable(
                60, 80, colWidths, rowHeights
            );

            // Header row
            for (int col = 0; col < headers.length; col++) {
                ICell cell = table.getRows().get(0).get(col);
                cell.getTextFrame().setText(headers[col]);
                if (cell.getTextFrame().getParagraphs().size() > 0
                    && cell.getTextFrame().getParagraphs().get(0)
                        .getPortions().size() > 0) {
                    cell.getTextFrame().getParagraphs().get(0)
                        .getPortions().get(0).getPortionFormat()
                        .setFontBold(NullableBool.TRUE);
                }
            }

            // Data rows
            for (int row = 0; row < dataRows.length; row++) {
                for (int col = 0; col < dataRows[row].length; col++) {
                    table.getRows().get(row + 1).get(col)
                        .getTextFrame().setText(dataRows[row][col]);
                }
            }

            prs.save("regional-revenue.pptx", SaveFormat.PPTX);
        }
        System.out.println("Saved regional-revenue.pptx");
    }
}

Κοινά Προβλήματα και Διορθώσεις

IndexOutOfBoundsException κατά την πρόσβαση table.getRows().get(row).get(col)

Οι δείκτες γραμμής και στήλης είναι μηδενικής βάσης. Εάν ορίσατε το rowHeights με 3 στοιχεία, οι έγκυροι δείκτες γραμμής είναι 0, 1, 2.

Το κείμενο του κελιού δεν εμφανίζεται στο αποθηκευμένο αρχείο

Πάντα εκχωρείτε μέσω .getTextFrame().setText(value). Πρόσβαση στα κελιά ως table.getRows().get(rowIndex).get(colIndex).getTextFrame().setText("value").

Η θέση του πίνακα είναι εκτός της διαφάνειας

Ελέγξτε ότι x + sum(colWidths) <= 720 και y + sum(rowHeights) <= 540 για μια τυπική διαφάνεια.


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

Μπορώ να συγχωνεύσω κελιά πίνακα;

Η συγχώνευση κελιών (mergeCells) δηλώνεται στο API, αλλά προκαλεί UnsupportedOperationException σε αυτήν την έκδοση.

Μπορώ να εφαρμόσω χρώμα φόντου σε ολόκληρο τον πίνακα;

Εφαρμόστε μορφοποίηση γεμίσματος σε κάθε μεμονωμένο κελί:

for (int row = 0; row < table.getRows().size(); row++) {
    for (int col = 0; col < table.getColumns().size(); col++) {
        ICell cell = table.getRows().get(row).get(col);
        cell.getFillFormat().setFillType(FillType.SOLID);
        cell.getFillFormat().getSolidFillColor().setColor(
            Color.fromArgb(255, 240, 248, 255)
        );
    }
}

Μπορώ να ορίσω μια προεπιλογή στυλ πίνακα;

Ναι. Χρησιμοποιήστε table.setStylePreset(TableStylePreset.MEDIUM_STYLE_2_ACCENT_1) για να εφαρμόσετε ένα ενσωματωμένο στυλ πίνακα.


Δείτε επίσης

 Ελληνικά