当前日期作为Google文档中的变量?


12

是否可以将当前日期的变量添加(插入)到Google文档中,该变量在每次打开文档时都会自动更新?

一些标准:

  • 日期位置应该是可变的,即允许我在页面/段落的不同位置插入日期

  • 该文档仍应可共享,即打开我的文档的人也会与当前日期一起显示


应该使用哪个时区来计算当前日期?
鲁文

要使其具有通用性,也许由用户自己在设置中定义?还是可以通过某种方式自动从用户的Google文档设置中获取?
orschiro

1
刚刚添加了我的编码尝试。关于时区,我使用了GMT-5,但可以轻松地将其更改为您所需的时间。这不是一个完整的解决方案。
鲁本2015年

Answers:


9

简短答案

目前,变量不是Google Docs和Google Apps Script(扩展Google Docs的平台)的内置功能,不包含用于处理它们的类或方法。

备择方案

选择1

一种替代方法是使用文本模式,但应确保它仅与要更新的日期匹配。

选择2

另一种选择是使用类NamedRange,但请记住

  1. 移动范围将使其失去名称1
  2. 用多个元素替换命名范围内的文本仅在第一次有效2

码:

以下旨在用于绑定到 Google文档的脚本中的代码具有两个主要功能:

  1. 插入今天的日期
  2. 更新今天的日期

用于调试目的

  1. 日期和时间,而不是仅日期。
  2. 自定义菜单触发主要功能。

“已知问题”:更新功能将替换整个段落。

要测试代码,请复制代码,然后转到Google文档,创建一个新文档,单击“工具”>“脚本编辑器”,选择“空白项目”,粘贴代码,保存项目,指定名称,按时运行以授权该应用,请关闭您的文档,然后再次打开。将显示一个名为“实用程序”的新菜单。从那里您可以调用主要功能。

function onOpen() {
  // Add a menu with some items, some separators, and a sub-menu.
  DocumentApp.getUi().createMenu('Utilities')
      .addItem('Insert Today\'s Date', 'insertTodayAtCursor')
      .addItem('Update Today\'s Date', 'setTodayNamedRange')
      .addToUi();
}

function todayDate(){
  return Utilities.formatDate(new Date(), "GMT-5", "yyyy-MM-dd'T'HH:mm:ss'Z'"); // "yyyy-MM-dd"
}

/**
 * Inserts the today's date at the current cursor location and create a NamedRange.
 */
function insertTodayAtCursor() {
  var str = 'testToday';
  var doc = DocumentApp.getActiveDocument();
  var cursor = doc.getCursor();

  if (cursor) {
    // Attempt to insert today's date at the cursor position. If insertion returns null,
    // then the cursor's containing element doesn't allow text insertions.
    var date = todayDate();
    var element = cursor.insertText(date);
    if (element) {
      var rangeBuilder = doc.newRange();
      rangeBuilder.addElement(element);
      return doc.addNamedRange(str, rangeBuilder.build()); 
    } else {
      DocumentApp.getUi().alert('Cannot insert text at this cursor location.');
    }
  } else {
    DocumentApp.getUi().alert('Cannot find a cursor in the document.');
  }
}

function setTodayNamedRange(){
  var str = 'testToday';
  var doc = DocumentApp.getActiveDocument();
  // Retrieve the named range
  var namedRanges = doc.getNamedRanges();
  var newRange = doc.newRange();
  var date = todayDate();
  for(var i=0; i<namedRanges.length; i++){

    if(namedRanges[i].getName() == str){

      var rangeElement = namedRanges[i].getRange().getRangeElements();

      for (var j=0; j<rangeElement.length; j++){

        var element = rangeElement[j].getElement().asText().editAsText().setText(date);
        newRange.addElement(element);
      }
    }
  }
  doc.addNamedRange(str, newRange.build());
}


下面有一些不同种类的项目(问题,规范等),可以用来激发灵感或指向“正确的方向”以找到“解决方案”


脚注


这是否意味着不可能?
Jacob Jan Tuinstra 2015年

@JacobJanTuinstra:恕我直言,是的,这不可能。可能的是找到一种解决方法,但需要更多上下文。我认为,要求该信息应在意见做,但我不能评论任何地方尚未:)
鲁本

1
@orschiro我很高兴知道它对您有用。我认为,可以将其重构为Chrome扩展程序,而不必将其重构为Google Docs插件。
鲁本2015年

1
@ChristopherFrancisco:该代码旨在在有界脚本上使用,但是可以对其进行修改以从您的应用程序使用,但这是一个不同的问题,它很可能更适合Stack Overflow
鲁本

1
@ChristopherFrancisco我刚刚在官方指南中添加了有关Google Docs编辑器文件的脚本范围的链接。
鲁本
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.