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 : 정의되지 않은 "length"속성을 읽을 수 없습니다. (line5, file "Code") – gillers322

+0

사실, 나는 문제가있다. 매시간 Microsft 플로우에서 새로운 데이터 행을 가져옵니다. 이 스크립트는 첫 번째 행이 이제는 올바른 날짜를 찾고 NOW()가 아니라 다른 모든 행이 업데이트되지 않도록 중지되기 때문에 문제가 발생합니다. 어떤 아이디어? 감사합니다. – gillers322

+0

데이터에 대해 물어볼 수 있습니까? 데이터를 알 수있을 때 솔루션을 찾으려고 노력할 수 있습니다. – Tanaike