首页 > 解决方案 > 当第 1 列的日期随日期变化时获取行号

问题描述

是否可以使用 GAS 获取同一天日期块的第一行的行号?

在此处输入图像描述

在这种情况下,我需要获取行号“38”,因为它是 9 月 5 日行块的第一行。

目前我正在使用:

function groupDays() {
sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('LOG');
rowStart = sheet.getLastRow() - 24;
rows = sheet.getLastRow() - rowStart + 1;
dates = sheet.getRange(rowStart, 1, rows, 1).getValues().flat();
  groupDates(dates, 'date');
}

我没有发布整个脚本,因为它有点长。我正在使用脚本按日、月和年对行进行分组。现在我正在尝试按天处理组行。所以rowStart变量是脚本开始对行进行分组的行号。这个rowStart变量需要随着行不断被记录而前进,否则每当执行脚本时,组将被复制、三重复制、四重复制等。

问题是我认为-24这不是一个好方法,因为有时由于 Google Trigger 错误而无法记录数据,因此可能会跳过几行,这将导致分组函数从已经分组的行开始前一天,这将复制前一天的组。

该脚本将在比较最后 2 行时执行,它检测到一天中的最后一行。然后它应该为属于刚刚结束的那一天的行创建一个组,这些行是未分组的。

那么有没有办法使用 Google Apps 脚本来获取最后一天行块中第一行的行号?

这是我的虚拟文件: https ://docs.google.com/spreadsheets/d/1ExXtmQ8nyuV1o_UtabVJ-TifIbORItFMWjtN6ZlruWc/edit?usp=sharing

编辑:

我使用以下答案之一进行了一些更改:

function getRowDay() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("LOG");
  var dateDay = sheet.getRange(sheet.getLastRow()-1, 1).getValue();
  var dayPlusMonth = Utilities.formatDate(dateDay, Session.getScriptTimeZone(), "dd/MM/YYYY");
  var cells = sheet.getRange("A5:A").createTextFinder(dayPlusMonth).findAll().map(x => x.getRowIndex());
  var firstRowOfDay = cells[0];
  //return cells[0];
  // log start
  console.log(dayPlusMonth);
  console.log(firstRowOfDay);
  console.log(sheet);
  console.log(dateDay);
  console.log(cells);
}

标签: javascriptgoogle-apps-scriptgoogle-sheets

解决方案


回答:

您可以通过使用提取最新日期.getLastRow(),然后使用单元格的值作为文本查找器参数来查找以日期开头的所有单元格。

代码:

function getRow() {
  const ss = SpreadsheetApp.getActiveSpreadsheet()
  const sheet = ss.getSheetByName("LOG")
  const date = sheet.getRange(sheet.getLastRow(), 1).getDisplayValue().slice(0, 11)

  const cells = sheet.getRange("A1:A").createTextFinder(date).findAll().map(x => x.getRow())

  return cells[0]

}

这段代码的概要:

  • 获取名为 的工作表LOG
  • 获取此工作表 A 列中的最后一个单元格,并提取单元格的前 10 个字符(这将是没有时间的日期部分,例如06/09/2021
  • 使用文本查找器在 A 列中搜索包含此日期的所有单元格
  • 将这些单元格范围映射到它们对应的行号
  • 返回 A 列中以此日期开头的第一个单元格

参考:


推荐阅读