จัดการตารางการนำเสนอใน PHP

บทนำ

ตารางใน PowerPoint เป็นวิธีที่มีประสิทธิภาพในการแสดงและสื่อสารข้อมูล ข้อมูลในตารางที่ประกอบด้วยเซลล์ (จัดเรียงเป็นแถวและคอลัมน์) มีความชัดเจนและเข้าใจง่าย

Aspose.Slides มีคลาส Table , Cell และประเภทอื่น ๆ ที่ช่วยให้คุณสร้าง, แก้ไขและจัดการตารางในงานนำเสนอทุกประเภท

Create a Table from Scratch

  1. สร้างอินสแตนซ์ของคลาส Presentation
  2. รับอ้างอิงของสไลด์ผ่านดัชนีของมัน
  3. กำหนดอาเรย์ของ columnWidth
  4. กำหนดอาเรย์ของ rowHeight
  5. เพิ่มออบเจกต์ Table ลงในสไลด์โดยใช้เมธอด addTable
  6. วนผ่านแต่ละ Cell เพื่อกำหนดรูปแบบเส้นขอบด้านบน, ด้านล่าง, ด้านขวาและด้านซ้าย
  7. รวมสองเซลล์แรกของแถวแรกในตาราง
  8. เข้าถึง TextFrame ของ Cell
  9. เพิ่มข้อความใน TextFrame
  10. บันทึกงานนำเสนอที่แก้ไขแล้ว

โค้ด PHP นี้แสดงวิธีสร้างตารางในงานนำเสนอ:

  # สร้างอินสแตนซ์ของคลาส Presentation ที่แทนไฟล์ PPTX
  $pres = new Presentation();
  try {
    # เข้าถึงสไลด์แรก
    $sld = $pres->getSlides()->get_Item(0);
    # กำหนดคอลัมน์พร้อมความกว้างและแถวพร้อมความสูง
    $dblCols = array(50, 50, 50 );
    $dblRows = array(50, 30, 30, 30, 30 );
    # เพิ่มรูปร่างตารางลงในสไลด์
    $tbl = $sld->getShapes()->addTable(100, 50, $dblCols, $dblRows);
    # ตั้งค่ารูปแบบเส้นขอบสำหรับแต่ละเซลล์
    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);
      }
    }
    # รวมเซลล์ที่ 1 และ 2 ของแถวที่ 1
    $tbl->mergeCells($tbl->getRows()->get_Item(0)->get_Item(0), $tbl->getRows()->get_Item(1)->get_Item(1), false);
    # เพิ่มข้อความบางส่วนลงในเซลล์ที่รวมกัน
    $tbl->getRows()->get_Item(0)->get_Item(0)->getTextFrame()->setText("Merged Cells");
    # บันทึกการนำเสนอลงดิสก์
    $pres->save("table.pptx", SaveFormat::Pptx);
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

Numbering in a Standard Table

ในตารางมาตรฐาน การจัดลำดับหมายเลขของเซลล์เป็นการนับจากศูนย์ เซลล์แรกในตารางมีดัชนีเป็น 0,0 (คอลัมน์ 0, แถว 0)

ตัวอย่างเช่น เซลล์ในตารางที่มี 4 คอลัมน์และ 4 แถวจะถูกนับดังนี้:

(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)

โค้ด PHP นี้แสดงวิธีระบุลำดับหมายเลขของเซลล์ในตาราง:

  # สร้างอินสแตนซ์ของคลาส Presentation ที่แทนไฟล์ PPTX
  $pres = new Presentation();
  try {
    # เข้าถึงสไลด์แรก
    $sld = $pres->getSlides()->get_Item(0);
    # กำหนดคอลัมน์พร้อมความกว้างและแถวพร้อมความสูง
    $dblCols = array(70, 70, 70, 70 );
    $dblRows = array(70, 70, 70, 70 );
    # เพิ่มรูปร่างตารางลงในสไลด์
    $tbl = $sld->getShapes()->addTable(100, 50, $dblCols, $dblRows);
    # ตั้งค่ารูปแบบเส้นขอบสำหรับแต่ละเซลล์
    $rows = $tbl->getRows();
    foreach($rows 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);
      }
    }
    # บันทึกการนำเสนอลงดิสก์
    $pres->save("StandardTables_out.pptx", SaveFormat::Pptx);
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

Access an Existing Table

  1. สร้างอินสแตนซ์ของคลาส Presentation

  2. รับอ้างอิงของสไลด์ที่มีตารางผ่านดัชนีของมัน

  3. สร้างอ็อบเจกต์ Table แล้วตั้งค่าเป็น null

  4. วนผ่านออบเจกต์ Shape ทั้งหมดจนกว่าจะพบตาราง

    หากคุณสงสัยว่ารูปที่กำลังทำงานอยู่มีเพียงตารางเดียว คุณสามารถตรวจสอบรูปทั้งหมดที่มันมีได้ เมื่อรูปถูกระบุว่าเป็นตาราง คุณสามารถแคสต์เป็นอ็อบเจกต์ Table แต่หากสไลด์มีหลายตาราง คุณควรค้นหาตารางที่ต้องการผ่าน setAlternativeText(String value)

  5. ใช้อ็อบเจกต์ Table เพื่อทำงานกับตาราง ในตัวอย่างด้านล่าง เราเพิ่มแถวใหม่ให้กับตาราง

  6. บันทึกงานนำเสนอที่แก้ไขแล้ว

โค้ด PHP นี้แสดงวิธีเข้าถึงและทำงานกับตารางที่มีอยู่:

  # สร้างอินสแตนซ์ของคลาส Presentation ที่แทนไฟล์ PPTX
  $pres = new Presentation("UpdateExistingTable.pptx");
  try {
    # เข้าถึงสไลด์แรก
    $sld = $pres->getSlides()->get_Item(0);
    # กำหนดค่าเริ่มต้นให้ TableEx เป็น null
    $tbl = null;
    # วนลูปผ่านรูปร่างทั้งหมดและตั้งค่าอ้างอิงไปยังตารางที่พบ
    $shapes = $sld->getShapes();
    foreach($shapes as $shp) {
      if (java_instanceof($shp, new JavaClass("com.aspose.slides.Table"))) {
        $tbl = $shp;
        # ตั้งค่าข้อความสำหรับคอลัมน์แรกของแถวที่สอง
        $tbl->get_Item(0, 1)->getTextFrame()->setText("New");
      }
    }
    # บันทึกการนำเสนอที่แก้ไขแล้วลงดิสก์
    $pres->save("table1_out.pptx", SaveFormat::Pptx);
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

Find the Cell That Owns a Text Frame

เมื่อโค้ดประมวลผลข้อความทั่วไปได้รับออบเจกต์ TextFrame จากตาราง ให้ใช้เมธอด TextFrame::getParentCell เพื่อดึง Cell เจ้าของ สำหรับ TextFrame ของเซลล์ตาราง, TextFrame::getParentCell จะคืนค่าเจ้าของและ TextFrame::getParentShape จะคืนค่า null แม้ว่าตารางเองเป็น Shape

พิกัดเซลล์สามารถเข้าถึงได้ผ่านเมธอดอ่าน‑เท่านั้น Cell::getFirstColumnIndex และ Cell::getFirstRowIndex TextFrame::getParentCell ยังให้การนำทางแบบอ่าน‑เท่านั้น: มันคืนค่าเจ้าของแต่ไม่เปลี่ยนความเป็นเจ้าของ ตรวจสอบว่าเซลล์ที่คืนมาไม่ใช่ java_is_null ก่อนใช้งานเสมอ

สำหรับตัวอย่างสมบูรณ์ที่ระบุเจ้าของของเซลล์ตารางและ Shape รวมถึง Shape ที่เชื่อมโยงกับโหนด SmartArt ให้ดูที่ Search and Replace Text

Align Text in a Table

  1. สร้างอินสแตนซ์ของคลาส Presentation
  2. รับอ้างอิงของสไลด์ผ่านดัชนีของมัน
  3. เพิ่มอ็อบเจกต์ Table ลงในสไลด์
  4. เข้าถึงอ็อบเจกต์ TextFrame จากตาราง
  5. เข้าถึง Paragraph
  6. จัดแนวข้อความในแนวตั้ง
  7. บันทึกงานนำเสนอที่แก้ไขแล้ว

โค้ด PHP นี้แสดงวิธีจัดแนวข้อความในตาราง:

  # สร้างอินสแตนซ์ของคลาส Presentation
  $pres = new Presentation();
  try {
    # ดึงสไลด์แรก
    $slide = $pres->getSlides()->get_Item(0);
    # กำหนดคอลัมน์พร้อมความกว้างและแถวพร้อมความสูง
    $dblCols = array(120, 120, 120, 120 );
    $dblRows = array(100, 100, 100, 100 );
    # เพิ่มรูปร่างตารางลงในสไลด์
    $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");
    # เข้าถึง TextFrame
    $txtFrame = $tbl->get_Item(0, 0)->getTextFrame();
    # สร้างอ็อบเจกต์ Paragraph สำหรับ TextFrame
    $paragraph = $txtFrame->getParagraphs()->get_Item(0);
    # สร้างอ็อบเจกต์ Portion สำหรับ Paragraph
    $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);
    # จัดแนวข้อความในแนวตั้ง
    $cell = $tbl->get_Item(0, 0);
    $cell->setTextAnchorType(TextAnchorType::Center);
    $cell->setTextVerticalType(TextVerticalType::Vertical270);
    # บันทึกการนำเสนอลงดิสก์
    $pres->save("Vertical_Align_Text_out.pptx", SaveFormat::Pptx);
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

Set Text Formatting on the Table Level

  1. สร้างอินสแตนซ์ของ คลาส Presentation
  2. รับอ้างอิงของสไลด์ผ่านดัชนีของมัน
  3. เข้าถึงอ็อบเจกต์ Table จากสไลด์
  4. ตั้งค่า setFontHeight(float value) สำหรับข้อความ
  5. ตั้งค่า setAlignment(int value) และ setMarginRight(float value)
  6. ตั้งค่า setTextVerticalType(byte value)
  7. บันทึกงานนำเสนอที่แก้ไขแล้ว

โค้ด PHP นี้แสดงวิธีปรับใช้ตัวเลือกการจัดรูปแบบที่คุณต้องการให้กับข้อความในตาราง:

  # สร้างอินสแตนซ์ของคลาส Presentation
  $pres = new Presentation("simpletable.pptx");
  try {
    # สมมติว่า shape แรกบนสไลด์แรกเป็นตาราง
    $someTable = $pres->getSlides()->get_Item(0)->getShapes()->get_Item(0);
    # ตั้งค่าความสูงของฟอนต์ในเซลล์ตาราง
    $portionFormat = new PortionFormat();
    $portionFormat::setFontHeight(25);
    $someTable->setTextFormat($portionFormat);
    # ตั้งค่าการจัดแนวข้อความและระยะขวาของเซลล์ตารางในหนึ่งคำสั่ง
    $paragraphFormat = new ParagraphFormat();
    $paragraphFormat::setAlignment(TextAlignment->Right);
    $paragraphFormat::setMarginRight(20);
    $someTable->setTextFormat($paragraphFormat);
    # ตั้งค่าชนิดการวางแนวข้อความในแนวตั้งของเซลล์ตาราง
    $textFrameFormat = new TextFrameFormat();
    $textFrameFormat::setTextVerticalType(TextVerticalType::Vertical);
    $someTable->setTextFormat($textFrameFormat);
    $pres->save("result.pptx", SaveFormat::Pptx);
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

Get Table Style Properties

Aspose.Slides ให้คุณดึงคุณสมบัติลักษณะของตารางเพื่อใช้กับตารางอื่นหรือในที่อื่น โค้ด PHP นี้แสดงวิธีดึงคุณสมบัติสไตล์จากตารางที่ใช้สไตล์กำหนดล่วงหน้า:

  $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);// เปลี่ยนธีมสไตล์พรีเซ็ตเริ่มต้น

    $pres->save("table.pptx", SaveFormat::Pptx);
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

Lock Aspect Ratio of a Table

อัตราส่วนของรูปร่างเรขาคณิตคือสัดส่วนของขนาดในมิติที่ต่างกัน Aspose.Slides มีเมธอด setAspectRatioLocked เพื่อให้คุณล็อกการตั้งค่าอัตราส่วนสำหรับตารางและรูปร่างอื่น ๆ

โค้ด PHP นี้แสดงวิธีล็อกอัตราส่วนของตาราง:

  $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

ฉันสามารถเปิดใช้งานทิศทางการอ่านจากขวาไปซ้าย (RTL) สำหรับทั้งตารางและข้อความในเซลล์ได้หรือไม่?
ใช่ ตารางเปิดเผยเมธอด setRightToLeft และพารากราฟมี ParagraphFormat::setRightToLeft การใช้ทั้งสองจะทำให้ลำดับ RTL ถูกต้องและแสดงผลภายในเซลล์ได้ถูกต้อง

ฉันจะป้องกันผู้ใช้จากการย้ายหรือปรับขนาดตารางในไฟล์สุดท้ายได้อย่างไร?
ใช้การล็อกรูปเพื่อปิดการย้าย, ปรับขนาด, เลือก ฯลฯ การล็อกเหล่านี้ใช้ได้กับตารางเช่นกัน

การแทรกรูปภาพเป็นพื้นหลังภายในเซลล์ได้รับการสนับสนุนหรือไม่?
ใช่ คุณสามารถตั้งค่า picture fill ให้กับเซลล์ได้ ภาพจะครอบพื้นที่เซลล์ตามโมดที่เลือก (ขยายหรือเปลี่ยนเป็นกระเบื้อง)