在谷歌文档中插入日期时间

Posted

技术标签:

【中文标题】在谷歌文档中插入日期时间【英文标题】:Insert date time in google document 【发布时间】:2012-11-15 03:14:55 【问题描述】:

我想在 Google 文档中插入时间戳(日期和/或时间)。支持文档()说应该有键盘快捷键,但是在我的环境(Win7 + IE9)下不行。

谁能为我提供一个 Google Apps 脚本来实现这一点?

【问题讨论】:

Apps 脚本无法向 Google 文档添加快捷方式或菜单。那需要什么?我的意思是,这个的整个用法。您要批量将时间戳附加到一堆文档吗?或者还有什么? 您缺少指向文档的链接。您可能正在查看用于表格的support.google.com/drive/bin/answer.py?hl=en&answer=181110,而您的意思是查看文档帮助项support.google.com/drive/bin/…,它没有列出这样的快捷方式。 关于 WebApps 的几乎相同的问题,在此问题之前 2 年提出:webapps.stackexchange.com/questions/6440/… 【参考方案1】:

这很好用

在 Google 文档中:工具 -> 打开脚本编辑器并保存此脚本

function onOpen() 
  var ui = DocumentApp.getUi();
  // Or FormApp or SpreadsheetApp.
  ui.createMenu('Custom Menu')
      .addItem('Insert Date', 'insertDate')
      .addToUi();



function insertDate() 
  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.
      var d = new Date();
      var dd = d.getDate();
      dd = pad(dd, 2)
      var mm = d.getMonth() + 1; //Months are zero based
      mm = pad(mm, 2)
      var yyyy = d.getFullYear();
      var date = dd + "-" + mm + "-" + yyyy;
      var element = cursor.insertText(date);
      if (element) 
        element.setBold(true);
       else 
        DocumentApp.getUi().alert('Cannot insert text at this cursor location.');
      
     else 
      DocumentApp.getUi().alert('Cannot find a cursor in the document.');
  


function pad (str, max) 
  str = str.toString();
  return str.length < max ? pad("0" + str, max) : str;

重新加载文档,接受权限。

【讨论】:

对于那些想在电子表格中使用它的人来说是一个快速的特别之处gist.github.com/mlatu/11498254 有没有一种简单的方法可以为这个自定义菜单创建快捷方式?感谢您的回答。 @KumarDeepak:我还没有尝试过,但我想你可以更新 onOpen 以添加一个处理程序来检查你的热键的所有键是否被按下。 你一定是在开玩笑吧……如果这是“解决方案”,谷歌还有很长的路要走…… 这仅适用于我添加脚本的单个文档,但不适用于任何其他文档!这意味着我在单个文档上获得了“实用程序”选项。我不认为这是它应该的工作方式!【参考方案2】:

我不确定插件是否属于您要求的 Google Apps 脚本类别,错误 Text Factory 提供了插入时间戳的功能。

【讨论】:

文本工厂插件在 Google Apps 中需要过多的权限。我不会在我的 Google Apps 帐户上允许这样做。 链接失效【参考方案3】:

这是一个经过编辑的版本(已经提供的版本),它打印出包括时间在内的日期戳。

以下是输出示例:2014 年 3 月 26 日上午 2:43:21

function onOpen() 
  var ui = DocumentApp.getUi();
  // Or FormApp or SpreadsheetApp.
  ui.createMenu('Insert Date')
      .addItem('Insert Date', 'insertDate')
      .addToUi();



function insertTime() 
  var d = new Date();
  var timeStamp = d.getTime();  // Number of ms since Jan 1, 1970

  // OR:

  var currentTime = d.toLocaleTimeString(); // "12:35 PM", for instance


function insertDate() 
  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.
      var d = new Date();
      var dd = d.getDate();
      dd = pad(dd, 2)
      var mm = d.getMonth() + 1; //Months are zero based
      mm = pad(mm, 2)
      var yyyy = d.getFullYear();
      var timeStamp = d.getTime();  // Number of ms since Jan 1, 1970
      var currentTime = d.toLocaleTimeString(); // "12:35 PM", for instance
      var date = currentTime + " " + dd + "-" + mm + "-" + yyyy;
      var element = cursor.insertText(date);
      if (element) 
        element.setBold(true);
       else 
        DocumentApp.getUi().alert('Cannot insert text at this cursor location.');
      
     else 
      DocumentApp.getUi().alert('Cannot find a cursor in the document.');
  


function pad (str, max) 
  str = str.toString();
  return str.length < max ? pad("0" + str, max) : str;

【讨论】:

【参考方案4】:

如果你想打开文档后自动获取当前日期,你可以添加这个脚本:

在 Google 文档中:工具 -> 打开脚本编辑器并保存此脚本:

/** 
 *  After open document actualize part with text "Generated" to "Generated [actual date]".
 */

function onOpen()   
  var body = DocumentApp.getActiveDocument().getBody();
  var date = Utilities.formatDate(new Date(), "GMT", "dd.MM.yyyy");
  // Clear the text surrounding "Apps Script", with or without text.
  body.replaceText("^Generated.*$", "Generated " + date);    

在文档正文中,您必须包含“已生成”文本。

【讨论】:

【参考方案5】:

创建一个新的表格文档

在A1中输入Date:,在B1中输入公式NOW()。我将工作表命名为current-date,但您可以随意命名。该文档将作为您所有 Docs 文档的“日期管理员”简单地放在您的驱动器到服务器上。

将单元格格式化为日期

选择单元格 B1 并从 Format 菜单中选择 Number &gt;&gt; Date

选择单元格并复制

选择单元格A1和B1,右击,选择Copy

粘贴并链接到 Docs 文档

