【问题标题】:Change the date format of a column and check if it matches yesterday's date更改列的日期格式并检查它是否与昨天的日期匹配
【发布时间】:2021-05-11 09:29:31
【问题描述】:

我想复制工作表 A 中 H 列是昨天日期的行并将其添加到工作表 B 的底部。

我有以下过程。

  1. 获取昨天的日期
  2. 获取工作表 A 的 H 列中的日期
  3. 检查与昨天的日期和工作表 A 的 H 列匹配的行
  4. 获取匹配的行
  5. 获取表 B
  6. 在工作表 B 的底部添加一行
  7. 工作表 B 底部的输出

现在我们被困在 3.
我能够将昨天的日期更改为 yyyy/MM/dd 格式,但我不知道如何将工作表 A 的 H 列中的日期更改为 yyyy/MM/dd 格式。

我使用 Utilities.formatDate 将昨天的日期更改为 yyyy/MM/dd 格式。
当我使用 Utilities.formatDate 时,工作表 A 上的 H 列给了我一个错误。我相信这是由于工作表 A 上 H 列的格式。
如何使工作表 A 上的 H 列也采用 yyyy/mm/dd 格式?

最好的问候,

以下是我们目前正在处理的代码。

function code() {
  const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = spreadsheet.getSheetByName('Sheet A');
  let yesterday = new Date();
  yesterday.setDate(yesterday.getDate() - 1);
  yesterday = Utilities.formatDate(yesterday,"JST", "yyyy/MM/dd");

  let range = sheet.getRange('H:H').getValues();

  console.log(yesterday)
  console.log(range)
}

console.log(昨天)= 2021/05/11

console.log(range) = 日志输出太大。
[ 2021 年 4 月 1 日星期四 00:00:00 GMT+0900(日本标准时间)],
[ 2021 年 4 月 2 日星期五 00:00:00 GMT+0900(日本标准时间)],
[ 2021 年 4 月 3 日星期六 00:00:00 GMT+0900(日本标准时间)],
[ 2021 年 4 月 4 日星期日 00:00:00 GMT+0900(日本标准时间)],
[ 2021 年 4 月 5 日星期一 00:00:00 GMT+0900(日本标准时间)],
[ 2021 年 4 月 6 日星期二 00:00:00 GMT+0900(日本标准时间)],
[ 2021 年 4 月 7 日星期三 00:00:00 GMT+0900(日本标准时间)],
[ 2021 年 4 月 8 日星期四 00:00:00 GMT+0900(日本标准时间)],
[ 2021 年 4 月 9 日星期五 00:00:00 GMT+0900(日本标准时间)],
[ 2021 年 4 月 10 日星期六 00:00:00 GMT+0900(日本标准时间)],
[ 2021 年 4 月 11 日星期日 00:00:00 GMT+0900(日本标准时间)],
[ 2021 年 4 月 12 日星期一 00:00:00 GMT+0900(日本标准时间)],
[ 2021 年 4 月 13 日星期二 00:00:00 GMT+0900(日本标准时间)],
[ 2021 年 4 月 14 日星期三 00:00:00 GMT+0900(日本标准时间)],
[ 2021 年 4 月 15 日星期四 00:00:00 GMT+0900(日本标准时间)],
[ 2021 年 4 月 16 日星期五 00:00:00 GMT+0900(日本标准时间)],
[ 2021 年 4 月 17 日星期六 00:00:00 GMT+0900(日本标准时间)],
[ 2021 年 4 月 18 日星期日 00:00:00 GMT+0900(日本标准时间)],
[ 2021 年 4 月 19 日星期一 00:00:00 GMT+0900(日本标准时间)],
[ 2021 年 4 月 20 日星期二 00:00:00 GMT+0900(日本标准时间)],
[ 2021 年 4 月 21 日星期三 00:00:00 GMT+0900(日本标准时间)],
[ 2021 年 4 月 22 日星期四 00:00:00 GMT+0900(日本标准时间)],
[ 2021 年 4 月 23 日星期五 00:00:00 GMT+0900(日本标准时间)],
[ 2021 年 4 月 24 日星期六 00:00:00 GMT+0900(日本标准时间)],
[ 2021 年 4 月 25 日星期日 00:00:00 GMT+0900(日本标准时间)],
[ 2021 年 4 月 26 日星期一 00:00:00 GMT+0900(日本标准时间)],
[ 2021 年 4 月 27 日星期二 00:00:00 GMT+0900(日本标准时间)],
[ 2021 年 4 月 28 日星期三 00:00:00 GMT+0900(日本标准时间)],
[ 2021 年 4 月 29 日星期四 00:00:00 GMT+0900(日本标准时间)],
[ 2021 年 4 月 30 日星期五 00:00:00 GMT+0900(日本标准时间)],
[ 2021 年 5 月 1 日星期六 00:00:00 GMT+0900(日本标准时间)],
[ 2021 年 5 月 2 日星期日 00:00:00 GMT+0900(日本标准时间)],
[ 2021 年 5 月 3 日星期一 00:00:00 GMT+0900(日本标准时间)],
[ 2021 年 5 月 4 日星期二 00:00:00 GMT+0900(日本标准时间)],
[ 2021 年 5 月 5 日星期三 00:00:00 GMT+0900(日本标准时间)],
[ 2021 年 5 月 6 日星期四 00:00:00 GMT+0900(日本标准时间)],
[ 2021 年 5 月 7 日星期五 00:00:00 GMT+0900(日本标准时间)],
[ 2021 年 5 月 8 日星期六 00:00:00 GMT+0900(日本标准时间)],
[ 2021 年 5 月 9 日星期日 00:00:00 GMT+0900(日本标准时间)],
[ 2021 年 5 月 10 日星期一 00:00:00 GMT+0900(日本标准时间)],
[ 2021 年 5 月 11 日星期二 00:00:00 GMT+0900(日本标准时间)],
[ 2021 年 4 月 1 日星期四 00:00:00 GMT+0900(日本标准时间)],
[ 2021 年 4 月 2 日星期五 00:00:00 GMT+0900(日本标准时间)],

