我正在尝试在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
}
}
}
以下是我尝试做的事情的图片:
更改前的幻灯片
预期更改后的近似幻灯片
我相信你的目标如下。
- 您希望将文本框中的每个段落拆分为谷歌幻灯片上的每个文本框
- 你想使用谷歌应用程序脚本来实现这一点
修改点:
- 在您的脚本中,
getTop
、getLeft
、getWidth
和getHeight
是方法。所以请添加()
- 关于
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(文本(