Hantera presentationstabeller i PHP
Introduktion
En tabell i PowerPoint är ett effektivt sätt att visa och framställa information. Informationen i ett rutnät av celler (arrangerade i rader och kolumner) är enkel och lätt att förstå.
Aspose.Slides tillhandahåller klassen Table, klassen Cell och andra typer för att låta dig skapa, uppdatera och hantera tabeller i alla typer av presentationer.
Skapa en tabell från grunden
- Skapa en instans av klassen Presentation .
- Hämta en slides referens via dess index.
- Definiera en array av
columnWidth. - Definiera en array av
rowHeight. - Lägg till ett Table‑objekt på bilden genom metoden addTable .
- Iterera genom varje Cell för att tillämpa formatering på de övre, nedre, högra och vänstra kanterna.
- Slå samman de två första cellerna i tabellens första rad.
- Kom åt en Cell’s TextFrame .
- Lägg till lite text i TextFrame .
- Spara den modifierade presentationen.
# Instansierar en Presentation-klass som representerar en PPTX-fil
$pres = new Presentation();
try {
# Kommer åt den första bilden
$sld = $pres->getSlides()->get_Item(0);
# Definierar kolumner med bredder och rader med höjder
$dblCols = array(50, 50, 50 );
$dblRows = array(50, 30, 30, 30, 30 );
# Lägger till ett tabellobjekt på bilden
$tbl = $sld->getShapes()->addTable(100, 50, $dblCols, $dblRows);
# Ställer in kantformat för varje cell
for($row = 0; $row < java_values($tbl->getRows()->size()) ; $row++) {
for($cell = 0; $cell < java_values($tbl->getRows()->get_Item($row)->size()) ; $cell++) {
$cellFormat = $tbl->getRows()->get_Item($row)->get_Item($cell)->getCellFormat();
$cellFormat::getBorderTop()->getFillFormat()->setFillType(FillType::Solid);
$cellFormat::getBorderTop()->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->RED);
$cellFormat::getBorderTop()->setWidth(5);
$cellFormat::getBorderBottom()->getFillFormat()->setFillType(FillType::Solid);
$cellFormat::getBorderBottom()->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->RED);
$cellFormat::getBorderBottom()->setWidth(5);
$cellFormat::getBorderLeft()->getFillFormat()->setFillType(FillType::Solid);
$cellFormat::getBorderLeft()->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->RED);
$cellFormat::getBorderLeft()->setWidth(5);
$cellFormat::getBorderRight()->getFillFormat()->setFillType(FillType::Solid);
$cellFormat::getBorderRight()->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->RED);
$cellFormat::getBorderRight()->setWidth(5);
}
}
# Slår ihop cellerna 1 och 2 i rad 1
$tbl->mergeCells($tbl->getRows()->get_Item(0)->get_Item(0), $tbl->getRows()->get_Item(1)->get_Item(1), false);
# Lägger till text i den sammanslagna cellen
$tbl->getRows()->get_Item(0)->get_Item(0)->getTextFrame()->setText("Merged Cells");
# Sparar presentationen till disk
$pres->save("table.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Numrering i en standardtabell
I en standardtabell är numreringen av celler enkel och nollbaserad. Den första cellen i en tabell indexeras som 0,0 (kolumn 0, rad 0).
Till exempel numreras cellerna i en tabell med 4 kolumner och 4 rader på följande sätt:
| (0, 0) | (1, 0) | (2, 0) | (3, 0) |
|---|---|---|---|
| (0, 1) | (1, 1) | (2, 1) | (3, 1) |
| (0, 2) | (1, 2) | (2, 2) | (3, 2) |
| (0, 3) | (1, 3) | (2, 3) | (3, 3) |
Denna PHP‑kod visar hur du anger numreringen för celler i en tabell:
# Instansierar en Presentation-klass som representerar en PPTX-fil
$pres = new Presentation();
try {
# Kommer åt den första bilden
$sld = $pres->getSlides()->get_Item(0);
# Definierar kolumner med bredder och rader med höjder
$dblCols = array(70, 70, 70, 70 );
$dblRows = array(70, 70, 70, 70 );
# Lägger till ett tabellobjekt på bilden
$tbl = $sld->getShapes()->addTable(100, 50, $dblCols, $dblRows);
# Ställer in kantformat för varje cell
foreach($tbl->getRows() as $row) {
foreach($row as $cell) {
$cell->getCellFormat()->getBorderTop()->getFillFormat()->setFillType(FillType::Solid);
$cell->getCellFormat()->getBorderTop()->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->RED);
$cell->getCellFormat()->getBorderTop()->setWidth(5);
$cell->getCellFormat()->getBorderBottom()->getFillFormat()->setFillType(FillType::Solid);
$cell->getCellFormat()->getBorderBottom()->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->RED);
$cell->getCellFormat()->getBorderBottom()->setWidth(5);
$cell->getCellFormat()->getBorderLeft()->getFillFormat()->setFillType(FillType::Solid);
$cell->getCellFormat()->getBorderLeft()->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->RED);
$cell->getCellFormat()->getBorderLeft()->setWidth(5);
$cell->getCellFormat()->getBorderRight()->getFillFormat()->setFillType(FillType::Solid);
$cell->getCellFormat()->getBorderRight()->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->RED);
$cell->getCellFormat()->getBorderRight()->setWidth(5);
}
}
# Sparar presentationen till disk
$pres->save("StandardTables_out.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Åtkomst till en befintlig tabell
-
Skapa en instans av klassen Presentation .
-
Hämta en referens till bilden som innehåller tabellen via dess index.
-
Skapa ett Table‑objekt och sätt det till null.
-
Iterera genom alla Shape‑objekt tills tabellen hittas.
Om du misstänker att bilden du arbetar med innehåller en enda tabell kan du helt enkelt kontrollera alla former den innehåller. När en form identifieras som en tabell kan du typkonvertera den till ett Table‑objekt. Men om bilden du arbetar med innehåller flera tabeller är det bättre att söka efter den tabell du behöver via dess setAlternativeText(String value) .
-
Använd Table‑objektet för att arbeta med tabellen. I exemplet nedan lade vi till en ny rad i tabellen.
-
Spara den modifierade presentationen.
# Instansierar Presentation-klassen som representerar en PPTX-fil
$pres = new Presentation("UpdateExistingTable.pptx");
try {
# Kommer åt den första bilden
$sld = $pres->getSlides()->get_Item(0);
# Initierar null TableEx
$tbl = null;
# Itererar genom formerna och sätter en referens till den hittade tabellen
foreach($sld->getShapes() as $shp) {
if (java_instanceof($shp, new JavaClass("com.aspose.slides.Table"))) {
$tbl = $shp;
# Sätter texten för den första kolumnen i den andra raden
$tbl->get_Item(0, 1)->getTextFrame()->setText("New");
}
}
# Sparar den modifierade presentationen till disk
$pres->save("table1_out.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Justera text i en tabell
- Skapa en instans av klassen Presentation .
- Hämta en slides referens via dess index.
- Lägg till ett Table‑objekt på bilden.
- Kom åt ett TextFrame‑objekt från tabellen.
- Kom åt Paragraph .
- Justera texten vertikalt.
- Spara den modifierade presentationen.
# Skapar en instans av Presentation-klassen
$pres = new Presentation();
try {
# Hämtar den första bilden
$slide = $pres->getSlides()->get_Item(0);
# Definierar kolumner med bredder och rader med höjder
$dblCols = array(120, 120, 120, 120 );
$dblRows = array(100, 100, 100, 100 );
# Lägger till tabellformen på bilden
$tbl = $slide->getShapes()->addTable(100, 50, $dblCols, $dblRows);
$tbl->get_Item(1, 0)->getTextFrame()->setText("10");
$tbl->get_Item(2, 0)->getTextFrame()->setText("20");
$tbl->get_Item(3, 0)->getTextFrame()->setText("30");
# Kommer åt textramen
$txtFrame = $tbl->get_Item(0, 0)->getTextFrame();
# Skapar Paragraph-objektet för textramen
$paragraph = $txtFrame->getParagraphs()->get_Item(0);
# Skapar Portion-objektet för stycket
$portion = $paragraph->getPortions()->get_Item(0);
$portion->setText("Text here");
$portion->getPortionFormat()->getFillFormat()->setFillType(FillType::Solid);
$portion->getPortionFormat()->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->BLACK);
# Justerar texten vertikalt
$cell = $tbl->get_Item(0, 0);
$cell->setTextAnchorType(TextAnchorType::Center);
$cell->setTextVerticalType(TextVerticalType::Vertical270);
# Sparar presentationen till disk
$pres->save("Vertical_Align_Text_out.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Ange textformatering på tabellnivå
- Skapa en instans av klassen Presentation .
- Hämta en slides referens via dess index.
- Kom åt ett Table‑objekt från bilden.
- Ställ in setFontHeight(float value) för texten.
- Ställ in setAlignment(int value) och setMarginRight(float value) .
- Ställ in setTextVerticalType(byte value) .
- Spara den modifierade presentationen.
# Skapar en instans av Presentation-klassen
$pres = new Presentation("simpletable.pptx");
try {
# Låt oss anta att den första formen på den första bilden är en tabell
$someTable = $pres->getSlides()->get_Item(0)->getShapes()->get_Item(0);
# Ställer in tabellcellernas fonthöjd
$portionFormat = new PortionFormat();
$portionFormat::setFontHeight(25);
$someTable->setTextFormat($portionFormat);
# Ställer in tabellcellernas textjustering och högermarginal i ett anrop
$paragraphFormat = new ParagraphFormat();
$paragraphFormat::setAlignment(TextAlignment->Right);
$paragraphFormat::setMarginRight(20);
$someTable->setTextFormat($paragraphFormat);
# Ställer in tabellcellernas vertikala texttyp
$textFrameFormat = new TextFrameFormat();
$textFrameFormat::setTextVerticalType(TextVerticalType::Vertical);
$someTable->setTextFormat($textFrameFormat);
$pres->save("result.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Hämta tabellstilsattribut
Aspose.Slides låter dig hämta stilattribut för en tabell så att du kan använda dessa detaljer för en annan tabell eller någon annanstans. Denna PHP‑kod visar hur du får stilattributen från en förinställd tabellstil:
$pres = new Presentation();
try {
$table = $pres->getSlides()->get_Item(0)->getShapes()->addTable(10, 10, array(100, 150 ), array(5, 5, 5 ));
$table->setStylePreset(TableStylePreset->DarkStyle1);// ändra standardstilens förinställda tema
$pres->save("table.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Lås bildförhållandet för en tabell
Bildförhållandet för en geometrisk form är förhållandet mellan dess storlekar i olika dimensioner. Aspose.Slides tillhandahåller metoden setAspectRatioLocked för att låta dig låsa bildförhållandet för tabeller och andra former.
$pres = new Presentation("pres.pptx");
try {
$table = $pres->getSlides()->get_Item(0)->getShapes()->get_Item(0);
echo("Lock aspect ratio set: " . $table->getGraphicalObjectLock()->getAspectRatioLocked());
$table->getGraphicalObjectLock()->setAspectRatioLocked(!$table->getGraphicalObjectLock()->getAspectRatioLocked());// invert
echo("Lock aspect ratio set: " . $table->getGraphicalObjectLock()->getAspectRatioLocked());
$pres->save("pres-out.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
FAQ
Kan jag aktivera läsriktning från höger till vänster (RTL) för en hel tabell och texten i dess celler?
Ja. Tabellen exponerar en setRightToLeft‑metod, och stycken har ParagraphFormat::setRightToLeft. Att använda båda säkerställer korrekt RTL‑ordning och rendering i cellerna.
Hur kan jag förhindra att användare flyttar eller ändrar storlek på en tabell i den slutgiltiga filen?
Använd lås på former för att inaktivera flytt, storleksändring, markering osv. Dessa lås gäller även för tabeller.
Stöds det att infoga en bild i en cell som bakgrund?
Ja. Du kan ange en picture fill för en cell; bilden kommer att täcka cellens område enligt det valda läget (sträckning eller mosaik).