簡體   English   中英

GAS:如何修改這段代碼以僅更改為空的單元格值?

[英]GAS: how to adapt this piece of code to change cell value only if it's empty?

我編寫了一個函數,該函數從電子表格的原始文本中提取一些所需的信息,並將其放在其他列中。 但我只想在該列為空時使用此函數(因為如果不為空,是因為其值是手動更新的)。 我嘗試使用下面的代碼,但是我發現s.getRange(2, 8, output.length, 1).getValue()不會告訴我給定的單元格是否為空。 那么,鑒於下面的代碼,我該如何實現?

var output = [];
   for (var i = 0; i < input.length; i++) {
     output.push([ findDate(input[i][0], 'myKeyWord:', -4, -3) ]);
     Logger.log("s.getRange(2, 8, output.length, 1).getValue() = " + s.getRange(2, 8, output.length, 1).getValue())
     if(s.getRange(2, 8, output.length, 1).getValue()){
        s.getRange(2, 8, output.length, 1).setValues(output); // 8 is col H
     }

如果我正確理解了您的用例,則可以使用以下條件,它將檢查單元格中是否有值(並且還可以防止單元格中任何空間的意外出現(有些人習慣於將白色單元格中的空格以刪除內容而不是清除單元格)

 if(s.getRange(2, 8, output.length, 1).getValue().toString().replace(/ /g,'').length > 0){
 ...
 }

編輯:以下@sscholefield評論:

當回答這個問題時,我確實很猶豫,想知道您是否必須檢查列或單個單元格...因為在談論手動編輯單元格的地方,我選擇了單個單元格,但看來我可能錯了...

如果你想檢查整列是空的,你可以修改代碼和替換getValue()getValues() ...詛咒這會不會是在比較充足,在這種情況下,想法是比較數組長度與“展平”數組的長度,如果為空(長度= 3),則后者類似於",,," ,並且同一示例的數組長度為[[],[],[],[]] (長度= 4)。

如您所見,我們有一個可以捕捉的長度差。

請告訴我們這是否可以解決問題。

我建議使用記錄器來准確查看您要比較的內容並做出相應的決定。

注意: 順便說一句,謝謝您的客氣,寫書是我正在認真考慮的事情,但是現在它仍然是一個項目,應該保密(哈哈... ;-)什么?互聯網 ? 我的天啊 ! 沒意識到...)

我無法發表評論,因此我需要在這里寫下,但是它更多的是觀察,而不是答案,並且與Serge的角度略有不同。

根據'output.length'的值,您要獲取一個多行數組,但是您使用getValue()而不是getValues()僅從該范圍的左上角單元格返回單個值。 這是您所期望的嗎?

如果需要檢查整個列是否為空,最好使用getValues()對該列創建一個數組,然后檢查該數組的長度是否為零(對於標題,請記住為-1)。

不幸的是,這將意味着兩階段檢查if(array.length-1!= 0),因為您必須迭代檢查是否array [i] ==''(空白)。 如果找到空格,則可以清除()范圍或更改數組,然后使用setValues()將其放回到列中。

暫無
暫無

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

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