Google स्प्रेडशीट में कस्टम फ़ंक्शन में एक सीमा कैसे पार करें?


44

मैं एक फंक्शन बनाना चाहता हूं, जो एक सीमा में हो ... जैसे कुछ:

function myFunction(range) {
  var firstColumn = range.getColumn();
  // loop over the range
}

एक सेल इसका उपयोग करते हुए संदर्भित करेगा:

=myFunction(A1:A4)

समस्या यह है कि जब मैं ऐसा करने की कोशिश करता हूं, तो पैरामीटर ऐसा लगता है कि यह केवल फ़ंक्शन को मान दे रहा है। इस प्रकार, मैं किसी भी रेंज मेथड का उपयोग नहीं कर सकता जैसे कि getColumn()। जब मैं ऐसा करने का प्रयास करता हूं, तो यह निम्नलिखित त्रुटि देता है:

त्रुटि: TypeError: फ़ंक्शन getColumn को 1,2,3 में नहीं पा सकते हैं।

मैं अपने कस्टम कार्यों में से केवल मूल्यों के बजाय एक वास्तविक सीमा कैसे भेज सकता हूं?

जवाबों:


22

इसलिए मैंने इसके अच्छे उत्तर के लिए लंबी और कठिन खोज की है और यहाँ वही है जो मैंने पाया है:

  1. एक अनमॉडिफ़ाइड रेंज पैरामीटर रेंज में कोशिकाओं के मूल्यों में गुजरता है , न कि सीमा खुद (जैसा कि पूरी तरह से समझाया गया है) पूर्व: जब आप ऐसा करते हैं=myFunction(a1:a2)

  2. अपने फ़ंक्शन में एक सीमा का उपयोग करने के लिए आपको पहले एक स्ट्रिंग (पूर्व:) के रूप में सीमा को पास करने की आवश्यकता है =myFunction("a1:a2"), फिर इसे फ़ंक्शन के अंदर निम्नलिखित कोड के साथ एक सीमा में बदल दें:

    Function myFunction(pRange){
      var sheet = SpreadsheetApp.getActiveSpreadsheet();
      var range = sheet.getRange(pRange);
    }
    
  3. अंत में, यदि आप एक सीमा में उत्तीर्ण होने के लाभ चाहते हैं (जैसे अन्य कक्षों के लिए समझदारी से प्रतिलिपि करने के लिए रेंज संदर्भ) और आप इसे एक स्ट्रिंग के रूप में पारित करना चाहते हैं, तो आपको एक डिफ़ॉल्ट फ़ंक्शन का उपयोग करना होगा जो एक सीमा को एक पैरामीटर के रूप में स्वीकार करता है और एक आउटपुट करता है स्ट्रिंग आप उपयोग कर सकते हैं। मैंने नीचे दिए गए दोनों तरीकों का विवरण दिया है, लेकिन मुझे दूसरा पसंद है।

    सभी Google स्प्रेडशीट के लिए: =myFunction(ADDRESS(row(A1),COLUMN(A1),4)&":"&ADDRESS(row(A2),COLUMN(A2),4));

    नए Google पत्रक के लिए: =myFunction(CELL("address",A1)&":"&CELL("address",A2));


क्या आप विस्तार से समझ सकते हैं कि "बुद्धिमानी से अन्य कक्षों के संदर्भ रेंज की नकल" का अर्थ है?
एमर्सन फर्रुगिया

Lifesaver। यह काम करता है, धन्यवाद।
जितिन पवित्राण

@EmersonFarrugia मैं गूगल शीट के लिए ऑटो-रिलेटिव रिलेटिव सेल रेफरेंस की क्षमता की बात कर रहा हूं जब आप एक सेल से दूसरे में फंक्शन्स कॉपी करते हैं
नाथन हन्ना

9

rangeजावास्क्रिप्ट के 2d सरणी के रूप में माना जाता है। आप पंक्तियों range.lengthकी संख्या और स्तंभों की संख्या के साथ प्राप्त कर सकते हैं range[0].length। यदि आप पंक्ति rऔर स्तंभ cउपयोग से मूल्य प्राप्त करना चाहते हैं range[r][c]:।


मैं यह पता लगाने की कोशिश कर रहा हूं कि रेंज में पहला कॉलम क्या है। उदाहरण के लिए, C1: F1 की रेंज में, मैं जानना चाहता हूं कि यह रेंज कॉलम C पर शुरू होती है
Senseful

