כיצד לעבוד עם טבלאות ב-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) כדי להחיל סגנון טבלה מובנה.