在 Google Sheets 宏功能中删除一行

问题描述 投票:0回答:1

我基本上试图拥有一个函数,如果“D”列日期已经过去,它将删除一行,这样它就可以每天早上更新

到目前为止我已经

function UntitledMacro() {
  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.getRange('A2:G185').activate()
  .sort([{column: 4, ascending: true}, {column: 1, ascending: true}, {column: 5, ascending: true}]);
}

我目前正在使用非常简单的lol,它用于排序,但想添加附加功能。

时间戳 电子邮件地址 姓名:姓、名 选择您可以接到电话的日期: 什么转变? 首选联系方式: 联系电话
2024年11月17日19:54:58 [电子邮件受保护] 约翰·多伊 2024 年 11 月 16 日 白班 文字 385-123-4568
2024年11月14日16:30:38 [电子邮件受保护] 多伊,简 2024 年 11 月 17 日 夜班 致电 385-123-4568
function deleteCompletedRow() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.getSheetByName("Sheet1");
const sheetData = sheet.getDataRange().getValues();
const sheetDataHeaders = sheetData[0];
for (let i = sheetData.length - 1; i > 0; i--) {
if (sheetData[i][sheetDataHeaders.indexOf("Detail")] == "Completed") {
    sheet.deleteRow(i + 1);
}

^是我从推荐链接导入的内容,如果我将标题切换到“详细信息”并填写完成的列,它也不会删除它,它会将其排序到底部,但这可能是因为我需要添加它在其他功能之前?

google-sheets google-apps-script
1个回答
0
投票

您想要删除 D 列中的日期小于今天日期的行。

考虑这个答案:

  • var today = new Date()
    - 获取今天的日期
  • for (var r=(+sheetData.length-1);r>0;r--){
    - 从下到上循环数据,这样索引号就不会被打乱
  • var shiftDate = sheetData[r][3]
    - 这是 D 列中的值
  • if (shiftDate.valueOf() < today.valueOf()) {
    - 使用 valueOf (Date.prototype.valueOf()) 将班次日期与今天的日期进行比较。
  • sheet.deleteRow(+r+1)
    - 删除行
    • deleteRow 删除给定的行号,而不是变量“r”,它是从零开始的数组值。因此,“添加 1”即可删除要删除的行。

function deleteOldRows() {
  var  ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("Sheet1");
  var sheetData = sheet.getDataRange().getValues();
  console.log("length of sheetdata = "+sheetData.length)
  var today = new Date()

  // loop through the rows from bottom to top
  for (var r=(+sheetData.length-1);r>0;r--){
    var shiftDate = sheetData[r][3]
    //Logger.log("row = "+r+", the date = "+shiftDate+", value = "+shiftDate.valueOf())

    if (shiftDate.valueOf() < today.valueOf()) {
      Logger.log("delete this row"+"row = "+r+", the date = "+shiftDate+", value = "+shiftDate.valueOf())
      sheet.deleteRow(+r+1);
    }else{
      Logger.log("dont delete this row"+"row = "+r+", the date = "+shiftDate+", value = "+shiftDate.valueOf())
    }
  }
}

示例 - 之前

before


示例 - 之后

after


© www.soinside.com 2019 - 2024. All rights reserved.