आप की तरह एक सेल में अपने कार्य के लिए इस्तेमाल करेंगे @Senseful हैं: =myFunction(C1:F1), तो समारोह के अंदर range[0][0]का मूल्य वापस आ जाएगी C1, range[0][1]के परिणाम प्रदान करेंगे D1, range[0][2]के मूल्य में वापस आ जाएगी E1, आदि .. कि स्पष्ट है?
लिप्स डेस

मुझे लगता है कि मैं खुद को स्पष्ट रूप से नहीं समझा रहा हूं ... इस प्रश्न के आपके उत्तर को देखें । आपने सिफारिश की है कि मैं उपयोग करता हूं =weightedAverage(B3:D3,$B$2:$D$2), मैं दूसरा तर्क नहीं भेजकर फ़ंक्शन को अधिक त्रुटि प्रमाण बनाना चाहूंगा (अर्थात मैं इसे कॉल करना चाहता हूं =weightedAverage(B3:D3)), और फिर कोड को स्वचालित रूप से पता चल जाएगा कि सीमा बी पर शुरू होती है और समाप्त होती है डी, इसलिए इसे दूसरी पंक्ति से संबंधित मान मिलता है। नोट: मान "2" हार्डकोड किया जा सकता है, लेकिन "बी" हार्डकोड नहीं किया जाना चाहिए।
सांयकाल

1
@Senseful सामान्य तौर पर मैं हार्डकोड किए गए सामानों के खिलाफ हूं, और मुझे लगता है कि यह स्पष्ट है कि अगर भारित औसत दो पारसमों को ले जाएगा। इसलिए यदि आप हार्ड कोड के बारे में हैं तो कई अन्य चीजें हैं जो आप कर सकते हैं। मैं अभी नहीं ढूँढ सकता कि हम Bकिसी दिए हुए को कैसे प्राप्त कर सकते हैं range। मैं आपको आरंभिक गाइड ( goo.gl/hm0xT ) के माध्यम से जाने के लिए सुझाव दूंगा , यदि आप पहले से ही नहीं हैं, तो आप इस बारे में विचार कर सकते हैं कि आप रेंज और सेल के साथ कैसे खेल सकते हैं।
लिपिस

6

RangeGoogle स्प्रेडशीट फ़ंक्शन के पास से गुजरते समय , फ़्रेम paramRange.getValues()अंतर्निहित रूप से निष्पादित होता है और आपका फ़ंक्शन रेंज में मानों को स्ट्रिंग, संख्याओं या ऑब्जेक्ट्स (जैसे Date) के 2-आयामी सरणी के रूप में प्राप्त करता है । Rangeवस्तु अपने कस्टम स्प्रेडशीट समारोह तक नहीं पहुंचेगी।

TYPEOF()नीचे समारोह आपको बता देंगे कि कौन सा डेटा की तरह आप पैरामीटर के रूप में प्राप्त करते हैं। सूत्र

=TYPEOF(A1:A4)

स्क्रिप्ट को इस तरह कहेंगे:

समारोह गणना () {
  var resultCell = SpreadsheetApp.getActiveSheet ()। getActiveCell ();
  var paramRange = SpreadsheetApp.getActiveSheet ()। getRange ('A1: A4');
  var paramValues ​​= paramRange.getValues ​​();

  var resultValue = TYPEOF (paramValues);

  resultCell.setValue (resultValue);
}
फ़ंक्शन TYPEOF (मान) {
  अगर (टाइपो वैल्यू! == 'ऑब्जेक्ट')
    वापसी टाइपोफ़ मूल्य;

  var विवरण = '';
  अगर (मान उदाहरण एरियर) {
    विवरण + = '[' + value.length + ']';
    अगर (मान [0] उदाहरण एरियर)
      विवरण + = '[' + मूल्य [0] .length + ']';
  }

  var className = value.constructor.name;
  वापसी का नाम + विवरण;
}

3

एक विकल्प के रूप में, @ लिपीस की टिप्पणी से प्रेरित होकर, आप अपने कार्य को अतिरिक्त पैरामीटर के रूप में पंक्ति / स्तंभ निर्देशांक के साथ कॉल कर सकते हैं:

=myFunction(B1:C2; ROW(B1); COLUMN(B1); ROW(C2); COLUMN(C2))

इस रूप में, सूत्र को आसानी से अन्य कोशिकाओं में कॉपी (या खींचा) जा सकता है, और सेल / रेंज संदर्भ स्वचालित रूप से समायोजित हो जाएंगे।

