मेरे पास दिए गए टैब नाम को खींचने के लिए एक बहुत ही सरल स्क्रिप्ट है:

function sheetName() {return SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getName();}

लेकिन जब मैं किसी टैब का नाम बदलूंगा तो यह अपडेट नहीं होगा। क्या कोई ऐसी स्क्रिप्ट है जिसे शीटनाम (), फ़ंक्शन को "पुनः निष्पादित" करने के लिए लिखा जा सकता है, सभी जगहों पर यह एक स्प्रेडशीट में पाया जाता है? बस एक बटन में पॉप करना पसंद करेंगे जो हर जगह शीटनाम() को फिर से चला सके ताकि टैब नामों के संदर्भ चालू रहें।

मैं इसके बारे में कुछ पुराने (~ 4 साल) प्रश्न देखता हूं, लेकिन कुछ वर्तमान खोजने के लिए संघर्ष कर रहा हूं। क्षमा करें अगर यह दोहराव है!

0
Sean 17 मार्च 2017, 22:54

2 जवाब

आप "परिवर्तन पर" चलाने के लिए एक ट्रिगर स्थापित कर सकते हैं मैंने एक शीट टैब को संपादित करने का प्रयास किया, और कोड चला।

function sheetNameReturn(e) {
  Logger.log(e.changeType)
  Logger.log('sheetName ran')

  return SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getName();
}

दुर्भाग्य से, इस पोस्ट के समय, ट्रिगर एक प्रकार की छोटी गाड़ी हैं। यदि आप एक ट्रिगर स्थापित करते हैं, और यह नहीं चलता है, तो आपको ट्रिगर को हटाना होगा, विंडो को बंद करना होगा, और प्रक्रिया को फिर से पूरा करना होगा और इसे सहेजना होगा।

मैंने फ़ंक्शन का नाम बदलकर sheetNameReturn कर दिया है, मुझे ट्रिगर चलाने में बहुत परेशानी हुई। मुझे ट्रिगर को हटाना पड़ा और इसे फिर से स्थापित करना पड़ा।

1
Alan Wells 17 मार्च 2017, 23:23
1
कभी-कभी ऑनएडिट शीट के नाम बदलने पर काम करता है और कभी-कभी यह तब तक नहीं होता जब तक कि मैं एक सेल को संपादित नहीं करता। अजीब।
 – 
Cooper
18 मार्च 2017, 03:29
हाँ - मुझे ट्रिगर्स के साथ बहुत भाग्य नहीं मिला है; पता नहीं था कि कोई सिस्टमिक (गैर ट्रिगर) कमांड था जो इसे कर सकता था ... मैं देखूंगा कि चेंज टाइप लॉगर जोड़ने से मदद मिलती है या नहीं। बहुत - बहुत धन्यवाद!
 – 
Sean
18 मार्च 2017, 05:43

अपनी शीट के नाम समान रखें

यदि आप अपनी शीट के नाम समान रखना चाहते हैं तो यहां केवल आपके लिए एक स्क्रिप्ट है। यह कुछ स्क्रिप्ट का उपयोग करता है जिन पर मैं हाल ही में काम कर रहा हूं जो आपको PropertiesService का उपयोग करने के बजाय फ़ाइलों में सरणी और सहयोगी सरणी सहेजने की अनुमति देता है। यह 100 प्रतिशत बग मुक्त नहीं हो सकता...लेकिन क्या है?

कोड.जीएस

function onOpen()
{
  SpreadsheetApp.getUi().createMenu('My Tools')
      .addItem('SaveSheetNames', 'SaveSheetNames')
      .addToUi();
}

function SaveSheetNames()
{
   var ss = SpreadsheetApp.getActiveSpreadsheet();
   var shts = ss.getSheets();
   var s = 'SheetNames:::DICT|***|';
   for(var i = 0; i<shts.length;i++)
   {
     if(i>0){s += '~~~';}
     s += shts[i].getSheetId() + '^^^' + shts[i].getSheetName();
   }
   saveFile(s);
}

function KeepSheetNames()
{
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var shts = ss.getSheets();
  var SheetNamesA = getArrayByName('SheetNames');
  for(var i = 0; i<shts.length;i++)
  {
      if(shts[i].getName() !== SheetNamesA[shts[i].getSheetId()])
      {
        shts[i].setName(SheetNamesA[shts[i].getSheetId()]);
      }
  }
}

