簡體   English   中英

使用Google Apps腳本獲取工作表中包含數據的特定行為空的所有行

[英]get all rows in a sheet with data where a specific column is empty using Google Apps Scripts

我們的小組有一個Google表格供我們使用。 提交錄入文件后,我有一個GAS腳本將對其進行處理(在Google雲端硬盤中創建一些文件,發送一些電子郵件等)。

我使用的是每小時觸發一次,而不是觸發鏈接到表單的電子表格的表單提交事件。 有一個特定的原因無法解決此問題,但我可以根據需要進行解釋。

鏈接到表單的電子表格最終將具有數千行。

我的腳本將遍歷每個未處理的行。 我在電子表格上添加了一個列,以跟蹤已處理的行。 處理行時,會將某些字符串添加到列A。對於未處理的行,列A將為空。

我正在嘗試找到最快和最有效的方法來獲取所有未處理的行-A列為空白的行。

最初的想法:

  • 使用Sheet.getDataRange().getValues()來獲取所有行,遍歷每行,並處理未處理的行。 然后使用該行的索引來標記在電子表格上處理的行。 這種方法可以工作,但是在電子表格具有數千行之后,這種方法將變得非常慢。
  • 對電子表格應用過濾器,並在A列為空白的行上進行過濾。 我可以應用過濾器,但是似乎沒有一種簡單的方法來獲取所有可見行及其行號,因此我可以將它們標記為已處理。

因此,我發現可以在第二張紙上使用query功能來顯示A列為空的所有行,然后可以在腳本中使用該紙來處理需要處理的內容。

=query('Form Responses'!A:V, "SELECT * WHERE A IS NULL")

但這不包括“ Form Responses表中的行號,因此我不知道要在“ Form Responses上返回哪一行以標記已處理。

我能夠使用arrayformula添加行號,如下所示:

=query({arrayformula(row('Form Responses'!A:V)), 'Form Responses'!A:V}, "SELECT * WHERE Col2 IS NULL")

但這會添加一堆帶有數字的行,即使源表在該行中沒有數據也是如此。

而且,如果我不包括行號,那么如果我在具有query功能的工作表上調用Sheet.getDataRange() ,它仍然無法正常工作,它返回的行多於數據。

我制作了一個示例表-https: //docs.google.com/spreadsheets/d/1LYpqfj3clZiaGCPgp_eRfrxhQKWambRyQn3uNCFAIpU/edit?usp=sharing

那么,是否有一種快速/有效的方法來獲取表中特定列為空的所有行以及數據? 使用query還是其他方式?

對於純粹的Apps腳本答案,可以在工作表中查找值的位置,請使用TextFinder (我不確定這是否適合空字段)或getValues()以及循環應該足夠快。 您可能會考慮在使用getValues()之前對工作進行排序,或者在之后對數組進行排序,這取決於要查找的值,或者例如,如果您希望查找較新的項,則從最新條目開始循環。

但是,或者,如果您使用的是Sheets的公式,則可以輕松地將=row()添加到列(例如=arrayformula(row(A2:A)) ),以使=query的結果返回行號。 如果出於任何原因將此列添加到原始工作表都不可行,則可以將match結果與查詢結果作為搜索關鍵字,將原始工作表用作范圍,這取決於電子表格的結構。

暫無
暫無

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

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