저는 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'에서 직접 답변에 액세스하려면 어떻게합니까? 어떤 도움이 될 것입니다!
나는 어떻게되는지 모르겠지만, 난 그냥'Logger.log (e.values)를 넣어,'첫 번째 코드 라인, 거기에 무슨 일이 일어날 지 볼과는 정의됩니다. 이것이 일어날 수있는 특별한 이유가 있습니까? –
수동으로 실행하는 경우 전자는 항상 정의되지 않습니다. 그렇지 않으면 확신 할 수 없습니다.이 기능은 대개 여러 프로젝트를 기반으로 작동합니다. –
알겠습니다 ... 양식을 제출하면이 문제가 발생합니다. . –