다음과 같이 함수 / 수식이있는 셀이있는 테이블이 있습니다.
마지막으로 사용한 행의 함수 / 수식을 복사하여 새 행을 만드는 스크립트가 필요합니다. 새 행을 만드는이 스크립트를 찾았 지만 functions / formulas는 복사하지 않습니다 . 수동으로 선택하고 복사하지 않고 어떻게 Google Apps Script에서이 형식 복사 작업을 구현할 수 있습니까?
다음과 같이 함수 / 수식이있는 셀이있는 테이블이 있습니다.
마지막으로 사용한 행의 함수 / 수식을 복사하여 새 행을 만드는 스크립트가 필요합니다. 새 행을 만드는이 스크립트를 찾았 지만 functions / formulas는 복사하지 않습니다 . 수동으로 선택하고 복사하지 않고 어떻게 Google Apps Script에서이 형식 복사 작업을 구현할 수 있습니까?
답변:
아래 코드를 사용하여 수식의 값을 일반 값으로 복사하십시오. 스프레드 시트 메뉴에서 도구를 선택하여 코드를 추가하십시오. 그런 다음 스크립트 편집기를 선택하고 코드를 추가하십시오. "버그"버튼을 누르고 스크립트를 인증하십시오.
// global
var ss = SpreadsheetApp.getActive();
function onOpen() {
var menu = [{name:"Add New Last Row", functionName:"addRow"}];
ss.addMenu("Extra", menu);
}
function addRow() {
var sh = ss.getActiveSheet(), lRow = sh.getLastRow();
var lCol = sh.getLastColumn(), range = sh.getRange(lRow,1,1,lCol);
sh.insertRowsAfter(lRow, 1);
range.copyTo(sh.getRange(lRow+1, 1, 1, lCol), {contentsOnly:false});
}
contentOnly 를 설정하면 false
표준 사본이 생성됩니다. 로 설정하면 true
값만 붙여 넣습니다. 찾은 예제 스크립트는 값을 붙여 넣는 것 이상을 수행합니다 .....
나는 당신을 위해 예제 파일을 만들었습니다 : 수식으로 행 추가
이 ArrayFormula는 스크립트를 사용하지 않고도 동일하게 수행 할 수 있습니다. D4에 입력하면 그 아래의 빈 셀이 있으면 자동으로 이월됩니다.
ArrayFormula(vlookup(B4:B:tax_table!$A$2:$G$8;3;true))
참고 : "B4 : B"는 B4에서 시작하여 열 끝까지 모든 셀을 봅니다.
ArrayArrayula는 그 아래의 셀에 자신을 복사합니다. 그 아래의 셀이 비어 있는지 확인하십시오.
상단 (첫 번째 행)에 새 행을 추가하고 첫 번째 상단 행에서 수식을 복사해야하는 경우 사용 getFormulas()
및 setFormulas()
함수에서 수식을 복사해야 합니다. firstRow
예를 들어 스프레드 시트에 헤더가있는 경우 값 을 2로 변경할 수 있습니다 .
function addFirstRow() {
var firstRow = 1;
var sh = ss.getActiveSheet();
var lCol = sh.getLastColumn();
var range = sh.getRange(firstRow, 1, 1, lCol);
var formulas = range.getFormulas();
sh.insertRowsAfter(1, 1);
newRange = sh.getRange(firstRow, 1, 1, lCol);
newRange.setFormulas(formulas);
}
이 문제를 해결하기 setFormula(range)
위해 예 를 들어을 사용했습니다 .
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[0];
var cell = sheet.getRange("B5");
cell.setFormula("=SUM(B3:B4)");
행 인덱스에 따라 수식이 자동으로 증가합니다.
마지막으로 onUpdate 또는 onEdit 트리거를 추가 할 수 있습니다.
onUpdate
트리거가 존재하지 않습니다.