ArrayFileStorage.gs

 //A segment is either an Array or an Associative Array obtain by splitting the data string inside the data file with this delimeter |@@@|
    //It returns an actual Associative Array 
    function getAssociativeArray(segment)
    {
      var segment = (typeof(segment))?segment:null;
      var C = [];
      var br = '<br />';
      if(segment)
      {
        var A = segment.split('~~~');//Array of key^^^value strings [key^^^value,key^^^value,key^^^value...]
        for(var i = 0;i<A.length;i++)
        {
          B=A[i].split('^^^');//KeyValueArray[key,val]
          C[B[0]]=B[1];//Dictionary or Associative Array {key:'value',key:'value',key:'value'...}
        }
      }
      return C;
    }

    //A segment is either an Array or an Associative Array obtain by splitting the data string inside the data file with this delimeter |@@@|
    //It returns an actual Array 
    function getArray(segment)
    {
      var segment = (typeof(segment))?segment:null;
      var br = '<br />';
      if(segment)
      {
        var A=segment.split('~~~');
      }
      return A;
    }

    //The above functions are used within this function so that it can return either type of array object requested
    function getArrayByName(name)
    {
      var name = (typeof(name) !== 'undefined')? name : null;
      var br = '<br />';
      if(name)
      {
        var data = loadFile('KeepSheetNames').split('|@@@|');//Array Data String two different forms possible
        for(var i=0;i<data.length;i++)
        {
          var A = data[i].split('|***|');
          var B = A[0];
          var segment = A[1];
          var nametype = B.split(':::');
          if(nametype[0]==name)
          {
            if(nametype[1]=='DICT')
            {
              var obj = getAssociativeArray(segment)
            }
            if(nametype[1]=='ARRAY')
            {
              var obj = getArray(segment);
            }
            break;
          }
        }
      }
      return obj;
    }

    //This function just displays the data stored within the default data file by splitting it with |@@@|
    function displayData()
    {
      s='';
      var data = loadFile('KeepSheetNames').split('|@@@|');
      for(var i=0;i<data.length;i++)
      {
        if(i>0)s+='<br />';
        s+=data[i];
      }
      s += '<br /><input type="button" value="Exit" onClick="google.script.host.close();" />'
      dispStatus('Display Data for Default File',s,1000,400);
    }

    //This function uses the saveFile function in Utility.gs to save data into default file.
    //This function will also add a new array to the end
    function saveArray(name,type,array)
    {
      var name = (typeof(name) !== 'undefined')? name : null;
      var type = (typeof(type) !== 'undefined')? type : null;
      var array = (typeof(array) !== 'undefined')? array : null;
      var types = ['DICT','ARRAY'];
      var isSaved = false;
      var isAValidType = false;
      for(var i=0;i<types.length;i++)
      {
        if(type == types[i])
        {
          isAValidType=true;
          break;
        }
      }
      if(name && isAValidType && array)
      {
        var data = loadFile('KeepSheetNames').split('|@@@|');
        var datstr = '';
        var idx = getIndexOf(name);
        var str = convertArrayToString(name,type,array);
        if(idx>-1)
        {
          data[idx]=str;
        }
        else
        {
          data.push(str);
        }
        for(var i = 0;i<data.length;i++)
        {
          if(i>0){datstr += '|@@@|';}
          datstr += data[i];
        }
        isSaved=saveFile(datstr);
      }
      else
      {
        SpreadsheetApp.getUi().alert('Invalid Input: Check your parameters in function saveArray().');
      }
      return isSaved;
    }

    //This function gets the index of the requested named data array
    function getIndexOf(name)
    {
      var name = (typeof(name) !== 'undefined')? name : null;
      var idx = -1;
      if(name)
      {
        var data = loadFile('KeepSheetNames').split('|@@@|');
        for(var i=0;i<data.length;i++)
        {
          var nametype = data[i].split(':::');
          if(name==nametype[0])
          {
            idx = i;
            break;
          }
        }
      }
      return idx;
    }

    //Takes the real arrays and converts them to strings so that they can be saved.
    function convertArrayToString(name,type,array)
    {
      var name = (typeof(name) !== 'undefined')? name : null;
      var type = (typeof(type) !== 'undefined')? type : null;
      var array = (typeof(array) !== 'undefined')? array : null;
      var types = ['DICT','ARRAY'];
      var ConvertedString='';
      var isAValidType = false;
      for(var i=0;i<types.length;i++)
      {
        if(type == types[i])
        {
          isAValidType=true;
          break;
        }
      }
      if(name && array && isAValidType)
      {
        ConvertedString += name + ':::' + type + '|***|';
        switch(type)
        {
          case 'ARRAY':

            for(var i=0;i<array.length;i++)
            {
              if(i>0){ConvertedString += '~~~';}
              ConvertedString += array[i];
            }
             break;
          case 'DICT':
            var firstTime = true;
            for(var key in array)
            {
              if(!firstTime){ConvertedString += '~~~';}
              ConvertedString += key + '^^^' + array[key];
              firstTime=false;
            }
             break;
        }
      }
      else
      {
        SpreadsheetApp.getUi().alert('Invalid Input: Check your parameters in function saveArray().');
      } 
      return ConvertedString;
    }

    //deletes a current data array
    function deleteArrayByName(name)
    {
      var name = (typeof(name) !== 'undefined')? name : null;
      var br = '<br />';
      var isSaved = false;
      if(name)
      {
        var delidx = getIndexOf(name);
        if(delidx > -1)
        {
          var datstr = '';
          var data = loadFile('KeepSheetNames').split('|@@@|');//Array Data String two different forms possible
          for(var i=0;i<data.length;i++)
          {
            if(delidx !== i)
            {
              if(i>0){datstr += '|@@@|';}
              datstr += data[i];
            }
          }
          isSaved=saveFile(datstr);
        }
      return isSaved;
      }
    }

    function dispFile(filename,folderID)
    {
      var filename = (typeof(filename) !== 'undefined')? filename : 'KeepSheetNames';
      var folderID = (typeof(folderID) !== 'undefined')? folderID : '';
      var file = loadFile();
      if(file)
      {
        dispStatus('Displaying File: ' + filename, file, 800, 500);
      }
      else
      {
        SpreadsheetApp.getUi().alert('File "' + filename + '" not found in function dispFile.');
      }
    }

    function loadFile(filename,folderID)
    {
      var filename = (typeof(filename) !== 'undefined')? filename : 'KeepSheetNames';
      var folderID = (typeof(folderID) !== 'undefined')? folderID : '';
      var fldr = DriveApp.getFolderById(folderID);
      var file = fldr.getFilesByName(filename);
      var s = '';
      while(file.hasNext())
      {
        var fi = file.next();
        var target = fi.getName();
        if(target == filename)
        {
          s = fi.getBlob().getDataAsString();
        }
      }
      return s;
    }

    function delFile(filename,folderID)
    {
      var filename = (typeof(filename) !== 'undefined')? filename : 'KeepSheetNames';
      var folderID = (typeof(folderID) !== 'undefined')? folderID : '';
      var fldr = DriveApp.getFolderById(folderID)
      var file = fldr.getFilesByName(filename);
      var targetFound = false;
      while(file.hasNext())
      {
        var fi = file.next();
        var target = fi.getName();
        if(target == filename)
        {
          targetFound = true;
          fldr.removeFile(fi);
          SpreadsheetApp.getUi().alert('File: ' + filename + ' was removed from: ' + fldr.getName() + '/' + target);
        }
      }
      return targetFound;
    }

    function saveFile(datstr,filename)
    {
      var filename = (typeof(filename) !== 'undefined')? filename : 'KeepSheetNames';
      var folderID = (typeof(folderID) !== 'undefined')? folderID : '';
      var fldr = DriveApp.getFolderById(folderID);
      var file = fldr.getFilesByName(filename);
      var targetFound = false;
      while(file.hasNext())
      {
        var fi = file.next();
        var target = fi.getName();
        if(target == filename)
        {
          targetFound = true;
          fi.setContent(datstr);
        }
        return targetFound;
      }
    }

