借助ChatGPT搞了个JS宏,用来把PPT中表格里的内容转为文本框
Jesse 

Lv.2潜力创作者
老师们在制作课件的时候,有时会需要在PPT里面用表格列出一些对比的数据。为了测试学生是否掌握相关知识,可能需要先让表格内容空着,一边和学生进行问答,一边操作PPT让答案显现出来:
这就要求表格中的内容必须是独立文本框的形式。毕竟填入表格中的文字,是不支持按单元格添加动画的。如果你已经填好了表格内容,开始做动画才意识到这点,就要多花不少功夫去调整了。
其实借助JS宏,可以一键完成表格内容→独立文本框的转换。
一起了解一下吧!
JS宏代码如下:
function splitTableToTextboxes() {
var app = Application;
var sel = app.ActiveWindow.Selection;
if (!sel.ShapeRange || sel.ShapeRange.Count < 1) {
alert("请先选中一个表格");
return;
}
var tableShape = sel.ShapeRange.Item(1);
if (!tableShape.HasTable) {
alert("当前选中的不是表格");
return;
}
var slide = app.ActiveWindow.View.Slide;
var table = tableShape.Table;
var tableLeft = tableShape.Left;
var tableTop = tableShape.Top;
// 遍历行
for (var r = 1; r <= table.Rows.Count; r++) {
var currentTop = tableTop;
for (var rr = 1; rr < r; rr++) {
currentTop += table.Rows(rr).Height;
}
// 遍历列
for (var c = 1; c <= table.Columns.Count; c++) {
var currentLeft = tableLeft;
for (var cc = 1; cc < c; cc++) {
currentLeft += table.Columns(cc).Width;
}
var cell = table.Cell(r, c);
var textRange = cell.Shape.TextFrame.TextRange;
var text = textRange.Text;
// 空单元格跳过
if (!text || text.replace(/\r/g, "").trim() === "") {
continue;
}
var cellWidth = table.Columns(c).Width;
var cellHeight = table.Rows(r).Height;
// 先创建文本框
var tb = slide.Shapes.AddTextbox(
1,
currentLeft,
currentTop,
cellWidth,
10
);
// 去掉边框和背景
tb.Line.Visible = false;
tb.Fill.Visible = false;
// 写入文本
tb.TextFrame.TextRange.Text = text;
var newTR = tb.TextFrame.TextRange;
// 复制字体
try {
newTR.Font.Name = textRange.Font.Name;
} catch(e){}
try {
newTR.Font.Size = textRange.Font.Size;
} catch(e){}
try {
newTR.Font.Bold = textRange.Font.Bold;
} catch(e){}
try {
newTR.Font.Italic = textRange.Font.Italic;
} catch(e){}
try {
newTR.Font.Color.RGB = textRange.Font.Color.RGB;
} catch(e){}
// 对齐方式
try {
newTR.ParagraphFormat.Alignment =
textRange.ParagraphFormat.Alignment;
} catch(e){}
// 自动适应文字高度
tb.TextFrame.AutoSize = 1;
// 清理边距
tb.TextFrame.MarginTop = 0;
tb.TextFrame.MarginBottom = 0;
tb.TextFrame.MarginLeft = 0;
tb.TextFrame.MarginRight = 0;
// 读取文本框真实高度
var realHeight = tb.Height;
// 关键:中心对齐
tb.Top = currentTop + (cellHeight - realHeight) / 2;
// 删除表格原文字
textRange.Text = "";
}
}
alert("拆分完成");
}有需求的小伙伴自取哦~
Lv.2潜力创作者