我可以使用应用程序脚本在谷歌幻灯片中按段落划分文本框吗



我正在尝试在Apps Script中设计一些代码,这些代码可以放在任何谷歌幻灯片演示中,并按段落拆分每个文本框,这样每个段落都有自己的文本框。

我一开始使用var shape = slide.insertShape(SlidesApp.ShapeType.TEXT_BOX, 50, 50, 300, 300);制作新的文本框,就像谷歌描述的那样,用于大多数教程,但它"无法识别text_BOX类型",所以我找到了.insertTextBox,这似乎效果更好,但我发现了其他问题。

我可以使用.getPages来查找文本框中的段落数,但我无法判断它是否不包括每个段落的内容,或者我只是没有使用正确的命令从段落中获取文本。我也试图找到一个替代方案,找到每一段的开头,然后从那里分割文本,但我也找不到这样的命令。也许我必须使用.indexOf来查找每个/n或/r,或者有更简单的方法吗?

我还遇到了一个问题,我的文本框大小划分方程给了我未定义的答案,我试图将变量声明为数字,但这只会让事情变得更糟。

function myFunction() { // get slides in the presentation and establish 'for' variables
var slide = SlidesApp.getActivePresentation().getSlides();
var i;
var j;
var k;
for (i = 0; i < slide.length; i++) { // get the text boxes on each slide
var text = slide[i].getShapes(); 
for (j = 0; j < text.length; j++) { // get the location of and the paragraphs in each textbox (locations don't work)
var top = text[j].getTop;
var left = text[j].getLeft;
var width = text[j].getWidth;
var height = text[j].getHeight;
var paragraph = text[j].getText().getParagraphs(); 
for (k = 0; k < paragraph.length; k++){ // make a textbox for each paragraph distributed vertically over the original textbox
var content = text[j].getRange(paragraph[k]); //I was hoping this would fill with the contents of current paragraph
var shapeheight = height / paragraph.length; //NaN and I don't know why
var shapetop = height * k + top; //also doesn't work these should all be numbers
slide[i].insertTextBox(content, left, shapetop, width, shapeheight);
}
text[j].remove(); //delete original textbox on slide
}
}
}

以下是我尝试做的事情的图片:

更改前的幻灯片

预期更改后的近似幻灯片

我相信你的目标如下。

  • 您希望将文本框中的每个段落拆分为谷歌幻灯片上的每个文本框
  • 你想使用谷歌应用程序脚本来实现这一点

修改点:

  • 在您的脚本中,
    • getTopgetLeftgetWidthgetHeight是方法。所以请添加()
    • 关于var content = text[j].getRange(paragraph[k])getRange没有参数
    • 关于var shapeheight = height / paragraph.length,在这种情况下,这可以从for循环中取出
    • 关于var shapetop = height * k + top,在这种情况下,可能是var shapetop = shapeheight * k + top

当以上几点反映到您的脚本中时,它变成如下。

修改的脚本:

function myFunction() {
var slide = SlidesApp.getActivePresentation().getSlides();
var i;
var j;
var k;
for (i = 0; i < slide.length; i++) {
var text = slide[i].getShapes();
for (j = 0; j < text.length; j++) {
var top = text[j].getTop(); // Modified
var left = text[j].getLeft(); // Modified
var width = text[j].getWidth(); // Modified
var height = text[j].getHeight(); // Modified
var paragraph = text[j].getText().getParagraphs();
var shapeheight = height / paragraph.length; // Modified
for (k = 0; k < paragraph.length; k++) {
var content = paragraph[k].getRange().asString(); // Modified
var shapetop = shapeheight * k + top; // Modified
slide[i].insertTextBox(content, left, shapetop, width, shapeheight);
}
text[j].remove();
}
}
}

注:

  • 在当前阶段,似乎无法设置AutoFit。这样,当使用slide[i].insertTextBox(content, left, shapetop, width, shapeheight)时,文本与框有点偏离。那么在这种情况下,不使用shapeheight如何?在这种情况下,请按如下方式修改slide[i].insertTextBox(content, left, shapetop, width, shapeheight);

    var t = slide[i].insertTextBox(content);
    t.setLeft(left);
    t.setTop(shapetop);
    t.setWidth(width);
    

参考文献:

  • getTop((
  • getLeft((
  • getWidth((
  • getHeight((
  • getRange((
  • insertTextBox(文本(

最新更新