在您要粘贴单元格的文档文档中右键单击,然后单击Paste。文档应该询问您是否要将这些单元格链接到源文档。选择Link to spreadsheet,然后点击Paste

摆脱边界

要去除边框,请右键单击插入的单元格并选择Table Properties

现在将Table Border 设置为0pt 并点击OK

最终结果

你应该得到这样的结果。您可以拖动单元格的边缘以使其变大或变小,还可以更改单元格的字体和文本大小。如果将文本变大,文本将在单元格内换行,因此您需要将它们变宽。

更新日期

现在,每当您打开带有链接单元格的文档并且日期已更改时,您应该会看到这一点。单击Update,您的日期将更新为今天的日期。无需打开current-date 电子表格!

享受吧!

【讨论】:

【参考方案6】:

对于 Docs,您可能不走运,因为似乎有 no hotkey for that,并且缺乏对从 Docs 内部编写脚本的支持(电子表格将是另一回事)。不过,由于您使用的是 Windows,因此您可以使用 autohotkey。 This video,虽然太长了,但显示分配全局热键组合以在任何地方插入当前日期。这样,您可以在使用 Windows 系统时将日期/时间插入到任何您想要的位置。 (你可以自定义它只在某些应用程序中激活,例如 IE,如果你想对它变得古怪)

【讨论】:

正是我想要的,自动热键是要走的路。一定会喜欢的。感谢布赖恩的评论!【参考方案7】:

因为使用额外的按键从菜单中插入日期,所以我的解决方案是一个批处理文件 sts.cmd,它在调用时将日期时间存储到剪贴板中,从而实现简单的 Windows+R , sts, Ctrl+V 获取并粘贴。如果您要添加额外的击键以将日期输入到文档中,那么您最好将其粘贴进去。 代码是

@ECHO OFF
for /f "tokens=1-12 delims=/:. " %%d in ("%time%") do SET MYTIME= %%d:%%e:%%f
for /f "tokens=1-12 delims=/:. " %%d in ("%date%") do SET MYDATE= %%g-%%e-%%f
SET MYTS=%MYDATE%%MYTIME%
ECHO | SET /p dummyname=%MYTS%|clip

这对我有用,直到 GDocs 提出一个可嵌入的函数,每次打开文档时都会将显示日期更新为当前日期。

【讨论】:

【参考方案8】:

在 MacOS 上,我使用了 Automator。

我创建了一个与 Chrome 一起使用的服务,不接受任何输入,并运行一个 shell 脚本并将输出发送到剪贴板。 shell 脚本非常基础:

DateTime=`date "+%Y-%m-%d %H:%M"`
echo $DateTime

我本可以不使用中间变量而只运行 date 命令,但我想我可能想要进行额外的处理和格式化。请注意,如果要在日期字符串的格式中包含空格,则格式参数必须用引号引起来。屏幕截图使用了一个下划线。

保存脚本后,我转到系统设置 > 键盘 > 快捷方式,在文本部分找到我的脚本 DateTime2CB.workflow 并给它一个热键。要找出正在使用的热键并不容易。

我本可以为任何应用程序使用它(如果我发现自己尝试使用其他应用程序,我仍然可能会这样做),但现在它只是 Chrome。我也可以让 shell 脚本将日期的输出通过管道传输到剪贴板,Mac 上的 pbcopy,如上所述(使用“clip”)。我已经测试了这两种方法,它们都有效。

我将相同的脚本添加到另一台 Mac 并设置为坚持将 Automator 文件 (name.workflow) 保存在 iCloud 中。在这种情况下,它没有在键盘设置中列出。为了解决这个问题,我必须在 Automator 中使用打开 > 最近重新打开保存的 iCloud 文件。它询问我是否想在服务中安装该文件。那时的肯定答案将其保存在我的本地系统上,我可以在“设置”>“键盘”>“快捷方式”>“服务”下找到它。

我希望这对其他 Mac 用户有所帮助。

八月

【讨论】:

【参考方案9】:

试试这个:

function insertTimestamp() 
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var cell = ss.getActiveCell();

  cell.setValue(new Date());
  // sets the cells format to month/day/year.
  // Remove if you want time inserted as well
  cell.setNumberFormat("MM/dd/yyyy") 

这适用于不确定您是否正在寻找其他文档的电子表格。

【讨论】:

不适用于 Docs(正如 OP 所要求的那样),因此投反对票。【参考方案10】:

今天在 Google 文档中创建电子表格。将日期放入 B1 作为 Today() 使用函数 Text(B1,"dddd, mmmm d, yyyy") 在 C1 中格式化 然后使用以下脚本(您将需要 Today 电子表格的 url

function myFunction() 
  var doc = DocumentApp.getActiveDocument();
  var body1 = doc.getBody();
  var style1 = ;
  style1[DocumentApp.Attribute.BOLD] = true;

  var text1 = doc.editAsText();
  body1.appendHorizontalRule(); 
  var wb = SpreadsheetApp.openByUrl('spreadsheet url');
  var ss = wb.getSheetByName('Today');
  var r = ss.getRange('C1');
  var date1 = r.getValues();
  var par1 =body1.appendParagraph(date1[0]);
  par1.setAttributes(style1);

【讨论】:

在Doc中哪里可以应用这个函数? 不适用于 Docs(正如 OP 所要求的那样),因此投反对票。

以上是关于在谷歌文档中插入日期时间的主要内容,如果未能解决你的问题,请参考以下文章

在谷歌 appScript 中获取今天的日期

当我输入单元格时自动获取日期和时间,但在谷歌表格的单独列中

Google Apps 脚本 - 将 n 小时添加到当前时间和日期

从以下位置插入/转换日期:C++ 到 mySQL db

谷歌表格中日期和小时的Unix时间戳[重复]

ImportError,在谷歌应用引擎中使用 pytz