javascript - 当第 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 脚本来获取最后一天行块中第一行的行号?
编辑:
我使用以下答案之一进行了一些更改:
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);
}
解决方案
回答:
您可以通过使用提取最新日期.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 列中以此日期开头的第一个单元格
参考:
推荐阅读
- bash - 使用具有动态内容的对话单选列表创建 bash 脚本
- python - 遍历字典并从多个字典创建新字典
- python - 深度神经网络,反向传播一个隐藏层
- windows - 将 Firefox 窗口的大小调整为 400 像素以下
- php - 带有 php 的 Docker Centos 无法启动
- ios - 消除 UICollectionView 单元格之间的间隙
- javascript - JSDoc 中的类型断言函数
- c++ - Mingw g++ 显示垃圾输出,而它在其他 IDE 和 Ubuntu g++ 中运行
- python - 选择 Array 中以在任何可能位置截断的日期开头的时间戳
- regex - 如何使用正则表达式捕获主题标签之间的多行?