簡體   English   中英

Google表格腳本可根據多個單元格中的日期刪除行

[英]google sheets script to remove rows based on dates in multiple cells

我正在開發一個用於從電子表格中刪除舊內容的應用程序。 我發現有幾篇文章可以根據特定數據隱藏或刪除工作表,但始終位於單個單元格中。 我需要一些檢查每行三個單元格中的日期的東西。

該工作表由一個表格填充,該表格要求用戶在我們的視頻中輸入他們希望公告運行的三個日期,並在我所教的HS上打印公告。 我只想刪除舊數據,發現無數(可能是6或8個)腳本示例,它們執行了類似的操作,因此我抓住了一個示例並嘗試擴展邏輯語句以檢查C,D和E列(使用索引) , 當然)。

它可以工作,但是刪除日期不是今天的行,而是刪除所有三列中的日期。 我還需要讓它對空的單元格進行計數,使其像舊的一樣。

因此,我嘗試了Cooper下面建議的腳本,這是一個很大的進步。 它仍然會跳過帶有空值的行,在某些情況下,它會刪除我不想刪除的行。在所示的圖像中,表單接受了教師的輸入,這些教師提交公告內容的時間最多為三個日期。 我將工作表的格式設置為以紅色顯示舊日期,以綠色顯示今天的日期,以黃色顯示未來的日期。 我要刪除具有所有紅色或空白單元格的行。 但是,創可貼將迫使他們為所有三個選擇日期,而不是不允許非參賽者。 但是最好讓代碼將空白單元格識別為合格的。 [![每日公告數據表] [1]] [1]

這是最終有效的方法。 我敢肯定有一些更流暢的方法可以做到這一點,但實際上我的編程能力有所提高,首先是通過日志來解決問題,然后在有證據證明我所做的工作可以繼續進行下去。

 /* Here is the thinking: I need to have a script that is run from Add-ons that checks each cell of a range for dates. It can be done through conditional formatting bg colors, but that is redundant. The first thing is to create the functions that find and return row numbers that have all old dates. In the initial build these can be returned to the log (Logger.log()) inside of a for(loop). '*/ function readRows() { var sh=SpreadsheetApp.getActiveSheet(); var rg=sh.getDataRange(); var vA=rg.getValues(); var rowsDeleted=0; var today=new Date().valueOf(); //cycle through rows. In each row check column values for date. if date is old, add 1 to oldCount for(var i=vA.length-1;i>=0;i--) { var oldCount=0; if(new Date(vA[i][2]).valueOf()<today) { oldCount++; } if(new Date(vA[i][3]).valueOf()<today) { oldCount++; } if(new Date(vA[i][4]).valueOf()<today) { oldCount++; } if(oldCount>2) { sh.deleteRow(i+1); rowsDeleted++; } } Logger.log(rowsDeleted); } 

接下來,我想弄清楚如何制作將每日公告輸出到Doc或pdf的內容。

嘗試這個:

function readRows() {
  var sh=SpreadsheetApp.getActiveSheet();
  var rg=sh.getDataRange();
  var vA=rg.getValues();
  var rowsDeleted=0;
  var today=new Date().valueOf();
  for(var i=vA.length-1;i>=0;i--) {
    if ((new Date(vA[i][2]).valueOf()<today)||(new Date(vA[i][3]).valueOf()<today)||(new Date(vA[i][4]).valueOf()<today) ){
      sh.deleteRow(i+1);
      rowsDeleted++;
    }
  }
  Logger.log(rowsDeleted);
}

我不確定您想要什么,但這可能會有所幫助。 刪除行時,應從底部開始。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM