0

저는 MS Office VBA에서 이전 한 Google Apps Script 및 Java의 새로운 기능을 제공합니다. 나는 이미 약간의 연구를 해왔지만, 여전히 도움이 필요하다.문자열 개체 수집 양식 응답

저는 회사에서 장비 움직임을 제어하기 위해 두 개의 양식을 설정했습니다. 장비를 보관소에서 꺼내야 할 때 그 중 하나는 반드시 채워 져야하며 다른 하나는 반납시에 채워야합니다. 그래서, 무엇을 가져 왔고 반환되었는지에 대한 개요를 얻기 위해 onFormSubmit 트리거를 설정하여 특정 스프레드 시트의 각 장비 상태를 전환합니다.

그러나, 나는 트리거 기능의 'E'인수를 사용하여이 작업을 수행 할 수있는 방법을 찾을 수 없습니다. 이 작업을 시도하는 데 시간이 좀 걸렸고 형식 응답을 사용하여 스프레드 시트를 조사하고 마지막 줄을 읽은 다음 필요한 정보를 분리했습니다. 가장 큰 문제는 응답이있는 스프레드 시트가 업데이트하는 데 약간의 시간이 걸리기 때문에 이런 식으로 작업하여 불안정한 부분을 발견했기 때문입니다. 어쨌든, 여기에 코드를 내가 "장비 제거 양식"지금이이다 : 나는 특정 질문의 답변 단일 문자열 개체를 얻을 수 있다면이 이벤트 인수에서, 여기에서 보는 것과

function onFormSubmit(e) { 

    Utilities.sleep(30000); // I put this to try to minimize the Spreadsheet update problem 

    var ds = SpreadsheetApp.openById("storage-control-sheet-id").getSheetByName("Control"); 
    var os = SpreadsheetApp.openById("form-responses-sheet-id").getSheetByName("Form Responses 1"); 
    var val = os.getRange(os.getLastRow(), 10, 1, 14).getValues().toString(); // holds data from region with the equipments names 
    var responsavel = os.getRange(os.getLastRow(), 4).getValue().toString(); // holds the name of the person in charge of equipment 
    var motivo = os.getRange(os.getLastRow(), 3).getValue().toString(); // holds the reason for using the equipment 
    var prevret = os.getRange(os.getLastRow(), 6).getValue(); // holds the date for returning the equipment 
    var table = ds.getRange("B3:B149").getValues(); // holds a list with equipment names 
    var output = ds.getRange("C3:F149").getValues(); // holds current info at the Storage Control Spreadsheet 
    // now working with the data collected... 
    var arr = []; 
    var indexes = []; // collect the lines that need to change on the ds object 
    val = val.split(","); 
    for (var i = 0; i<val.length; i++){ 
    if (val[i].toString()!=="") { 
     arr.push(val[i].trim()); 
    } 
    } 

    for (var i = 0; i<table.length;i++){ 
    if (arr.indexOf(table[i][0]) >= 0) { 
     indexes.push(i); //checking which lines on 'output' should change 
    } 
    } 
    for (var i = 0; i<indexes.length; i++) { 
    output[indexes[i]][0] = "In use"; 
    output[indexes[i]][1] = responsavel; 
    output[indexes[i]][2] = motivo; 
    output[indexes[i]][3] = prevret; 
    } 

    ds.getRange("C3:F149").setValues(output); 
    SpreadsheetApp.flush(); 
} 

'전자 '변수를 val 변수에 저장하면됩니다. 응답 스프레드 시트로 이동하는 대신 'e'에서 직접 답변에 액세스하려면 어떻게합니까? 어떤 도움이 될 것입니다!

답변

1

당신은 참조하여 이벤트에서 직접 값을 얻을 수 있습니다 그것은 여기에 설명되어 있습니다 "값"또는 "namedValues"속성입니다 : https://developers.google.com/apps-script/guides/triggers/events#form-submit

e.values 
    e.namedValues 

namedValues가 양식 필드 이름을 매핑하는 객체입니다 응답 값

값은 스프레드 시트에 나타나는 순서에 대한 응답을 포함하는 배열이다.

+0

나는 어떻게되는지 모르겠지만, 난 그냥'Logger.log (e.values)를 넣어,'첫 번째 코드 라인, 거기에 무슨 일이 일어날 지 볼과는 정의됩니다. 이것이 일어날 수있는 특별한 이유가 있습니까? –

+0

수동으로 실행하는 경우 전자는 항상 정의되지 않습니다. 그렇지 않으면 확신 할 수 없습니다.이 기능은 대개 여러 프로젝트를 기반으로 작동합니다. –

+0

알겠습니다 ... 양식을 제출하면이 문제가 발생합니다. . –