管理单元格
识别合并的表格单元格
- 创建 Presentation 类的实例。
- 从第一张幻灯片获取表格。
- 遍历表格的行和列以查找合并单元格。
- 当检测到合并单元格时输出消息。
以下 JavaScript 代码演示了如何在演示文稿中识别合并的表格单元格:
var pres = new aspose.slides.Presentation("SomePresentationWithTable.pptx");
try {
var table = pres.getSlides().get_Item(0).getShapes().get_Item(0);// 假设 Slide#0.Shape#0 是一个表格
for (var i = 0; i < table.getRows().size(); i++) {
for (var j = 0; j < table.getColumns().size(); j++) {
var currentCell = table.getRows().get_Item(i).get_Item(j);
if (currentCell.isMergedCell()) {
console.log(java.callStaticMethodSync("java.lang.String", "format", "Cell %d;%d is a part of merged cell with RowSpan=%d and ColSpan=%d starting from Cell %d;%d.", i, j, currentCell.getRowSpan(), currentCell.getColSpan(), currentCell.getFirstRowIndex(), currentCell.getFirstColumnIndex()));
}
}
}
} finally {
if (pres != null) {
pres.dispose();
}
}
移除表格单元格边框
- 创建 Presentation 类的实例。
- 通过索引获取幻灯片的引用。
- 定义列宽数组。
- 定义行高数组。
- 通过 addTable 方法向幻灯片添加表格。
- 遍历每个单元格以清除上、下、右、左边框。
- 将修改后的演示文稿保存为 PPTX 文件。
以下 JavaScript 代码演示了如何移除表格单元格的边框:
// 实例化表示 PPTX 文件的 Presentation 类
var pres = new aspose.slides.Presentation();
try {
// 访问第一张幻灯片
var sld = pres.getSlides().get_Item(0);
// 定义列宽和行高
var dblCols = java.newArray("double", [50, 50, 50, 50]);
var dblRows = java.newArray("double", [50, 30, 30, 30, 30]);
// 向幻灯片添加表格形状
var tbl = sld.getShapes().addTable(100, 50, dblCols, dblRows);
// 为每个单元格设置边框格式
for (let i = 0; i < tbl.getRows().size(); i++) {
const row = tbl.getRows().get_Item(i);
for (let j = 0; j < row.size(); j++) {
const cell = row.get_Item(j);
cell.getCellFormat().getBorderTop().getFillFormat().setFillType(java.newByte(aspose.slides.FillType.NoFill));
cell.getCellFormat().getBorderBottom().getFillFormat().setFillType(java.newByte(aspose.slides.FillType.NoFill));
cell.getCellFormat().getBorderLeft().getFillFormat().setFillType(java.newByte(aspose.slides.FillType.NoFill));
cell.getCellFormat().getBorderRight().getFillFormat().setFillType(java.newByte(aspose.slides.FillType.NoFill));
}
}
// 将 PPTX 写入磁盘
pres.save("table_out.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
if (pres != null) {
pres.dispose();
}
}
合并单元格中的编号
如果我们合并两对单元格 (1, 1) 与 (2, 1) 以及 (1, 2) 与 (2, 2),得到的表格将带有编号。以下 JavaScript 代码演示了此过程:
// 实例化表示 PPTX 文件的 Presentation 类
var pres = new aspose.slides.Presentation();
try {
// 访问第一张幻灯片
var sld = pres.getSlides().get_Item(0);
// 定义列宽和行高
var dblCols = java.newArray("double", [70, 70, 70, 70]);
var dblRows = java.newArray("double", [70, 70, 70, 70]);
// 向幻灯片添加表格形状
var tbl = sld.getShapes().addTable(100, 50, dblCols, dblRows);
// 为每个单元格设置边框格式
for (let i = 0; i < tbl.getRows().size(); i++) {
const row = tbl.getRows().get_Item(i);
for (let j = 0; j < row.size(); j++) {
const cell = row.get_Item(j);
cell.getCellFormat().getBorderTop().getFillFormat().setFillType(java.newByte(aspose.slides.FillType.Solid));
cell.getCellFormat().getBorderTop().getFillFormat().getSolidFillColor().setColor(java.getStaticFieldValue("java.awt.Color", "RED"));
cell.getCellFormat().getBorderTop().setWidth(5);
cell.getCellFormat().getBorderBottom().getFillFormat().setFillType(java.newByte(aspose.slides.FillType.Solid));
cell.getCellFormat().getBorderBottom().getFillFormat().getSolidFillColor().setColor(java.getStaticFieldValue("java.awt.Color", "RED"));
cell.getCellFormat().getBorderBottom().setWidth(5);
cell.getCellFormat().getBorderLeft().getFillFormat().setFillType(java.newByte(aspose.slides.FillType.Solid));
cell.getCellFormat().getBorderLeft().getFillFormat().getSolidFillColor().setColor(java.getStaticFieldValue("java.awt.Color", "RED"));
cell.getCellFormat().getBorderLeft().setWidth(5);
cell.getCellFormat().getBorderRight().getFillFormat().setFillType(java.newByte(aspose.slides.FillType.Solid));
cell.getCellFormat().getBorderRight().getFillFormat().getSolidFillColor().setColor(java.getStaticFieldValue("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", aspose.slides.SaveFormat.Pptx);
} finally {
if (pres != null) {
pres.dispose();
}
}
随后我们进一步合并单元格 (1, 1) 与 (1, 2)。结果是表格中心出现一个大的合并单元格:
// 实例化表示 PPTX 文件的 Presentation 类
var pres = new aspose.slides.Presentation();
try {
// 访问第一张幻灯片
var sld = pres.getSlides().get_Item(0);
// 定义列宽和行高
var dblCols = java.newArray("double", [70, 70, 70, 70]);
var dblRows = java.newArray("double", [70, 70, 70, 70]);
// 向幻灯片添加表格形状
var tbl = sld.getShapes().addTable(100, 50, dblCols, dblRows);
// 为每个单元格设置边框格式
for (let i = 0; i < tbl.getRows().size(); i++) {
const row = tbl.getRows().get_Item(i);
for (let j = 0; j < row.size(); j++) {
const cell = row.get_Item(j);
cell.getCellFormat().getBorderTop().getFillFormat().setFillType(java.newByte(aspose.slides.FillType.Solid));
cell.getCellFormat().getBorderTop().getFillFormat().getSolidFillColor().setColor(java.getStaticFieldValue("java.awt.Color", "RED"));
cell.getCellFormat().getBorderTop().setWidth(5);
cell.getCellFormat().getBorderBottom().getFillFormat().setFillType(java.newByte(aspose.slides.FillType.Solid));
cell.getCellFormat().getBorderBottom().getFillFormat().getSolidFillColor().setColor(java.getStaticFieldValue("java.awt.Color", "RED"));
cell.getCellFormat().getBorderBottom().setWidth(5);
cell.getCellFormat().getBorderLeft().getFillFormat().setFillType(java.newByte(aspose.slides.FillType.Solid));
cell.getCellFormat().getBorderLeft().getFillFormat().getSolidFillColor().setColor(java.getStaticFieldValue("java.awt.Color", "RED"));
cell.getCellFormat().getBorderLeft().setWidth(5);
cell.getCellFormat().getBorderRight().getFillFormat().setFillType(java.newByte(aspose.slides.FillType.Solid));
cell.getCellFormat().getBorderRight().getFillFormat().getSolidFillColor().setColor(java.getStaticFieldValue("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", aspose.slides.SaveFormat.Pptx);
} finally {
if (pres != null) {
pres.dispose();
}
}
拆分单元格中的编号
在之前的示例中,表格单元格合并后,其他单元格的编号或编号系统保持不变。
这次,我们使用一个普通表格(没有合并单元格的表格),然后尝试拆分单元格 (1,1) 来得到一个特殊的表格。您可能需要注意该表格的编号方式,看起来可能有些奇怪。不过,这正是 Microsoft PowerPoint 对表格单元格进行编号的方式,Aspose.Slides 也遵循同样的规则。
以下 JavaScript 代码演示了上述过程:
// 实例化表示 PPTX 文件的 Presentation 类
var pres = new aspose.slides.Presentation();
try {
// 访问第一张幻灯片
var sld = pres.getSlides().get_Item(0);
// 定义列宽和行高
var dblCols = java.newArray("double", [70, 70, 70, 70]);
var dblRows = java.newArray("double", [70, 70, 70, 70]);
// 向幻灯片添加表格形状
var tbl = sld.getShapes().addTable(100, 50, dblCols, dblRows);
// 为每个单元格设置边框格式
for (let i = 0; i < tbl.getRows().size(); i++) {
const row = tbl.getRows().get_Item(i);
for (let j = 0; j < row.size(); j++) {
const cell = row.get_Item(j);
cell.getCellFormat().getBorderTop().getFillFormat().setFillType(java.newByte(aspose.slides.FillType.Solid));
cell.getCellFormat().getBorderTop().getFillFormat().getSolidFillColor().setColor(java.getStaticFieldValue("java.awt.Color", "RED"));
cell.getCellFormat().getBorderTop().setWidth(5);
cell.getCellFormat().getBorderBottom().getFillFormat().setFillType(java.newByte(aspose.slides.FillType.Solid));
cell.getCellFormat().getBorderBottom().getFillFormat().getSolidFillColor().setColor(java.getStaticFieldValue("java.awt.Color", "RED"));
cell.getCellFormat().getBorderBottom().setWidth(5);
cell.getCellFormat().getBorderLeft().getFillFormat().setFillType(java.newByte(aspose.slides.FillType.Solid));
cell.getCellFormat().getBorderLeft().getFillFormat().getSolidFillColor().setColor(java.getStaticFieldValue("java.awt.Color", "RED"));
cell.getCellFormat().getBorderLeft().setWidth(5);
cell.getCellFormat().getBorderRight().getFillFormat().setFillType(java.newByte(aspose.slides.FillType.Solid));
cell.getCellFormat().getBorderRight().getFillFormat().getSolidFillColor().setColor(java.getStaticFieldValue("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", aspose.slides.SaveFormat.Pptx);
} finally {
if (pres != null) {
pres.dispose();
}
}
更改表格单元格背景颜色
以下 JavaScript 代码演示了如何更改表格单元格的背景颜色:
var presentation = new aspose.slides.Presentation();
try {
var slide = presentation.getSlides().get_Item(0);
var dblCols = java.newArray("double", [150, 150, 150, 150]);
var dblRows = java.newArray("double", [50, 50, 50, 50, 50]);
// 创建新表格
var table = slide.getShapes().addTable(50, 50, dblCols, dblRows);
// 设置单元格的背景颜色
var cell = table.get_Item(2, 3);
cell.getCellFormat().getFillFormat().setFillType(java.newByte(aspose.slides.FillType.Solid));
cell.getCellFormat().getFillFormat().getSolidFillColor().setColor(java.getStaticFieldValue("java.awt.Color", "RED"));
presentation.save("cell_background_color.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
if (presentation != null) {
presentation.dispose();
}
}
在表格单元格内添加图像
- 创建 Presentation 类的实例。
- 通过索引获取幻灯片的引用。
- 定义列宽数组。
- 定义行高数组。
- 通过 addTable 方法向幻灯片添加表格。
- 创建
Images对象以保存图像文件。 - 将
IImage图像添加到PPImage对象。 - 将表格单元格的
FillFormat设置为Picture。 - 将图像添加到表格的第一个单元格。
- 将修改后的演示文稿保存为 PPTX 文件
以下 JavaScript 代码演示了在创建表格时如何在表格单元格内放置图像:
// 实例化表示 PPTX 文件的 Presentation 类
var pres = new aspose.slides.Presentation();
try {
// 访问第一张幻灯片
var islide = pres.getSlides().get_Item(0);
// 定义列宽和行高
var dblCols = java.newArray("double", [150, 150, 150, 150]);
var dblRows = java.newArray("double", [100, 100, 100, 100, 90]);
// 向幻灯片添加表格形状
var tbl = islide.getShapes().addTable(50, 50, dblCols, dblRows);
// 使用图像文件创建 PPImage 对象
var picture;
var image = aspose.slides.Images.fromFile("image.jpg");
try {
picture = pres.getImages().addImage(image);
} finally {
if (image != null) {
image.dispose();
}
}
// 将图像添加到首个表格单元格
var cellFormat = tbl.get_Item(0, 0).getCellFormat();
cellFormat.getFillFormat().setFillType(java.newByte(aspose.slides.FillType.Picture));
cellFormat.getFillFormat().getPictureFillFormat().setPictureFillMode(aspose.slides.PictureFillMode.Stretch);
cellFormat.getFillFormat().getPictureFillFormat().getPicture().setImage(picture);
// 将 PPTX 文件保存到磁盘
pres.save("Image_In_TableCell_out.pptx", aspose.slides.SaveFormat.Pptx);
} catch (e) {console.log(e);
} finally {
if (pres != null) {
pres.dispose();
}
}
常见问题
我可以为单元格的不同边设置不同的线条粗细和样式吗?
可以。单元格的top/bottom/left/right 边框各自拥有独立的属性,因此每一侧的粗细和样式可以不同。这与本文中演示的针对单元格的逐边框控制逻辑相符。
如果在将图片设置为单元格背景后更改列/行大小,图像会怎样?
其行为取决于填充模式(stretch/tile)。如果是拉伸,图像会适应新的单元格尺寸;如果是平铺,则会重新计算平铺方式。文章中提到了单元格中的图像显示模式。
我可以为单元格的全部内容分配超链接吗?
Hyperlinks 可以在单元格文本框中的文本(段落)级别或整个表格/形状级别设置。实际操作时,您可以将链接分配给文本的某个部分,或分配给单元格中的全部文本。
我可以在同一个单元格内使用不同的字体吗?
可以。单元格的文本框支持段落(runs),它们可以拥有独立的格式设置——字体、样式、大小和颜色。