आपके स्क्रिप्ट फ़ंक्शन को इस तरह अपडेट करना होगा:

function myFunction(rangeValues, startRow, startColumn, endRow, endColumn) {
  var range = SpreadsheetApp.getActiveSheet().getRange(startRow, startColumn, endRow - startRow + 1, endColumn - startColumn + 1);
  return "Range: " + range.getA1Notation();
}

ध्यान दें कि getRangeसमारोह लेता है startRow, startColumnहै, और फिर संख्या पंक्तियों की, और संख्या स्तंभों की - नहीं खत्म पंक्ति और अंत स्तंभ। इस प्रकार, अंकगणित।


मुझे लगता है कि सटीक जवाब है। ROW और COLUMN।
जियानवु चेन

3

यह किया जा सकता है । एक सक्रिय सेल में सूत्र को पार्स करके पारित रेंज का संदर्भ प्राप्त कर सकता है, जो कि फार्मूला युक्त सेल है। यह यह धारणा बनाता है कि कस्टम फ़ंक्शन का उपयोग अपने दम पर किया जाता है, और अधिक जटिल अभिव्यक्ति के भाग के रूप में नहीं: उदाहरण के लिए =myfunction(A1:C3), नहीं =sqrt(4+myfunction(A1:C3))

यह फ़ंक्शन उत्तीर्ण श्रेणी का पहला कॉलम इंडेक्स लौटाता है।

