我试图在我写的文档中自动执行一些无聊的操作。
我希望能够在光标位置插入如下内容:
一些文字
BOLD_TEXT1
2x2表
BOLD_TEXT2
2x2表
BOLD_TEXT2
2x2表
其中BOLD_TEXT具有相同的样式(即文本尺寸14,灰色和全部大写),并且该表是页面范围的并且第一行着色(即绿色),而第二列具有背景颜色的第二行。 / p>
有可能不生气吗?我没有在GAS文档中找到一些有效的例子。
答案 0 :(得分:2)
是的,这可能不会生气。这是一个函数,它定位当前元素,然后在它之后插入一堆东西。
首先,在光标位置获取元素,然后递归获取其父元素,直到达到Body级别。这是必要的,因为必须在Body中插入新的段落和表格。
创建一个空对象,然后定义DocumentApp.Attribute.BACKGROUND_COLOR
之类的listed here属性。使用setAttributes
方法应用于元素。
使用Body方法insertParagraph
和insertTable
完成。由于该表涉及一些自定义格式,因此将其分为函数insertMyTable
。显然,不能将背景颜色应用于行,因此这是在单元级别完成的。单元格的行/列索引是从0开始的。
我发现制作表格全宽的唯一方法是从页面宽度和边距计算所需的单元格宽度,并在单元格上设置此宽度。这可能会稍微偏离,因为细胞边界有宽度,但我决定不关心。
最终结果:
为方便使用,onOpen函数将创建一个菜单项Custom>每次打开文档时插入东西。
function insertStuff() {
var body = DocumentApp.getActiveDocument().getBody();
var cursor = DocumentApp.getActiveDocument().getCursor();
if (cursor) {
var element = cursor.getElement();
while (element.getParent().getType() != DocumentApp.ElementType.BODY_SECTION) {
element = element.getParent();
}
var index = body.getChildIndex(element);
}
else {
DocumentApp.getUi().alert("Could not find current position");
return;
}
var boldStyle = {};
boldStyle[DocumentApp.Attribute.BOLD] = true;
boldStyle[DocumentApp.Attribute.FOREGROUND_COLOR] = "#555555";
boldStyle[DocumentApp.Attribute.FONT_SIZE] = 14;
body.insertParagraph(index + 1, "Heading3").setHeading(DocumentApp.ParagraphHeading.HEADING3);
body.insertParagraph(index + 2, "some text");
body.insertParagraph(index + 3, "bold text 1").setAttributes(boldStyle);
insertMyTable(body, index + 4);
body.insertParagraph(index + 5, "bold text 2").setAttributes(boldStyle);
insertMyTable(body, index + 6);
body.insertParagraph(index + 7, "bold text 3").setAttributes(boldStyle);
insertMyTable(body, index + 8);
}
function insertMyTable(body, index) {
var topCellStyle = {};
topCellStyle[DocumentApp.Attribute.BACKGROUND_COLOR] = "#00FF00";
var bottomRightCellStyle = {};
bottomRightCellStyle[DocumentApp.Attribute.BACKGROUND_COLOR] = "#0000FF";
var table = body.insertTable(index, [["", ""], ["", ""]]);
table.getCell(0, 0).setAttributes(topCellStyle);
table.getCell(0, 1).setAttributes(topCellStyle);
table.getCell(1, 1).setAttributes(bottomRightCellStyle);
var cellWidth = (body.getPageWidth() - body.getMarginLeft() - body.getMarginRight())/2;
table.getCell(0, 0).setWidth(cellWidth);
table.getCell(0, 1).setWidth(cellWidth);
}
function onOpen() {
DocumentApp.getUi().createMenu("Custom").addItem("Insert stuff", "insertStuff").addToUi();
}
答案 1 :(得分:1)
这是将格式化文本插入文档的简单解决方案。它还包括带有文本区域和提交按钮的简单侧栏的html。
这是gs代码:
import kotlin.jvm.JvmStatic
object Hello {
@JvmStatic
public fun main(args: Array<String>) {
println("Hello, world!" + args[0])
}
}
这将显示侧栏:
function insertTextAtCursor(txt)
{
var retAddrStyle={};
retAddrStyle[DocumentApp.Attribute.FONT_FAMILY] = 'Calibri';
retAddrStyle[DocumentApp.Attribute.FONT_SIZE] = 14;
retAddrStyle[DocumentApp.Attribute.BOLD] = true;
retAddrStyle[DocumentApp.Attribute.LINE_SPACING]=1;
retAddrStyle[DocumentApp.Attribute.HORIZONTAL_ALIGNMENT]=DocumentApp.HorizontalAlignment.LEFT;
retAddrStyle[DocumentApp.Attribute.MARGIN_TOP]=0;
var doc=DocumentApp.getActiveDocument().getCursor().insertText(txt).setAttributes(retAddrStyle);
return true;
}
这是侧边栏的html(inserttext.html):
function loadParagraphSidebar()
{
var html=HtmlService.createHtmlOutputFromFile('inserttext').setTitle('Insert Text');
DocumentApp.getUi().showSidebar(html);
}
补充工具栏:
插入之前:
插入后: