引用库中的函数

时间:2017-11-15 10:19:58

标签: google-apps-script

我为Google文档创建了一个脚本,添加了一个名为“Utilities”的菜单项 - > “插入日期”(显然)将当前日期插入光标位置。我想将此脚本重用于其他文档,并最终将其提供给组织中的其他人,因此我将其作为库导入到另一个文档中。但是,当我尝试运行它时,库中的一个函数引用另一个函数,因此我得到一个错误,即.insertAtCursor函数不存在。

我是否需要在同一个函数中创建库中的所有内容?如果没有,是否有办法使用该调用,因此它假定它在库中?我怀疑这是我对Google Apps脚本范围的误解,但我不确定。

这是图书馆:

function onOpen() {
  // Add a menu with some items, some separators, and a sub-menu.
  DocumentApp.getUi().createMenu('Utilities')
      .addItem('Insert Date (dd MMMM yyyy)', 'insertAtCursor')
      .addToUi();
}




/**
 * Inserts the sentence "Hey there!" at the current cursor location in boldface.
 */
function insertAtCursor() {
  var cursor = DocumentApp.getActiveDocument().getCursor();

  if (cursor) {
    // Attempt to insert text at the cursor position. If insertion returns null,
    // then the cursor's containing element doesn't allow text insertions.
    // Date format defined at https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html
    // Make sure if you change the date format you update the menu items in the onOpen() fuction above
    var date = Utilities.formatDate(new Date(), "GMT", "dd MMMM yyyy"); // "yyyy-MM-dd'T'HH:mm:ss'Z'"
    var element = cursor.insertText(date);
    if (element) {
      element.setBold(false);
    } else {
      DocumentApp.getUi().alert('Cannot insert text at this cursor location.');
    }
  } else {
    DocumentApp.getUi().alert('Cannot find a cursor in the document.');
  }
}

以下是我在其他文档中使用它的方法:

function onOpen() {
  InsertDate.onOpen()
}

如果我从另一个有效的文档调用InsertDate.insertAtCursor,但没有意义,因为我只想从菜单项调用该函数。我不知道如何将这个库修改为在另一个文档中“正常工作”。

1 个答案:

答案 0 :(得分:0)

在使用该库的脚本中,您需要创建一个菜单并创建一个只调用该库的函数,因为在使用该库的doc上下文中调用了insertAtCursor函数:

function onOpen() {

  // Add a menu with some items, some separators, and a sub-menu.
  DocumentApp.getUi().createMenu('Utilities')
      .addItem('Insert Date (dd MMMM yyyy)', 'insertAtCursor')
      .addToUi();
}

function insertAtCursor() {
  InsertAtCursor.insertAtCursor()
}

以下是一个更清洁的工作,它的工作原理并不是显而易见的:

function onOpen() {
  InsertAtCursor.onOpen()
}

function insertAtCursor() {
  InsertAtCursor.insertAtCursor()
}