จัดการเซลล์ตารางในงานนำเสนอด้วย .NET
ภาพรวม
Aspose.Slides ช่วยให้คุณสามารถเข้าถึงและแก้ไขเซลล์ตารางในงานนำเสนอ PowerPoint ได้ บทความนี้อธิบายวิธีระบุเซลล์ตารางที่ถูกผสาน, ลบขอบเซลล์, ทำงานกับการจัดลำดับเซลล์หลังจากการผสานหรือแยกเซลล์, เปลี่ยนสีพื้นหลังของเซลล์, และเพิ่มรูปภาพภายในเซลล์ตาราง ตัวอย่างแสดงวิธีสร้างหรือเปิดงานนำเสนอ, ดึงตารางจากสไลด์, ปรับรูปแบบเซลล์ผ่านคุณสมบัติของเซลล์, และบันทึกงานนำเสนอที่แก้ไขเป็นไฟล์ PPTX
Aspose.Slides ใช้ดัชนีเริ่มจากศูนย์เพื่อเข้าถึงเซลล์ตารางตามลำดับ (column, row).
ระบุเซลล์ตารางที่ผสาน
ตัวอย่างเปิดงานนำเสนอที่มีอยู่และเข้าถึงรูปแบบแรกบนสไลด์แรกเป็นตาราง โดยสมมติว่าสไลด์และรูปแบบนั้นมีอยู่และรูปแบบเป็นตาราง จากนั้นวนลูปผ่านทุกแถวและคอลัมน์และใช้ IsMergedCell เพื่อระบุเซลล์ในพื้นที่ที่ผสาน สำหรับแต่ละที่ตรงกันจะแสดงพิกัดของเซลล์ในรูปแบบ row;column , RowSpan, ColSpan, และพิกัดเริ่มต้นของบริเวณนั้น ได้แก่ FirstRowIndex และ FirstColumnIndex.
using System;
using Aspose.Slides;
using var presentation = new Presentation("presentation_with_table.pptx");
var slide = presentation.Slides[0];
var table = (ITable) slide.Shapes[0];
var rowCount = table.Rows.Count;
for (var rowIndex = 0; rowIndex < rowCount; rowIndex++)
{
var columnCount = table.Columns.Count;
for (var columnIndex = 0; columnIndex < columnCount; columnIndex++)
{
var cell = table[columnIndex, rowIndex];
if (cell.IsMergedCell)
{
Console.WriteLine($"Cell {rowIndex};{columnIndex} belongs to a merged region with RowSpan={cell.RowSpan} and ColSpan={cell.ColSpan} starting at {cell.FirstRowIndex};{cell.FirstColumnIndex}.");
}
}
}
ลบขอบเซลล์ตาราง
สร้าง Presentation และเพิ่มตารางไปยังสไลด์แรกด้วย AddTable. ความกว้างของคอลัมน์, ความสูงของแถว, และตำแหน่งของตารางถูกกำหนดเป็นจุด ตัวอย่างตั้งค่าขอบเซลล์สี่ด้านทั้งหมดเป็น FillType.NoFill, ทำให้ขอบไม่ปรากฏ.
using Aspose.Slides;
using var presentation = new Presentation();
var slide = presentation.Slides[0];
double[] columnWidths = { 50, 50, 50, 50 };
double[] rowHeights = { 50, 30, 30, 30, 30 };
var table = slide.Shapes.AddTable(100, 50, columnWidths, rowHeights);
foreach (var row in table.Rows)
foreach (var cell in row)
{
cell.CellFormat.BorderTop.FillFormat.FillType = FillType.NoFill;
cell.CellFormat.BorderBottom.FillFormat.FillType = FillType.NoFill;
cell.CellFormat.BorderLeft.FillFormat.FillType = FillType.NoFill;
cell.CellFormat.BorderRight.FillFormat.FillType = FillType.NoFill;
}
presentation.Save("table.pptx", SaveFormat.Pptx);
ผสานเซลล์ตาราง
ใช้ MergeCells เพื่อรวมช่วงสี่เหลี่ยมของเซลล์ตารางเป็นเซลล์เดียว ระบุเซลล์ที่มุมซ้ายบนและมุมขวาล่างของช่วง อาร์กิวเมนต์สุดท้ายควบคุมว่าการผสานอาจรวมเซลล์นอกช่วงที่กำหนดหรือไม่; false จะทำให้การผสานอยู่ภายในช่วงนั้นเท่านั้น.
ตัวอย่างสร้างตารางขนาด 4x4 โดยมีคอลัมน์และแถวที่มีความกว้าง/ความสูง 70 จุด แล้วผสานเซลล์กลางสี่เซลล์จาก (1, 1) ถึง (2, 2). เซลล์ที่ได้จะครอบคลุมสองคอลัมน์และสองแถว ในขณะที่กริดพื้นฐานของตารางยังคงมีสี่คอลัมน์และสี่แถว เพื่อเข้าถึงเนื้อหาหรือรูปแบบของเซลล์ที่ผสาน ให้ใช้ตำแหน่งบนซ้าย: table[1, 1] ในตัวอย่างนี้ ตำแหน่งอื่นในช่วงที่ผสานยังคงเป็นส่วนหนึ่งของกริดตาราง ดังนั้นดัชนีของเซลล์นอกช่วงจะไม่ได้เปลี่ยนแปลง.
using Aspose.Slides;
using Aspose.Slides.Export;
using var presentation = new Presentation();
var slide = presentation.Slides[0];
double[] columnWidths = { 70, 70, 70, 70 };
double[] rowHeights = { 70, 70, 70, 70 };
var table = slide.Shapes.AddTable(100, 50, columnWidths, rowHeights);
table.MergeCells(table[1, 1], table[2, 2], false);
presentation.Save("merged_cells.pptx", SaveFormat.Pptx);
แยกเซลล์ตาราง
การผสานเซลล์ในตัวอย่างก่อนหน้ารักษาโครงสร้างกริดของตาราง การแยกเซลล์อาจทำให้เกิดคอลัมน์กริดใหม่และเปลี่ยนดัชนีคอลัมน์ของเซลล์ทางขวา Aspose.Slides ปฏิบัติตามโมเดลกริดของตารางใน PowerPoint.
ตัวอย่างนี้สร้างตารางขนาด 4x4 โดยมีคอลัมน์และแถวที่มีขนาด 70 จุดและเรียกใช้ SplitByWidth บนเซลล์ (1, 1). ครึ่งหนึ่งของความกว้าง 70 จุดของเซลล์จะถูกใช้เพื่อสร้างเซลล์สองเซลล์ที่มีความกว้างเท่ากัน.
หลังจากการแยกนี้ ครึ่งสองส่วนจะเข้าถึงได้โดยใช้ table[1, 1] และ table[2, 1]. ตอนนี้กริดของตารางมีห้าคอลัมน์: เซลล์ที่เดิมอยู่ในคอลัมน์ 2 และ 3 จะย้ายไปที่คอลัมน์ 3 และ 4 ตามลำดับ ดัชนีแถวไม่เปลี่ยนแปลง ใช้ดัชนีคอลัมน์ที่อัปเดตนี้เมื่อต้องการเข้าถึงเซลล์หลังการแยก.
using System.Drawing;
using Aspose.Slides;
using Aspose.Slides.Export;
using var presentation = new Presentation();
var slide = presentation.Slides[0];
double[] columnWidths = { 70, 70, 70, 70 };
double[] rowHeights = { 70, 70, 70, 70 };
var table = slide.Shapes.AddTable(100, 50, columnWidths, rowHeights);
table[1, 1].SplitByWidth(table[1, 1].Width / 2);
presentation.Save("split_cells.pptx", SaveFormat.Pptx);
แยกเซลล์ที่ผสานตามการครอบคลุมแถวหรือคอลัมน์
เพื่อเตรียมเซลล์เทมเพลตที่ผสานสำหรับการเติมข้อมูล ให้ใช้ SplitByRowSpan เพื่อแยกตามขอบแถวที่มีอยู่ หรือ SplitByColSpan เพื่อแยกตามขอบคอลัมน์.
อาร์กิวเมนต์ index จะนับแถวในส่วนบนหรือคอลัมน์ในส่วนซ้ายของการแยก; มันสัมพันธ์กับพื้นที่ที่ผสาน:
ตัวอย่างคาดว่างานนำเสนอมีตารางเป็นรูปแบบแรกบนสไลด์แรก โดยมีเซลล์ (1, 2) และ (1, 3) ผสานแนวตั้ง เริ่มจากตำแหน่งล่าง จะใช้ FirstColumnIndex และ FirstRowIndex เพื่อหาแหล่งกำเนิดและตรวจสอบการครอบคลุมทั้งสองแบบ SplitByRowSpan(1) จะทำการแยกแถวที่ 2 และ 3 สำหรับชื่อสินค้า สำหรับการผสานสองคอลัมน์แนวนอน ให้ใช้ SplitByColSpan(1) แทน.
using System;
using Aspose.Slides;
using Aspose.Slides.Export;
using var presentation = new Presentation("table_template.pptx");
var slide = presentation.Slides[0];
var table = (ITable) slide.Shapes[0];
var selectedCell = table[1, 3];
var firstColumnIndex = selectedCell.FirstColumnIndex;
var firstRowIndex = selectedCell.FirstRowIndex;
var mergedCell = table[firstColumnIndex, firstRowIndex];
if (mergedCell.IsMergedCell && mergedCell.RowSpan == 2 && mergedCell.ColSpan == 1)
{
mergedCell.SplitByRowSpan(1);
// ดึงเซลล์ที่ได้จากตารางหลังจากการแยก.
var upperCell = table[firstColumnIndex, firstRowIndex];
var lowerCell = table[firstColumnIndex, firstRowIndex + 1];
Console.WriteLine($"Upper cell merged: {upperCell.IsMergedCell}");
Console.WriteLine($"Lower cell merged: {lowerCell.IsMergedCell}");
upperCell.TextFrame.Text = "Product A";
lowerCell.TextFrame.Text = "Product B";
presentation.Save("split_template.pptx", SaveFormat.Pptx);
}
else
{
Console.WriteLine("Select a merged region spanning exactly two rows and one column.");
}
กริดของตารางและดัชนีเซลล์โดยรอบยังคงไม่เปลี่ยนแปลง ดึงเซลล์ที่ได้โดยใช้พิกัดของมัน; ที่นี่ทั้งสองเซลล์มีการครอบคลุมเป็น 1 และ IsMergedCell แสดงผล False. พื้นที่ที่ใหญ่กว่าอาจยังคงผสานบางส่วนหลังจากการแยกครั้งหนึ่ง.
ข้อความต้นฉบับและรูปแบบของมันยังคงอยู่ในเซลล์บน (หรือซ้าย); เซลล์ใหม่เป็นค่าว่างแต่สืบทอดรูปแบบเซลล์เช่นการเติม, ขอบ, และระยะขอบ เติมข้อมูลลงในเซลล์หลังการแยกและตั้งค่าการจัดรูปแบบข้อความที่ต้องการอย่างชัดเจน.
งานนำเสนอที่บันทึกแล้วจะมีเซลล์แยกกันสำหรับ “Product A” และ “Product B” พร้อมกับรูปแบบเซลล์ของเทมเพลตที่คงไว้ ดูที่ Cell API Reference สำหรับรายละเอียด.
เปลี่ยนสีพื้นหลังของเซลล์ตาราง
ตัวอย่างนี้สร้างตารางโดยมีคอลัมน์ขนาด 150 จุดและแถวขนาด 50 จุด ตั้งค่า FillType เป็นแบบสีทึบและ SolidFillColor เป็นสีแดงสำหรับเซลล์ (2, 3), ซึ่งอยู่ในคอลัมน์ที่สามและแถวที่สี่.
using System.Drawing;
using Aspose.Slides;
using Aspose.Slides.Export;
using var presentation = new Presentation();
var slide = presentation.Slides[0];
double[] columnWidths = { 150, 150, 150, 150 };
double[] rowHeights = { 50, 50, 50, 50, 50 };
var table = slide.Shapes.AddTable(50, 50, columnWidths, rowHeights);
var cell = table[2, 3];
cell.CellFormat.FillFormat.FillType = FillType.Solid;
cell.CellFormat.FillFormat.SolidFillColor.Color = Color.Red;
presentation.Save("cell_background_color.pptx", SaveFormat.Pptx);
เพิ่มรูปภาพภายในเซลล์ตาราง
วางรูปภาพอินพุตไว้ในไดเรกทอรีทำงานก่อนรันตัวอย่างนี้ โปรแกรมจะโหลดรูปภาพด้วย Images.FromFile และเพิ่มลงในคอล렉ชันรูปภาพของงานนำเสนอด้วย AddImage. จากนั้นจะกำหนดรูปภาพให้กับการเติมภาพของเซลล์ (0, 0), เซลล์แรกของตาราง.
PictureFillMode.Stretch ขยายรูปภาพให้เต็มเซลล์ ซึ่งอาจเปลี่ยนสัดส่วนของรูป ความกว้างของคอลัมน์และความสูงของแถวเป็นหน่วยจุด รูปภาพที่โหลดจะถูกทำลายโดยอัตโนมัติโดยคำสั่ง using.
using Aspose.Slides;
using Aspose.Slides.Export;
using var presentation = new Presentation();
var slide = presentation.Slides[0];
double[] columnWidths = { 150, 150, 150, 150 };
double[] rowHeights = { 100, 100, 100, 100, 90 };
var table = slide.Shapes.AddTable(50, 50, columnWidths, rowHeights);
using var image = Images.FromFile("aspose_logo.jpg");
var ppImage = presentation.Images.AddImage(image);
table[0, 0].CellFormat.FillFormat.FillType = FillType.Picture;
table[0, 0].CellFormat.FillFormat.PictureFillFormat.PictureFillMode = PictureFillMode.Stretch;
table[0, 0].CellFormat.FillFormat.PictureFillFormat.Picture.Image = ppImage;
presentation.Save("table_cell_with_image.pptx", SaveFormat.Pptx);
คำถามที่พบบ่อย
ฉันสามารถตั้งความหนาและสไตล์ของเส้นขอบที่แตกต่างกันสำหรับแต่ละด้านของเซลล์เดียวได้หรือไม่?
ใช่. The ด้านบน/ด้านล่าง/ด้านซ้าย/ด้านขวา borders have separate properties, so the thickness and style of each side can differ.
อะไรจะเกิดขึ้นกับรูปภาพหากฉันเปลี่ยนขนาดคอลัมน์/แถวหลังจากตั้งรูปเป็นพื้นหลังของเซลล์?
พฤติกรรมขึ้นอยู่กับ โหมดการเติม (stretch/tile). หากใช้การยืดรูปภาพจะปรับให้เข้ากับเซลล์ใหม่; หากใช้การต_tile รูปภาพย่อยจะถูกคำนวณใหม่.
ฉันสามารถกำหนดไฮเปอร์ลิงก์ให้กับเนื้อหาทั้งหมดของเซลล์ได้หรือไม่?
ไฮเปอร์ลิงก์ ถูกตั้งค่าที่ระดับข้อความ (portion) ภายในกรอบข้อความของเซลล์หรือที่ระดับของตาราง/รูปทั้งหมด ในการปฏิบัติคุณจะกำหนดลิงก์ให้กับส่วนหนึ่งหรือให้กับข้อความทั้งหมดในเซลล์.
ฉันสามารถตั้งค่าฟอนต์ที่แตกต่างกันภายในเซลล์เดียวได้หรือไม่?
ใช่. A cell’s text frame supports ส่วนข้อความ (runs) with independent formatting—font family, style, size, and color.