उपयोगिता.जीएस

// Display a modeless dialog box with custom HtmlService content.
function dispStatus(title,html,width,height,modal)
{
  var title = typeof(title) !== 'undefined' ? title : 'No Title Provided';
  var width = typeof(width) !== 'undefined' ? width : 400;
  var height = typeof(height) !== 'undefined' ? height : 300;
  var html = typeof(html) !== 'undefined' ? html : '<p>No html provided.</p>';
  var modal = typeof(modal) !== 'undefined' ? modal : false;
  var htmlOutput = HtmlService
     .createHtmlOutput(html)
     .setWidth(width)
     .setHeight(height);
 if(!modal)
 {
   SpreadsheetApp.getUi().showModelessDialog(htmlOutput, title);
 }
 else
 {
   SpreadsheetApp.getUi().showModalDialog(htmlOutput, title);
 }
} 

KeepSheetNames() को कॉल करने के लिए आपको एक ऑनएडिट ट्रिगर सेट अप करना होगा और उसे यह करना चाहिए। मैंने इसके साथ थोड़ा सा खेला और ऐसा लगता है कि यह ठीक काम करता है। अगर आपको कुछ भी गलत लगता है तो उसे ठीक करने के लिए स्वतंत्र महसूस करें। साथ ही आपको अपने डेटा फोल्डर की आईडी जोड़नी होगी। मैंने फैसला किया कि इसे प्रकाशित करना शायद एक अच्छा विचार नहीं था।

0
Cooper 18 मार्च 2017, 02:44
सुनिश्चित नहीं है कि "शीट के नाम समान रखने" से आपका क्या मतलब है, लेकिन यहाँ वजन करने के लिए बहुत-बहुत धन्यवाद। मैं शीट ट्रिगर्स का उपयोग करने से बचने की कोशिश कर रहा हूं क्योंकि मैं उन्हें अविश्वसनीय पाता हूं। लोगों को अपडेट करने के लिए मैंने बस एक स्क्रिप्ट को एक बटन पर बांध दिया। हालांकि बहुत बहुत धन्यवाद!
 – 
Sean
20 मार्च 2017, 16:00
जब आप टैब नाम बदलते हैं तो कोड निष्पादित करने के बारे में चिंता करने के बजाय, मैं उस उद्देश्य के बारे में सोच रहा था कि आप उन्हें छोड़कर उन्हें बदलने की अनुमति नहीं देकर समस्या का समाधान कर सकते हैं और आपको केवल ऑनएडिट ट्रिगर को चालू करना है और फिर बदलाव करना है और फिर SaveSheetNames चलाएँ और फिर से एडिट ट्रिगर चालू करें और फिर आप शीट के नाम बदल सकते हैं। शायद अन्य समस्याएं हैं लेकिन विचार यही है।
 – 
Cooper
20 मार्च 2017, 17:28