【发布时间】:2021-09-06 01:43:58
【问题描述】:
是否可以使用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');
}
我没有发布整个脚本,因为它有点长。我正在使用脚本按日、月和年对行进行分组。现在我正在尝试处理 按天分组行 部分。
所以rowStartvariable 是脚本开始对行进行分组的行号。这个rowStart 变量需要随着行不断被记录而前进,否则每当执行脚本时,组将被复制、三重复制、四重复制等。
问题是我认为-24 不是一个好方法,因为有时由于 Google 触发器错误而无法记录数据,因此可能会跳过几行,这将导致分组函数从已经分组到前一天的行,这将复制前一天的组。
该脚本将在比较最后 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);
}
【问题讨论】:
标签: javascript google-apps-script google-sheets