0

Googleシートにデータを送信するMicrosoft Flowがあります。シートにデータが表示されると、セルの一部に隠れたアポストロフィがあり、計算が妨げられ、数式が防止されます。Googleシートのフォーマットをクリアする

私は計算を実行できるように数値でセルをフォーマットするスクリプトを持っています。私が行うことができないのは、実行したいセルからのアポストロフィ= NOW()をクリアして、タイムスタンプを作成できるようにすることです。

私はスクリプトを作成しましたが、このセルを自分の望むようにする方法はわかりません。このサンプルについて

function setFormat(){SpreadsheetApp.getActiveSheet().getRange("A2:A").getValue().replace("'=NOW()","=NOW()");SpreadsheetApp.getActiveSheet().getRange("C2:C").setNumberFormat('000');SpreadsheetApp.getActiveSheet().getRange("D2:D").setNumberFormat('000');SpreadsheetApp.getActiveSheet().getRange("E2:E").setNumberFormat('000');SpreadsheetApp.getActiveSheet().getRange("F2:F").setNumberFormat('000');}` 

format in cell

答えて

1

どのように?

  1. getValues()を使用すると、「A2:A」のデータが取得されます。 1で取得 https://developers.google.com/apps-script/reference/spreadsheet/range#getvalues

  2. データは'=NOW()から=NOW()に変換されます。

  3. setFormulas()を使用すると、変換されたデータは「A2:A」にインポートされます。 https://developers.google.com/apps-script/reference/spreadsheet/range#setformulasformulas

  4. setNumberFormat()がスクリプトに適しています。

サンプルスクリプト:

function setFormat(){ 
    var ss = SpreadsheetApp.getActiveSheet(); 
    var Data = ss.getRange("A2:A").getValues(); 
    var replacedData = [[i[0].replace("'=NOW()","=NOW()")] for each (i in Data) if(i[0])]; 
    ss.getRange(2, 1, replacedData.length, replacedData[0].length).setFormulas(replacedData); 

    ss.getRange("C2:C").setNumberFormat('000'); 
    ss.getRange("D2:D").setNumberFormat('000'); 
    ss.getRange("E2:E").setNumberFormat('000'); 
    ss.getRange("F2:F").setNumberFormat('000'); 
} 

私はあなたの質問を誤解している場合、私は申し訳ありません。

を追加し1:式として=NOW()の種類は、オブジェクトが

あります。そのため、文字列として'=NOW()のみがタイプを比較することによって式=NOW()に変換されます。さらにデータを追加すると、追加されたデータが変換されます。

function setFormat(){ 
    var ss = SpreadsheetApp.getActiveSheet(); 
    var Data = ss.getRange("A2:A").getValues(); 
    var replacedData = [typeof(i[0])=="object" ? ["=NOW()"] : [i[0].replace("'=NOW()","=NOW()")] for each (i in Data) if(i[0])]; 
    ss.getRange(2, 1, replacedData.length, replacedData[0].length).setFormulas(replacedData); 

    ss.getRange("C2:C").setNumberFormat('000'); 
    ss.getRange("D2:D").setNumberFormat('000'); 
    ss.getRange("E2:E").setNumberFormat('000'); 
    ss.getRange("F2:F").setNumberFormat('000'); 
} 

追加2:

このサンプル輸入は、新しいデータがインポートされた文字列としてオブジェクトを日付。

function setFormat(){ 
    var ss = SpreadsheetApp.getActiveSheet(); 
    var Data = ss.getRange("A2:A").getValues(); 
    var replacedData = [ 
     typeof(i[0])=="object" 
     ? [i[0]] 
     : [i[0].replace("=NOW()", Utilities.formatDate(
     new Date(), 
     Session.getScriptTimeZone(), 
     'yyyy/M/d HH:mm:ss') 
    ) 
    ] 
    for each (i in Data) if(i[0]) 
    ]; 
    ss.getRange(2, 1, replacedData.length, replacedData[0].length).setValues(replacedData); 

    ss.getRange("C2:C").setNumberFormat('000'); 
    ss.getRange("D2:D").setNumberFormat('000'); 
    ss.getRange("E2:E").setNumberFormat('000'); 
    ss.getRange("F2:F").setNumberFormat('000'); 
} 
+0

ありがとうございます - エラーが発生しました。TypeError:プロパティ "長さ"を未定義から読み取ることができません。 (line5、file "Code") – gillers322

+0

実際、私は問題にぶつかりました。新しいデータ行は毎時Microsftフローからインポートされます。スクリプトは、最初の行の後に停止しているので、今度はNOW()ではなく正しい日付を見つけているので、他のすべての行は更新されていません。何か案は?ありがとうございます – gillers322

+0

データについて聞かせてもよろしいですか?私がデータを知ることができたとき、私は解決策を見つけることを試みることができます。 – Tanaike

関連する問題