사용자가 HTML 양식을 사용하여 스프레드 시트에 데이터를 입력 할 수있는 스크립트를 작업 중입니다. 스크립트가 열을 통해 양식의 문자열을 검색하는 기능을 구현하려고합니다. 발견되면 행의 이전 데이터를 양식의 데이터로 덮어 써야합니다. 그렇지 않은 경우 데이터를 새 행으로 추가해야합니다.
이것은 내가 지금 가지고있는 스 니펫입니다.
var col4 = sheet.getRange(2, 4, sheet.getLastRow(), 1);
var searchCol4 = SSNs.createTextFinder(e.parameter.Col4);
searchCol4.matchEntireCell(true);
var existingCol4Row = searchCol4.findNext().getRow();
if (existingCol4Row !== null) {
var nextRow = existingCol4Row
} else {
var nextRow = sheet.getLastRow() + 1
}
var newRow = headers.map(function(header) {
return e.parameter[header]
})
sheet.getRange(nextRow, 1, 1, newRow.length).setValues([newRow])
내가 가진 문제는 스크립트가 열에서 일치하는 항목을 찾은 경우에만 작동한다는 것입니다. 그렇지 않은 경우 새 행을 추가하지 않습니다. 전체 if ...
문을 var nextRow = sheet.getLastRow() + 1
다음으로 바꾸면 스크립트가 새 행을 추가하지만 분명히 더 이상 이전 데이터를 대체하지 않습니다. 또한 existingCol4Row
동일한 결과로 조건을으로 변경해 보았습니다 .
팁이 있습니까?
편집 : ziganotschka 덕분에 코드가 작동했습니다. 나는 할 수 있는지 확인하는 조건문을 변경 searchCol4.findNext()
했다 null
보다는 searchCol4.findNext().getRow()
. 또한 null 범위에서 메서드를 호출하면 코드가 실패하는 것처럼 보이기 때문에 코드 가 그렇지 않은 .getRow()
경우 에만 호출 되도록했습니다 (로깅을 포함하여 해당 행을 지나는 것은 실행되지 않음). 다음은 작업 스 니펫입니다.searchCol4.findNext()
null
var Col4 = sheet.getRange(2, 4, sheet.getLastRow(), 1);
var searchCol4 = Col4.createTextFinder(e.parameter.Col4);
searchCol4.matchEntireCell(true);
var existingCol4 = searchCol4.findNext();
if (existingCol4 !== null) {
var nextRow = existingCol4.getRow();
} else {
var nextRow = sheet.getLastRow() + 1
}
로그 searchSSNs.findNext()
및 searchSSNs.findNext().getRow()
.
경우 searchSSNs.findNext()
이며 NULL
, getRow()
귀하의 경우 행이 그렇게 당신에게 검색 범위의 첫 번째 행을 반환합니다.
그러므로,
searchSSNs.findNext().getRow()
결코 될 것입니다 NULL
조건문을 다음으로 변경하십시오.
if (searchSSNs.findNext() !== null) {
사이드 노트 : 텍스트 파인더 범위 (
searchSSNs
또는searchCol4
?) 의 이름과 혼동 이 있습니다. 타이핑 실수라고 생각합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다