我一直在尝试写一个脚本,将输出两行谷歌文档。行间距需要比默认值更紧密。在编辑器中,我可以点击行间距图标,选择自定义间距。然后将其设置为0.5之类的值,以使线条更接近。我一直试图在应用程序脚本中实现同样的事情,但每次行间距值将默认为1。就好像我的值在某个点被四舍五入了。
这段代码再现了我的问题:
let docBody = DocumentApp.openByUrl("URL OF BLANK GOOGLE DOC").getBody()
let p1 = docBody.appendParagraph("")
p1.setAlignment(DocumentApp.HorizontalAlignment.CENTER)
p1.setLineSpacing(0.5)
let line1 = p1.appendText(`Line 1r`)
line1.setFontSize(30)
let line2 = p1.appendText("line 2")
line2.setFontFamily("Roboto Mono")
line2.setFontSize(10)
console.log(p1.getLineSpacing())
p1。getLineSpacing返回0.5并且没有错误,但是在文档中行间距总是设置为1。如果我将0.5更改为1以上的值(如1.43),它将按预期设置属性。我也可以在文档中正常地改变行间距,但是我似乎不能从脚本中设置它。
是否有不能这样设置的原因?
问题及解决方法:
似乎在现阶段,谷歌文档服务(DocumentApp)的setLineSpacing
的方法不能像0.5
那样使用自定义行间距。我不确定这是当前的规范还是一个bug。
但是,幸运的是,当使用Google Docs API时,可以使用这个自定义行间距。在这个答案中,我想建议使用Google Docs API来设置自定义行间距。
当使用Docs API时,你的脚本可以修改如下:
修改脚本:
这个脚本使用Docs API。因此,请在高级谷歌服务中启用Docs API。
function sample() {
const doc = DocumentApp.openByUrl("URL OF BLANK GOOGLE DOC"); // Added
let docBody = doc.getBody(); // Modified
let p1 = docBody.appendParagraph("");
p1.setAlignment(DocumentApp.HorizontalAlignment.CENTER);
// p1.setLineSpacing(0.5); // Removed
let line1 = p1.appendText(`Line 1r`);
line1.setFontSize(30);
let line2 = p1.appendText("line 2");
line2.setFontFamily("Roboto Mono");
line2.setFontSize(10);
console.log(p1.getLineSpacing());
// I added the below script.
doc.saveAndClose();
const id = doc.getId();
const obj = Docs.Documents.get(id).body.content.pop();
const requests = [{ updateParagraphStyle: { paragraphStyle: { lineSpacing: 50 }, range: { startIndex: obj.startIndex, endIndex: obj.endIndex }, fields: "lineSpacing" } }];
Docs.Documents.batchUpdate({ requests }, id);
}
- 当这个脚本运行时,你可以看到行间距设置为
0.5
在谷歌文档
引用:
UpdateParagraphStyleRequest
ParagraphStyle
这份官方文件的内容如下:
lineSpacing:行与行之间的间距,作为法线的百分比,其中法线表示为100.0。如果未设置,则继承父值。