큰 스프레드 시트에서 어떤 셀에 수식 종속성이 있는지 알고 싶습니다. OpenOffice와 같은 것을 할 수있는 방법을 찾고 있습니다
도구> 탐정> 추적 의존
과
편집> 찾기 및 바꾸기> 수식 검색
또는 주어진 셀 값이 참조되고 참조 소스를 식별 할 때 호출되는 GAS에서 트리거를 작성하는 방법.
답변
다음 코드는 스프레드 시트에 메뉴를 추가합니다.
형사> 미량 의존적
이것을 선택하면 모든 종속 셀 참조와 함께 활성 셀에 메모가 추가됩니다.
(아래 Graham이 제안한 정적 참조 검색 추가)
traceDependents 함수에 유사한 함수를 추가하여 활성 셀 내에서 텍스트에서 함수 검색 기능을 검색 할 수 있습니다. 나는 그것을 당신을위한 운동으로 남겨 둘 것입니다.
function onOpen() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var menuEntries = []
menuEntries.push({name: "Trace Dependents", functionName: "traceDependents"});
ss.addMenu("Detective", menuEntries);
}
function traceDependents(){
var dependents = []
var ss = SpreadsheetApp.getActiveSpreadsheet();
var currentCell = ss.getActiveCell();
var currentCellRef = currentCell.getA1Notation();
var range = ss.getDataRange();
var regex = new RegExp("\\b" + currentCellRef + "\\b");
var formulas = range.getFormulas();
for (var i = 0; i < formulas.length; i++){
var row = formulas[i];
for (var j = 0; j < row.length; j++){
var cellFormula = row[j].replace(/\$/g, "");
if (regex.test(cellFormula)){
dependents.push([i,j]);
}
}
}
var dependentRefs = [];
for (var k = 0; k < dependents.length; k ++){
var rowNum = dependents[k][0] + 1;
var colNum = dependents[k][1] + 1;
var cell = range.getCell(rowNum, colNum);
var cellRef = cell.getA1Notation();
dependentRefs.push(cellRef);
}
var output = "Dependents: ";
if(dependentRefs.length > 0){
output += dependentRefs.join(", ");
} else {
output += " None";
}
currentCell.setNote(output);
}
답변
이것은 슈퍼이며 많은 작업을 절약했습니다. 감사합니다.
그러나 위의 대답은 row- 또는 column-fixer를 사용하는 참조를 찾지 못합니다 $
.
코드를 다음과 같이 약간 변경하면 다음과 같은 이점이 있습니다.
function onOpen() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var menuEntries = []
menuEntries.push({name: "Trace Dependents", functionName: "traceDependents"});
ss.addMenu("Detective", menuEntries);
}
function traceDependents(){
var dependents = []
var ss = SpreadsheetApp.getActiveSpreadsheet();
var currentCell = ss.getActiveCell();
var currentCellRef = currentCell.getA1Notation();
var range = ss.getDataRange();
var regex = new RegExp("\\b" + currentCellRef + "\\b");
var formulas = range.getFormulas();
for (var i = 0; i < formulas.length; i++){
var row = formulas[i];
for (var j = 0; j < row.length; j++){
var cellFormula = row[j].replace(/\$/g, "");
if (regex.test(cellFormula)){
dependents.push([i,j]);
}
}
}
var dependentRefs = [];
for (var k = 0; k < dependents.length; k ++){
var rowNum = dependents[k][0] + 1;
var colNum = dependents[k][1] + 1;
var cell = range.getCell(rowNum, colNum);
var cellRef = cell.getA1Notation();
dependentRefs.push(cellRef);
}
var output = "Dependents: ";
if(dependentRefs.length > 0){
output += dependentRefs.join(", ");
} else {
output += " None";
}
currentCell.setNote(output);
}