【问题讨论】:

  • 请包括您目前拥有的代码和数据,以仔细检查并准确了解您要做什么,因为从描述中看不太清楚。
  • 可能是因为H列中的内容不是日期而是文本,这可能吗?
  • @iansedano 我已经添加了代码。工作表A的H列是日期格式,但它包含不需要的信息,如console.log(range)所示。

标签: google-apps-script


【解决方案1】:

如果日期值是昨天,如何将所有行从一张表复制到另一张表。

我做了一些如下所示的示例数据:

Name Value DATA DATA DATA DATA DATA Date
Harry Powell 0.736 A A A A A 4/13/2166
John Carter 0.124 B B B B B 5/11/2021
Patricia Stewart 0.256 C C C C C 11/2/2032
Gregory Parker 0.322 A A A A A 11/24/1973
Nicholas Barnes 0.456 B B B B B 6/27/2051
Helen Thomas 0.061 C C C C C 10/15/1942
Anthony Morris 0.542 A A A A A 3/13/2090
Brian James 0.569 B B B B B 5/11/2021
Ruth Collins 0.804 C C C C C 5/5/1904
Philip Clark 0.692 A A A A A 7/9/1927
Brenda Cook 0.093 B B B B B 10/23/2130
William Watson 0.185 C C C C C 5/11/2021
Theresa Walker 0.407 A A A A A 8/12/2026
Gloria Lewis 0.851 B B B B B 3/7/1916
Linda Richardson 0.319 C C C C C 5/11/2021
Virginia Edwards 0.133 A A A A A 5/11/2021
Ruby Roberts 0.964 B B B B B 6/30/1989
Rose Anderson 0.287 C C C C C 2/6/1966

日期在 H 列中。

这是在“表 A”中,还有另一个表称为“表 B”,只有页眉。

目标是将日期为 2021 年 5 月 11 日(今天是 2021 年 5 月 12 日)的所有行复制到“工作表 B”的底部。

使用 cmets 修改脚本

function code() {
  const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = spreadsheet.getSheetByName('Sheet A');
  const yesterday = new Date();
  yesterday.setDate(yesterday.getDate() - 1);
  
  // Everything up to here is fine

  // yesterday = Utilities.formatDate(yesterday,"JST", "yyyy/MM/dd"); // You could use this to output the date, it doesn't seem so practical to me to use it for comparison

  const yestYear = yesterday.getFullYear()
  const yestMonth = yesterday.getMonth()
  const yestDate = yesterday.getDate()

  // let range = sheet.getRange('H:H').getValues(); // This just gets the one row, better to get everything in one go

  // This detects all data in the sheet and creates a range to get everything.
  // It is assumed that you have data in column A
  // If not, you'll have to adjust the index position to get the date below
  const values = sheet.getDataRange().getValues(); 

  values.shift() // This removes the first row from the values (headers)

  const filteredDates = values.filter(row => {
    // Assuming that the Dates are always in column H (8th column, index position 7)
    // AND that there is data in column A (as mentioned above)
    const rowDateObject = row[7]

    // Grabbing date components
    const rowYear = rowDateObject.getFullYear()
    const rowMonth = rowDateObject.getMonth()
    const rowDate = rowDateObject.getDate()

    // Here is where the filtering happens
    if (
      yestYear === rowYear &&
      yestMonth === rowMonth &&
      yestDate === rowDate
    ) {
      return true
    } else {
      return false
    }
  })

  const outputSheet = spreadsheet.getSheetByName("Sheet B")
  
  filteredDates.forEach(row => outputSheet.appendRow(row))
}

所采用的方法只是使用 Native JavaScript Date 函数来比较日期,而不是尝试使用 Utilities 来比较格式化的日期。我相信这会容易出现一些烦人的错误。

然后它使用数组函数,如filterforEach,它们采用Callback 函数。这些函数在数组的每个元素上运行,在 getValues 的情况下是行。

结果

运行后,“表 B”如下所示:

Name Value DATA DATA DATA DATA DATA Date
John Carter 0.124 B B B B B 5/11/2021
Brian James 0.568 B B B B B 5/11/2021
William Watson 0.185 C C C C C 5/11/2021
Linda Richardson 0.319 C C C C C 5/11/2021
Virginia Edwards 0.133 A A A A A 5/11/2021

参考

【讨论】:

  • 非常感谢!它做的正是我想要做的。详细的解释也很有帮助。我想在将来使用它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多