Cara Bekerja dengan Jadual dalam Java
Aspose.Slides FOSS for Java supports creating tables on slides with configurable column widths and row heights. This guide shows how to add a table, populate it with data, and apply basic text formatting to cells.
Panduan Langkah demi Langkah
Langkah 1: Tambah Kebergantungan Maven
<dependency>
<groupId>org.aspose.slides.foss</groupId>
<artifactId>aspose-slides-foss</artifactId>
<version>1.0.0</version>
</dependency>Langkah 2: Cipta atau Buka Persembahan
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);
}Langkah 3: Tentukan Lebar Lajur dan Tinggi Baris
Jadual memerlukan lebar lajur dan tinggi baris yang jelas dalam titik (1 titik = 1/72 inci). Slaid standard berukuran 720 titik lebar dan 540 titik tinggi.
double[] colWidths = {200.0, 150.0, 150.0}; // 3 columns
double[] rowHeights = {45.0, 40.0, 40.0}; // 3 rowsLangkah 4: Tambah Jadual
slide.getShapes().addTable(x, y, colWidths, rowHeights) mencipta jadual pada kedudukan (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);
}Langkah 5: Tetapkan Teks Sel
Akses sel melalui table.getRows().get(rowIndex).get(colIndex) dan tetapkan teks melalui .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);
}Langkah 6: Format Teks Sel Header
Terapkan pemformatan tebal pada sel tajuk menggunakan 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)
);
}
}Contoh Kerja Lengkap
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");
}
}Isu Umum dan Penyelesaian
IndexOutOfBoundsException apabila mengakses table.getRows().get(row).get(col)
Indeks baris dan lajur bermula dari sifar. Jika anda mendefinisikan rowHeights dengan 3 elemen, indeks baris yang sah ialah 0, 1, 2.
Teks sel tidak muncul dalam fail yang disimpan
Sentiasa tetapkan melalui .getTextFrame().setText(value). Akses sel sebagai table.getRows().get(rowIndex).get(colIndex).getTextFrame().setText("value").
Kedudukan jadual berada di luar slaid
Semak bahawa x + sum(colWidths) <= 720 dan y + sum(rowHeights) <= 540 untuk slaid standard.
Soalan Lazim
Bolehkah saya menggabungkan sel jadual?
Penggabungan sel (mergeCells) dinyatakan dalam API tetapi menimbulkan UnsupportedOperationException dalam edisi ini.
Bolehkah saya menggunakan warna latar belakang untuk keseluruhan jadual?
Terapkan pemformatan isi pada setiap sel secara individu:
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)
);
}
}Bolehkah saya menetapkan preset gaya jadual?
Ya. Gunakan table.setStylePreset(TableStylePreset.MEDIUM_STYLE_2_ACCENT_1) untuk menggunakan gaya jadual terbina dalam.