【问题标题】:Google Apps Script using wrong date format in excelGoogle Apps 脚本在 Excel 中使用错误的日期格式
【发布时间】:2026-02-03 08:10:01
【问题描述】:

因此,我正在编写一个 Google Apps 脚本,该脚本从 Google 表格文件中提取电子邮件地址、主题和正文。此信息用于发送电子邮件。现在,在我的 Google 表格文件的主题列中,我有 =TODAY() 以便提取日期。我的脚本每天都会更新此列,因此日期始终是最新的。

问题是当电子邮件到达时,主题行显示 “2018 年 8 月 11 日星期六 00:00:00 GMT-0700 (PDT)”

而不是……

2018 年 8 月 11 日喜欢它在 Google 表格中的设置

不知道为什么会这样,我的代码如下。

/**
 * Creates a two time-driven triggers.
 */
function createTimeDrivenTriggers() {
  // Trigger every 6 hours.
  ScriptApp.newTrigger('adddate')
  .timeBased()
  .atHour(21)
  .everyDays(1)
  .inTimezone("America/Los_Angeles")
  .create()

  ScriptApp.newTrigger('sendEmails2')
  .timeBased()
  .atHour(22)
  .everyDays(1)
  .inTimezone("America/Los_Angeles")
  .create()
}
/**
 * This is my hacky way to make sure sheets has today's date.
 */
function adddate() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var cell = sheet.getRange(2,2);
cell.setValue('=TODAY()');
    }

// This constant is written in column C for rows for which an email
// has been sent successfully.
var EMAIL_SENT = 'SUCCESSFULLY SENT';

/**
 * Sends non-duplicate emails with data from the current spreadsheet.
 */
function sendEmails2() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var startRow = 2; // First row of data to process
  var numRows = 2; // Number of rows to process
  // Fetch the range of cells A2:B3
  var dataRange = sheet.getRange(startRow, 1, numRows, 3);
  // Fetch values for each row in the Range.
  var data = dataRange.getValues();
  for (var i = 0; i < data.length; ++i) {
    var row = data[i];
    var emailAddress = row[0]; // First column
    var subject = row[1]; // Second column
    var message = row[2]; // Third column
    var emailSent = row[3]; // Fourth column
    if (emailSent != EMAIL_SENT) { // Prevents sending duplicates
      MailApp.sendEmail(emailAddress, subject, message);
      sheet.getRange(startRow + i, 3).setValue(EMAIL_SENT);
      // Make sure the cell is updated right away in case the script is interrupted
      SpreadsheetApp.flush();
    }
  }
}

【问题讨论】:

    标签: email line subject


    【解决方案1】:

    您遇到的问题是您的单元格被格式化为日期,并且您将其作为需要字符串的参数传递。那时你不再控制转换,你得到的比你想要的要多。两种方法来解决它。 1) 首先使用

    将其设为字符串
    cell.setValue('=text(TODAY(),"mm/dd/yy"');
    

    这确实冒着破坏您最初对其进行的任何日期处理的风险(尽管我没有看到,所以可能没问题)。

    所以可能更好的是(不是 1,只是这个) 2) 是在保留基础日期的同时获取显示的字符串,就像您使用var subject = row[1].getDisplayValue(); 一样 2) 具有使用设置工作表的日期格式的额外好处。

    【讨论】:

      最近更新 更多