当前位置: 首页 > 知识库问答 >
问题:

使用Google Apps脚本在Google Sheet中添加带有日期的行,并保留工作表中指定的日期格式

李明贤
2023-03-14

我的工作表中有一列具有自定义日期格式。格式是在整个列上设置的。如果在工作表内的列中输入日期值,则会显示我指定的格式。但是,如果我使用谷歌应用程序脚本附加一个新行,它将不会遵守格式。

在通过Google Apps脚本添加行之前:

| Timestamp                 | Message |
|---------------------------|---------|
| 2019-01-01 @ 13:12:32.013 | test    |

添加行后:

| Timestamp                 | Message |
|---------------------------|---------|
| 2019-01-01 @ 13:12:32.013 | test    |
|         1/2/2019 14:51:31 | test2   |

添加行的Google Apps脚本代码:

SpreadsheetApp.getActiveSheet().appendRow([new Date(), "test2"])

是否有一种方法可以让工作表按照格式化规则格式化要添加的日期?

我发现的唯一方法是将数据转换为一个整数,表示自1899-12-30以来的天数,但这似乎非常棘手。

var dateSerial = ((new Date()) - (new Date(1899, 11, 30))) / 1000 / 60 / 60 / 24;

共有1个答案

常经赋
2023-03-14

正如@Cooper在他的评论中提到的,您可以通过实用程序来实现这一点。formatDate()

我用下面的脚本进行了测试,日期格式完全符合您的要求。

function addDate() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sh = ss.getActiveSheet();
  var tz = ss.getSpreadsheetTimeZone();
  var d = Utilities.formatDate(new Date(), tz, 'yyyy-MM-dd @ hh:mm:ss.SSS');
  sh.appendRow([d,'test']);
}

您真正需要感兴趣的是定义日期的var d。我使用电子表格时区,但你可以使用任何你喜欢的时区。

var d = Utilities.formatDate(new Date(), tz, 'yyyy-MM-dd @ hh:mm:ss.SSS');

编辑:

用户不希望在脚本本身中设置日期格式,相反,我们可以使用getNumberFormat()从上面的列中获取数字格式,然后使用setNumberFormat()基于此格式化新条目。

有关详细信息,请参见下面的脚本。

function setDate() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sh = ss.getActiveSheet();
  var lr = sh.getLastRow();

  //get format for last row in column A
  var format = sh.getRange(lr, 1).getNumberFormat();

  //add new data to sheet
  sh.appendRow([new Date(), 'test']);

  //format new data
  sh.getRange(lr+1, 1).setNumberFormat(format);
}
 类似资料:
  • 我试图使用一个谷歌脚本,从检索2个证券字段,并将输出保存到Google Sheet文件。我还需要脚本将datetime添加到工作表的第一列。 我创建了一个包含3列的基本Google工作表: A的格式为DateTime。第1行中有列名称date,第2行之后为空 以下是我的功能: 以下是输出: C和D列的输出正确。A列输出错误。每次我运行该函数时,每一行都会在最后一行的上方添加: 我第一次运行该函数是

  • 我有一个GoogleApps电子表格,其中一列包含日期和时间。这张纸是由几张纸合并而成的。在某些行上,该值是一个日期(即typeof sheet.getRange(i,2).getValue()==“object”,带有日期的方法)。其他时间,此单元格是一个数字(即typeof sheet.getRange(i,2).getValue()=“number”),但单元格格式将单元格显示为一个日期。

  • 问题内容: 我正在尝试将n个(整数)工作日添加到给定的日期,添加日期必须避免假期和周末(工作日中不包括该日期) 问题答案: 跳过周末很容易做到这一点: 假期的问题在于假期因国家或地区,宗教信仰等的不同而有很大差异。您需要为用例提供一份假期清单/一套,然后以类似的方式跳过它们。一个起点可能是苹果为iCal发布的日历供稿(以ics格式),而在美国的日历供稿则是http://files.apple.co

  • 我知道在Java中,可以使用在一定延迟后执行特定任务。这篇文章展示了如何在特定日期执行任务,但不是使用。例如,我有一个如下初始化的格式: 此外,我想执行在中的语句下声明的特定任务,例如: 如何初始化在特定日期在内和/或使用语句执行的,最好使用?

  • 因此,如果我的当前日期是6月9日,那么当前日期应该是06/09/14,modifiedDate应该是2014年6月13日。 这怎么做?

  • 问题内容: 我正在尝试将以下字符串转换为日期类型: 但这是打印以下内容: 我如何获得这个日期来保留毫秒? 问题答案: 实际上,convertedDate对象确实包含毫秒信息。这里的问题是toString()方法格式不能打印毫秒。 做 您还可以检查ms是否设置为