변경 copyDown()스크립트를 운영하는 단 하나의 시트
-
11-12-2019 - |
문제
Google 스프레드시트에서 나는 시트 형태로 응답하고,오른쪽에 양식을 열이 나는 열 수식을 사용하는 형태로 데이터를 위한 기능입니다.
에서 시작했던 수식이 확장 행 그래서 그들은 새로운 양식을 제출하지만,을 발견하는 새로운 형태로 제출 것입 취소 행아웃:(.
대신 수동으로 확장을 공식 후 각 제출을 설치 앤드류 스틸맨의 copyDown()
스크립트;그것이 무엇을 복사래식한 후에 스크립트는 제출됩니다.
지금 하는 스크립트 작동될 때 수동으로 실행하지만,때 나는 설정된 트리거에 양식을 제출하는 그것을 복사했다는 공식에서는트 고 에는 모든 다른 시트 스프레드시트에서.나는 원하지 않는 부작용,그것이 sns 스프레드시트니다.:((
무엇을 생각하는 스크립트 편집도 작품에서 하나의 형태로 응답 시트가 아닌 모든 장입니다.지하는 방법을 알고 있습니다.
시트의 이름을 내가 원하는 그것을 실행하에서는"요청",그리고 gid=8
.
를 편집하려면 어떻게 해야 하는 이 스크립트를 위해서만 작동 하나 시트?
해결책
코드에서 실행하는 특정 시트를 사용하여.getSheetByName()메소드가 있습니다.예를 들어:
var ss = SpreadsheetApp.getActiveSpreadsheet();
var reqSh = ss.getSheetByName('Requests');
거기에 또 다른 방법으로 그는 편이 더 나을 것 같습니다.당신이 시도할 수 있습 유지하는 하나의 장을 순수하게 형태로 제출하고 사용 arrayformula 에서 두 번째 장에 복사하는 값에서 첫 번째 시트 같은 범위에서 두 번째입니다.
=ARRAYFORMULA(요청'!A1:H)는 복사본을 열을 H.
나는 당신과 같은 문제가와 이 솔루션입니다.나는 공식에서 두 번째 장에서 오른쪽에있는 열의 범위 및 복사에서 아래로 정상적인 방법입니다.공식 라고 복사한 범위에서 두 번째로 장입니다.그것은 일입니다.
내지는 못했지만 아이디어와 자신-나는 그것에 의해 제안되었다는 사람에 구글 스프레드시트에 포럼도 있습니다.나는 당신을 제공해야하는 게시물에 대한 링크를 하지만 나만 보았고 저는 그것을 찾을 수 없습니다.
다른 팁
에서 당신의 코드(댓글 코드)
var sheets = ss.getSheets() [8]; // you choose sheet [8]
var cellAddresses = new Object();
for (var i=0; i<sheets.length; i++) { // but you enter a for loop that adresses every sheet in turn...
var range = sheets[i].getDataRange();
당신은 단순히 억제 이 루프만 사용하시트 번호는 당신이 원하는 것을 진행...
가장 간단한 방법이 될 수 있을 하는 이를 다음과 같이 설명합니다:
var i = 8
var sheets = ss.getSheets() [i];
var cellAddresses = new Object();
var range = sheets[i].getDataRange();
...
의 끝에서 반복을 삭제합}적 for
루프
편집 :새 코드는 다음과 같이해야한다:
function copydown() {
setCopyDownUid();
setCopyDownSid();
logCopyDown();
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheets = ss.getSheets() [8];
var cellAddresses = new Object();
var i=8
// for (var i=0; i<sheets.length; i++) {
var range = sheets[i].getDataRange();
var lastRow = range.getLastRow();
var values = range.getValues();
for (var j=0; j<values.length; j++) {
for (var k=0; k<values[j].length; k++) {
var test = values[j][k].toString();
var start = test.indexOf("copydown");
if (start == 0) {
start = start+10;
var end = test.length-2;
var length = end-start;
var value = test.substr(start, length);
var col = k+1;
var nextRow = j+2;
var numRows = lastRow-(nextRow-1);
if (numRows>0) {
var destRange = sheets[i].getRange(nextRow, col, numRows, 1);
destRange.clear();
var newLastRow = sheets[i].getDataRange().getLastRow();
var newNumRows = newLastRow-(nextRow-1);
var newDestRange = sheets[i].getRange(nextRow, col, newNumRows, 1);
var cell = sheets[i].getRange(nextRow-1, col);
cell.setFormula(value);
cell.copyTo(newDestRange);
}
var cellAddress = cell.getA1Notation();
cellAddresses[cellAddress] = test;
}
}
}
Utilities.sleep(500);
resetCellValues(cellAddresses, sheets[i]);
}
//}