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

Jesse
Jesse Lv.2 潜力创作者KVP

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("拆分完成");
}

有需求的小伙伴自取哦~

浏览 244
1
11
分享
11 +1
2
1 +1
全部评论 2
 
HC.旋
HC.旋 WPS资深用户WPS寻令官Lv.2 潜力创作者

Lv.2潜力创作者

点赞支持
· 福建省
回复