Выбор этого добавит примечание к активной ячейке со всеми зависимыми ссылками ячейки.
(добавлен поиск статических ссылок, как предложено Грэмом ниже)
Вы можете добавить аналогичную функцию в функцию 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);
}
Это потрясающе. Я думаю, что вы можете удалить лишнюю строку: var output = "Dependents:";
Jaredcohe
Хорошо пойман. Я удалил это. Спасибо за орлиные глаза.
Том Хорвуд
Мне это очень нравится! Правильно ли я вижу, что он не поддерживает именованные диапазоны? И если это так, будет ли просто / сложно добавить поддержку?
Визек
2
Как использовать код?
Ferrybig
1
почему строка menuEntries.push({name: "Trace Dependents", functionName: "traceDependents"});появляется дважды в коде?
ThomasMcLeod
4
Это супер и сэкономило мне много работы - спасибо.
Однако ответ выше не находит ссылок, использующих фиксатор строк или столбцов $.
Следующее небольшое изменение в коде выполняет это:
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);
}
Благодарность; это помогло несколько. Как можно заставить его работать на рабочих листах?
wizonesolutions
Спасибо, Грэм, я включил твои изменения. Что касается работы с листами, код должен был бы быть немного скорректирован, чтобы включить имя листа, а затем
menuEntries.push({name: "Trace Dependents", functionName: "traceDependents"});
появляется дважды в коде?Это супер и сэкономило мне много работы - спасибо.
Однако ответ выше не находит ссылок, использующих фиксатор строк или столбцов
$
.Следующее небольшое изменение в коде выполняет это:
источник