Google स्प्रेडशीट में, यह ज्ञात करना कि कौन से सूत्र दिए गए मान का संदर्भ देते हैं


17

मैं यह पता लगाना चाहूंगा कि बड़ी स्प्रेडशीट में कौन से सेल में फार्मूला निर्भरता है। मैं OpenOffice जैसी कुछ करने की राह देख रहा हूं

उपकरण> जासूसी> ट्रेस आश्रितों

तथा

संपादित करें> सूत्रों में खोजें और बदलें> खोजें

या जीएएस में एक ट्रिगर बनाने का एक तरीका जो तब मिलता है जब किसी दिए गए सेल मान को संदर्भित किया जाता है और संदर्भ के स्रोत की पहचान कर सकता है।

जवाबों:


12

निम्न कोड स्प्रेडशीट में एक मेनू जोड़ देगा:

जासूस> ट्रेस डिपेंडेंट

इसे चुनने से सभी निर्भर सेल संदर्भों के साथ सक्रिय सेल में एक नोट जुड़ जाएगा।

(नीचे ग्राहम द्वारा सुझाए गए स्थिर संदर्भों के लिए खोज को जोड़ा गया)

आप एक समान फ़ंक्शन को ट्रेस पर निर्भरता फ़ंक्शन में खोज सूत्र के लिए सक्रिय कक्ष के लिए पाठ के लिए खोज करने के लिए फ़ंक्शन जोड़ सकते हैं। मैं तुम्हारे लिए एक अभ्यास के रूप में छोड़ दूँगा।

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 आउटपुट = "आश्रित:";
जारेडकोए

अच्छी तरह से पकड़ा गया। मैंने इसे हटा दिया है। चील आंखों के लिए धन्यवाद।
टॉम होरवुड

मुझे यह बहुत पसंद है! क्या मैं इसे सही ढंग से देखता हूं कि यह नामांकित रेंज का समर्थन नहीं करता है, हालांकि? और अगर ऐसा है, तो क्या समर्थन जोड़ना सरल / जटिल होगा?
विसेक

2
कोड का उपयोग कैसे करें?
फेरेबिग

1
menuEntries.push({name: "Trace Dependents", functionName: "traceDependents"});कोड में दो बार लाइन क्यों दिखाई देती है?
थॉमसएमसीएलोड

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);
}

धन्यवाद; इससे कुछ हद तक मदद मिली। कार्यपत्रकों में यह कैसे काम करेगा?
विगोनिस्पेशंस

धन्यवाद ग्राहम - मैंने आपके बदलावों को शामिल किया है। वर्कशीट में काम करने के लिए, कोड को शीट नाम और फिर प्रत्येक शीट के माध्यम से लूप को समायोजित करने के लिए थोड़ा सा समायोजन की आवश्यकता होगी
टॉम होरवुड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.