function myfunction(reference) {
  var sheet = SpreadsheetApp.getActiveSheet();
  var formula = SpreadsheetApp.getActiveRange().getFormula();
  var args = formula.match(/=\w+\((.*)\)/i)[1].split('!');
  try {
    if (args.length == 1) {
      var range = sheet.getRange(args[0]);
    }
    else {
      sheet = ss.getSheetByName(args[0].replace(/'/g, ''));
      range = sheet.getRange(args[1]);
    }
  }
  catch(e) {
    throw new Error(args.join('!') + ' is not a valid range');
  }

  // everything so far was only range extraction
  // the specific logic of the function begins here

  var firstColumn = range.getColumn();  // or whatever you want to do with the range
  return firstColumn;
}

मुझे लगता है कि यह पोस्ट भी स्टैक ओवरफ्लो पर निम्नलिखित प्रश्न का उत्तर देती है : स्प्रेडशीट फ़ंक्शंस के लिए सेल संदर्भों को पास करना
Ruben

2

मैंने user79865 के उत्तर में उत्कृष्ट विचार को बढ़ाया है , ताकि इसे अधिक मामलों के लिए काम किया जा सके और कस्टम फ़ंक्शन को कई तर्क दिए जा सकें।

इसका उपयोग करने के लिए, नीचे दिए गए कोड को कॉपी करें, और फिर अपने कस्टम फ़ंक्शन कॉल GetParamRanges()में इस तरह से, इसे अपना फ़ंक्शन नाम दें:

function CustomFunc(ref1, ref2) {

  var ranges = GetParamRanges("CustomFunc"); // substitute your function name here

  // ranges[0] contains the range object for ref1 (or null)
  // ranges[1] contains the range object for ref2 (or null)

  ... do what you want

  return what_you_want;
}

यहाँ एक सेल के रंग को वापस करने का एक उदाहरण दिया गया है:

/**
* Returns the background color of a cell
*
* @param {cell_ref} The address of the cell
* @return The color of the cell
* @customfunction
*/
function GetColor(ref) {

  return GetParamRanges("GetColor")[0].getBackground();
}

यहाँ कोड और कुछ और स्पष्टीकरण है:

/**
* Returns an array of the range object(s) referenced by the parameters in a call to a custom function from a cell
* The array will have an entry for each parameter. If the parameter was a reference to a cell or range then 
* its array element will contain the corresponding range object, otherwise it will be null.
*
* Limitations:
* - A range is returned only if a parameter expression is a single reference.
*   For example,=CustomFunc(A1+A2) would not return a range.
* - The parameter expressions in the cell formula may not contain commas or brackets.
*   For example, =CustomFunc(A1:A3,ATAN2(4,3),B:E) would not parse correctly.
* - The custom function may not appear more than once in the cell formula.
* - Sheet names may not contain commas, quotes or closing brackets.
* - The cell formula may contain white space around the commas separating the custom function parameters, or after
*   the custom function name, but not elsewhere within the custom function invocation.
* - There may be other limitations.
* 
* Examples:
*   Cell formula: =CUSTOMFUNC($A$1)
*   Usage:        var ranges = GetParamRanges("CustomFunc");
*   Result:       ranges[0]: range object for cell A1 in the sheet containing the formula
*
*   Cell formula: =CUSTOMFUNC(3, 'Expenses'!B7)
*   Usage:        var ranges = GetParamRanges("CustomFunc");
*   Result:       ranges[0]: null
*                 ranges[1]: range object for cell B7 in sheet Expenses
* 
*   Cell formula: =sqrt(4+myfunction(A1:C3))
*   Usage:        var ranges = GetParamRanges("MyFunction");
*   Result:       ranges[0]: range object for cells A1 through C3 in the sheet containing the formula
*
*   Cell formula: =CustomFunc(A1+A2, A1, A2)
*   Usage:        var ranges = GetParamRanges("CustomFunc");
*   Result:       ranges[0]: null
*                 ranges[1]: range object for cell A1 in the sheet containing the formula
*                 ranges[2]: range object for cell A2 in the sheet containing the formula
*
* @param {funcName} The name of the custom function (string, case-insensitive)
* @return The range(s) referenced by the parameters to the call
*/
function GetParamRanges(funcName) {
  var ourSheet = SpreadsheetApp.getActiveSheet();
  var formula = SpreadsheetApp.getActiveRange().getFormula();
  var re = new RegExp(".+" + funcName + "\\s*\\((.*?)\\)","i");
  var ranges=[]; // array of results

  try {
    var args = formula.match(re)[1].split(/\s*,\s*/) // arguments to custom function, separated by commas
    // if there are no args it fails and drops out here

    for (var i=0; i<args.length; i++) {
      var arg=args[i].split('!'); // see if arg has a sheet name
      try {
        if (arg.length == 1) { // if there's no sheet name then use the whole arg as the range definition
          ranges[i] = ourSheet.getRange(arg[0]);
        }
        else { // if there's a sheet name, use it (after removing quotes around it)
          var sheetName=arg[0].replace(/'/g, '');
          var otherSheet=SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName);
          ranges[i] = otherSheet.getRange(arg[1]);
        }
      }
      catch(e) { // assume it couldn't be identified as a range for whatever reason
        ranges[i]=null;
      }
    }
  }
  catch(e) {}

  return ranges
}

1
बिल्कुल भी बुरा नहीं है, लेकिन कृपया बताएं कि यह धारणा एक अभिरुचि समारोह का उपयोग केवल एक बार एक सूत्र में किया जाता है। Fi मुझे जैसे मंचों का उपयोग करने के लिए मिला: = CountCcolor (B5: B38, $ A40) / 2 + CountCcolor (B5: B38, $ A41) / 2 + CountCcolor (B5: B38, $ A42) / 2 + CountCcolor (B5: B38: , $ A43) / 2 + CountCcolor (B5: B38, $ A44) / 2 जो मैं इसे समझता हूं, वह इस तरह से काम नहीं करेगा। अगर हम इसे हल करने में सक्षम हो गया है तो यह बहुत अच्छा होगा।
haemse

1

मैं Google स्प्रेडशीट के माध्यम से Google स्प्रेडशीट में दो अलग-अलग कस्टम कार्यों को अलग करता हूं:

  1. एक एपीआई के लिए कॉल करने वाला; स्प्रेडशीटऐप, ( उदाहरण )
  2. एक जो कोई कॉल नहीं करता है, ( उदाहरण )

पहला कार्य लगभग कुछ भी करने में सक्षम है। स्प्रेडशीट सेवा को कॉल करने के अलावा, यह GmailApp या Google द्वारा उपलब्ध कराई गई किसी भी सेवा पर कॉल कर सकता है। एपीआई कॉल प्रक्रिया को धीमा कर देगा। उपलब्ध सभी विधि का उपयोग करने के लिए एक सीमा को फ़ंक्शन के माध्यम से पारित किया जा सकता है या पुनः प्राप्त किया जा सकता है।

दूसरा फ़ंक्शन केवल "स्प्रेडशीट" तक ही सीमित है। यहां कोई भी डेटा को फिर से काम करने के लिए जावास्क्रिप्ट का उपयोग कर सकता है। ये कार्य सामान्य रूप से बहुत तेजी से होते हैं। एक श्रेणी पास की गई, जो 2D-सरणी से अधिक कुछ नहीं है जिसमें मान हैं।


अपने प्रश्न में, आप .getColumn()विधि के लिए कॉल करके शुरू करते हैं । यह स्पष्ट रूप से इंगित करता है कि आपको टाइप 1 कस्टम फ़ंक्शन की आवश्यकता है, जैसा कि ऊपर वर्णित है।

एक कस्टम फ़ंक्शन बनाने के लिए स्प्रैडशीट और शीट सेट करने के तरीके के बारे में निम्नलिखित उत्तर देखें ।


1

मैं कुछ महीने पहले इस पर काम कर रहा था और एक बहुत ही सरल कीचड़ के साथ आया: प्रत्येक सेल के नाम के साथ एक नई शीट बनाएं जैसे कि इसकी सामग्री: सेल ए 1 जैसा दिख सकता है:

= arrayformula(cell("address",a1:z500))

शीट का नाम "Ref" दें। फिर जब आपको सामग्री के बजाय एक स्ट्रिंग के रूप में एक सेल के संदर्भ की आवश्यकता होती है, तो आप उपयोग करते हैं:

= some_new_function('Ref'!C45)

बेशक, आपको यह जांचने की आवश्यकता होगी कि फ़ंक्शन एक स्ट्रिंग (एक सेल) या 1 डी या 2 डी ऐरे पास हो गया है या नहीं। यदि आपको एक सरणी मिलती है, तो इसमें स्ट्रिंग्स के रूप में सभी सेल पते होंगे, लेकिन पहले सेल और चौड़ाई और ऊंचाई से, आप यह पता लगा सकते हैं कि आपको क्या चाहिए।


0

मैं पूरी सुबह इस पर काम कर रहा हूं और उपरोक्त गैर-उत्तरों पर चर्चा करने के साक्ष्य देख रहा हूं। समझदार और मैं दोनों पारित सेल का ADDRESS चाहते हैं, मूल्य नहीं। और जवाब बहुत आसान है। यह नहीं किया जा सकता है।

मुझे कुछ वर्कअराउंड मिले जो इस बात पर भरोसा करते हैं कि किस सेल में सूत्र है। यह कहना मुश्किल है कि क्या इससे सेंसेफुल को ऊपर लाने में मदद मिली होगी। तो मैं क्या कर रहा था?

The data.

     [A]      [B]       [C]       [D]     [E]     [F]       [H]
[1] Name      Wins     Losses    Shots   Points   Fouls   Most recent
                                                          WL Ratio
[2] Sophia     4         2         15      7       1         0
[3] Gloria     11        3         11      6       0         0
[4] Rene       2         0         4       0       0         0
[5] Sophia     7         4         18      9       1         1.5

कॉलम एच सोफिया है (जीत - प्रीविंस) / (हानियाँ - प्रीवॉल्स)

(7 - 4) / (4 - 2) = 1.5

लेकिन हम यह नहीं जानते हैं कि सोफिया पहले किस पंक्ति में दिखाई देती थी।
यह सब VLOOKUP का उपयोग करके किया जा सकता है यदि आप नाम कॉलम के रूप में हार्ड-कोड ए रखते हैं। VLOOKUP के बाद, मुझे कुछ #NA (नाम नहीं मिला) और # DIV0 (भाजक शून्य) मिल रहा था और इन स्थितियों में अधिक तालमेल दिखाने के लिए इसे = IF (IF (...)) के साथ लपेटा गया था। अब मेरे पास एक राक्षसी रूप से बड़ी अभिव्यक्ति थी जो अनिच्छुक और गैर-बनाए रखने योग्य थी। इसलिए मैं स्थूल विस्तार चाहता था (अस्तित्व में नहीं है), या कस्टम फ़ंक्शन।

लेकिन जब मैंने एक सहायक घटावप्रेववैल्यू (सेल) बनाया, तो यह बी 5 के बजाय "7" प्राप्त कर रहा था। पारित तर्कों से सेल या रेंज ऑब्जेक्ट प्राप्त करने का कोई अंतर्निहित तरीका नहीं है।
यदि मैं उपयोगकर्ता को दोहरे उद्धरणों में सेल नाम देता हूं, तो मैं यह कर सकता हूं ... सबप्रैक्टप्रवेलव्यू ("बी 5")। लेकिन यह वास्तव में हैमस्ट्रिंग कॉपी / पेस्ट और रिश्तेदार सेल विशेषताएं हैं।

लेकिन फिर मुझे एक वर्कअराउंड मिला।

स्प्रेडशीटApp.getActiveRange () वह CELL है जिसमें सूत्र है। मुझे बस इतना ही जानना चाहिए। पंक्ति संख्या। निम्न फ़ंक्शन एक NUMERIC स्तंभ संख्या लेता है और उस स्तंभ में पिछली घटना को घटाता है।

function SubtractPrevValue(colNum) 
{
  var curCell = SpreadsheetApp.getActiveRange();
  var curSheet = curCell.getSheet();
  var curRowIdx = curCell.getRowIndex();
  var name = curSheet.getRange(curRowIdx, 1).getValue();  // name to match
  var curVal =  curSheet.getRange(curRowIdx, colNum).getValue();

  var foundRowIdx = -1;
  for (var i=curRowIdx-1;i>1;i--)
  { 
    if (curSheet.getRange(i, 2).getValue() == name)
    {
      return curVal - curSheet.getRange(i, colNum).getValue();
    }
  }
  return curVal;  //default if no previous found
}

लेकिन तब मुझे पता चला कि यह वास्तव में बहुत धीमी है। एक और दो सेकंड की देरी, जबकि यह "थिंकिंग ..." प्रदर्शित करता है, इसलिए मैं बड़े पैमाने पर गैरकानूनी, अचिन्त्य पत्र पत्रक सूत्र पर वापस आ गया हूं।


0

"रेंज" ऑब्जेक्ट प्रदान करने के बजाय, Google डेवलपर्स बहुत अधिक यादृच्छिक डेटा प्रकार पास करते हैं। इसलिए, मैंने इनपुट के मूल्य को प्रिंट करने के लिए निम्नलिखित मैक्रो विकसित किया।

function tp_detail(arg)
{
    var details = '';

    try
    {
        if(typeof arg == 'undefined')
           return details += 'empty';

        if (typeof arg !== 'object')
        {
            if (typeof arg == 'undefined')
                return details += 'empty';

            if (arg.map)
            {
                var rv = 'map: {';
                var count = 1;
                for (var a in arg)
                {
                    rv += '[' + count + '] ' + tp_detail(a);
                    count = count + 1;
                }
                rv += '}; '
                return rv;
            }
            return (typeof arg) + '(\'' + arg + '\')';
        }


        if (arg instanceof Array)
        {
            details += 'arr[' + arg.length + ']: {';
            for (var i = 0; i < arg.length; i++)
            {
                details += '[' + i + '] ' + tp_detail(arg[i]) + ';';
            }
            details += '} ';
        }
        else
        {

            var className = arg.constructor.name;
            return className + '(' + arg + ')';
        }
    }
    catch (e)
    {
        var details = '';
        details = 'err : ' + e;
    }


    return details;
}

0

पिछले उत्तरों का मेरा संकलन है

**
 *
 * @customfunction
 **/
function GFR(){
  var ar = SpreadsheetApp.getActiveRange();
  var as = SpreadsheetApp.getActive();
  return ar.getFormula()
    .replace(/=gfr\((.*?)\)/i, '$1')
    .split(/[,;]/)
    .reduce(function(p, a1Notation){
      try{
        var range = as.getRange(a1Notation);
        p.push(Utilities.formatString(
          'Is "%s" a Range? %s', 
          a1Notation,
          !!range.getDisplayValues
        ));
      } catch(err){
        p.push([a1Notation + ' ' + err.message]);
      }
    return p;
  },[]);
}

यह वर्तमान सूत्र लेता है और जाँचता है कि क्या यह एक रेंज है।

=GFR(A1:A5;1;C1:C2;D1&D2) रिटर्न

|Is "A1:A5" a Range? true|
|1 Range not found       |
|Is "C1:C2" a Range? true|
|D1&D2 Range not found   |

पूर्ण संरचना के लिए टीसी कुछ इस तरह से कॉल कर सकता है

var range = as.getRange(a1Notation);
var column = range.getColumn();

-1

फ़ंक्शन बनाएं और तर्क के रूप में सीमा पास करें:

function fn(input) {
    var cell = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0].getRange(SpreadsheetApp.getActiveRange().getFormula().match(/=\w+\((.*)\)/i)[1].split('!'));
    // above ... cell is "range", can convert to array?
    var sum=0;
    for (var i in cell.getValues() ){
        sum = sum + Number(cell.getValues()[i]);
    }  
    return sum;
}

स्प्रेडशीट में उपयोग:

=fn(A1:A10)

यह मान दिखाएगा sum(A1:A10)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.