管理单元格
Contents
[
Hide
]
识别合并的表格单元格
- 创建 Presentation 类的实例。
- 从第一个幻灯片获取表格。
- 遍历表格的行和列以查找合并的单元格。
- 当找到合并单元格时,打印消息。
这段 PHP 代码向您展示了如何识别演示文稿中的合并表格单元格:
$pres = new Presentation("SomePresentationWithTable.pptx");
try {
$table = $pres->getSlides()->get_Item(0)->getShapes()->get_Item(0);// 假设 Slide#0.Shape#0 是一个表格
for($i = 0; $i < java_values($table->getRows()->size()) ; $i++) {
for($j = 0; $j < java_values($table->getColumns()->size()) ; $j++) {
$currentCell = $table->getRows()->get_Item($i)->get_Item($j);
if ($currentCell->isMergedCell()) {
echo(sprintf("单元格 %d;%d 是合并单元格的一部分,行跨越=%d,列跨越=%d,从单元格 %d;%d 开始。", $i, $j, $currentCell->getRowSpan(), $currentCell->getColSpan(), $currentCell->getFirstRowIndex(), $currentCell->getFirstColumnIndex()));
}
}
}
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
移除表格单元格边框
- 创建 Presentation 类的实例。
- 通过索引获取幻灯片的引用。
- 定义一个宽度的列数组。
- 定义一个高度的行数组。
- 通过 addTable 方法将表格添加到幻灯片中。
- 遍历每个单元格以清除顶部、底部、右侧和左侧的边框。
- 将修改后的演示文稿保存为 PPTX 文件。
这段 PHP 代码向您展示了如何移除表格单元格的边框:
# 实例化表示 PPTX 文件的 Presentation 类
$pres = new Presentation();
try {
# 访问第一个幻灯片
$sld = $pres->getSlides()->get_Item(0);
# 定义列的宽度和行的高度
$dblCols = array(50, 50, 50, 50 );
$dblRows = array(50, 30, 30, 30, 30 );
# 将表格形状添加到幻灯片
$tbl = $sld->getShapes()->addTable(100, 50, $dblCols, $dblRows);
# 设置每个单元格的边框格式
foreach($tbl->getRows() as $row) {
foreach($row as $cell) {
$cell->getCellFormat()->getBorderTop()->getFillFormat()->setFillType(FillType::NoFill);
$cell->getCellFormat()->getBorderBottom()->getFillFormat()->setFillType(FillType::NoFill);
$cell->getCellFormat()->getBorderLeft()->getFillFormat()->setFillType(FillType::NoFill);
$cell->getCellFormat()->getBorderRight()->getFillFormat()->setFillType(FillType::NoFill);
}
}
# 将 PPTX 写入磁盘
$pres->save("table_out.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
合并单元格中的编号
如果我们合并 2 对单元格 (1, 1) x (2, 1) 和 (1, 2) x (2, 2),得到的表格将会编号。这段 PHP 代码演示了这个过程:
# 实例化表示 PPTX 文件的 Presentation 类
$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);
# 设置每个单元格的边框格式
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);
}
}
# 合并单元格 (1, 1) x (2, 1)
$tbl->mergeCells($tbl->get_Item(1, 1), $tbl->get_Item(2, 1), false);
# 合并单元格 (1, 2) x (2, 2)
$tbl->mergeCells($tbl->get_Item(1, 2), $tbl->get_Item(2, 2), false);
$pres->save("MergeCells_out.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
然后我们通过合并 (1, 1) 和 (1, 2) 进一步合并单元格。结果是一个表格,在其中心包含一个大的合并单元格:
# 实例化表示 PPTX 文件的 Presentation 类
$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);
# 设置每个单元格的边框格式
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);
}
}
# 合并单元格 (1, 1) x (2, 1)
$tbl->mergeCells($tbl->get_Item(1, 1), $tbl->get_Item(2, 1), false);
# 合并单元格 (1, 2) x (2, 2)
$tbl->mergeCells($tbl->get_Item(1, 2), $tbl->get_Item(2, 2), false);
# 合并单元格 (1, 1) x (1, 2)
$tbl->mergeCells($tbl->get_Item(1, 1), $tbl->get_Item(1, 2), true);
# 将 PPTX 文件写入磁盘
$pres->save("MergeCells_out.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
拆分单元格中的编号
在之前的示例中,当表格单元格被合并时,其他单元格中的编号或数字系统并没有改变。
这一次,我们取一个普通表格(没有合并单元格的表格),然后尝试拆分单元格 (1,1),以获取一个特殊表格。你可能想要注意这个表格的编号,这可能被认为是奇怪的。然而,这就是微软 PowerPoint 编号表格单元格的方式,Aspose.Slides 也同样如此。
这段 PHP 代码演示了我们描述的过程:
# 实例化表示 PPTX 文件的 Presentation 类
$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);
# 设置每个单元格的边框格式
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);
}
}
# 合并单元格 (1, 1) x (2, 1)
$tbl->mergeCells($tbl->get_Item(1, 1), $tbl->get_Item(2, 1), false);
# 合并单元格 (1, 2) x (2, 2)
$tbl->mergeCells($tbl->get_Item(1, 2), $tbl->get_Item(2, 2), false);
# 拆分单元格 (1, 1)
$tbl->get_Item(1, 1)->splitByWidth($tbl->get_Item(2, 1)->getWidth() / 2);
# 将 PPTX 文件写入磁盘
$pres->save("SplitCells_out.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
更改表格单元格背景颜色
这段 PHP 代码向您展示了如何更改表格单元格的背景颜色:
$presentation = new Presentation();
try {
$slide = $presentation->getSlides()->get_Item(0);
$dblCols = array(150, 150, 150, 150 );
$dblRows = array(50, 50, 50, 50, 50 );
# 创建一个新表
$table = $slide->getShapes()->addTable(50, 50, $dblCols, $dblRows);
# 设置单元格的背景颜色
$cell = $table->get_Item(2, 3);
$cell->getCellFormat()->getFillFormat()->setFillType(FillType::Solid);
$cell->getCellFormat()->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->RED);
$presentation->save("cell_background_color.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($presentation)) {
$presentation->dispose();
}
}
在表格单元格内添加图像
- 创建 Presentation 类的实例。
- 通过索引获取幻灯片的引用。
- 定义一个宽度的列数组。
- 定义一个高度的行数组。
- 通过 AddTable 方法将表格添加到幻灯片中。
- 创建一个
Images
对象来保存图像文件。 - 将
IImage
图像添加到IPPImage
对象。 - 将表格单元格的
FillFormat
设置为Picture
。 - 将图像添加到表格的第一个单元格。
- 将修改后的演示文稿保存为 PPTX 文件。
这段 PHP 代码向您展示了在创建表格时如何将图像放置在表格单元格内:
# 实例化表示 PPTX 文件的 Presentation 类
$pres = new Presentation();
try {
# 访问第一个幻灯片
$islide = $pres->getSlides()->get_Item(0);
# 定义列的宽度和行的高度
$dblCols = array(150, 150, 150, 150 );
$dblRows = array(100, 100, 100, 100, 90 );
# 将表格形状添加到幻灯片
$tbl = $islide->getShapes()->addTable(50, 50, $dblCols, $dblRows);
# 使用图像文件创建 IPPImage 对象
$picture;
$image = Images->fromFile("image.jpg");
try {
$picture = $pres->getImages()->addImage($image);
} finally {
if (!java_is_null($image)) {
$image->dispose();
}
}
# 将图像添加到第一个表格单元格
$cellFormat = $tbl->get_Item(0, 0)->getCellFormat();
$cellFormat::getFillFormat()->setFillType(FillType::Picture);
$cellFormat::getFillFormat()->getPictureFillFormat()->setPictureFillMode(PictureFillMode->Stretch);
$cellFormat::getFillFormat()->getPictureFillFormat()->getPicture()->setImage($picture);
# 将 PPTX 文件写入磁盘
$pres->save("Image_In_TableCell_out.pptx", SaveFormat::Pptx);
} catch (JavaException $e) {
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}