2012-09-09 11 views
5

getRange किसी क्षेत्र के बजाय नामित श्रेणी के लिए उपयोग किया जा सकता है?
जब मुझे ऐसा लगता है, तो यह कहता है कि तर्क एक सीमा होना चाहिए। उदाहरण के लिए,स्क्रिप्ट का उपयोग कर नामित श्रेणी Google स्प्रेडशीट के साथ getRange

बजाय:

 getRange("A4:E7"); 

A4:E7 के क्षेत्र sheet1 में के नाम 'कहा जाता नामांकित श्रेणी में किया गया है।

आप शायद का उपयोग किया जा सका:

var tableRange = SpreadsheetApp.getActiveSpreadsheet();.getRangeByName("Names"); 
getRange(tableRange); 

या वहां यह कर के किसी भी अन्य तरीका है। पूर्ण कोड है:

function onEdit(event){ 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var editedCell = ss.getActiveCell(); 

    var columnToSortBy = 1; 
    var tableRange = ss.getRangeByName("Names"); 

    if(editedCell.getColumn() == columnToSortBy){ 
     var range = ss.getRange(tableRange); 
     range.sort({ column : columnToSortBy }); 
    } 
} 
+0

अभी भी इस पर अटक गया - मुझे यकीन नहीं है कि Google स्क्रिप्ट परिभाषित नाम का उपयोग क्यों नहीं कर रहा है – user1658604

+0

आपकी समस्या का उत्तर नहीं है, लेकिन केवल एक सुझाव है: आपको 'getActiveCell() 'की आवश्यकता नहीं है। संपादन ईवेंट स्क्रिप्ट में संपादित सीमा को पास करता है ताकि आप केवल 'event.range.getColumn() 'का उपयोग कर सकें। – Tharkon

उत्तर

10

https://developers.google.com/apps-script/class_spreadsheet#getRangeByName

कस्टम नामित श्रेणी के A1 पता लौटने समारोह:

=myGetRangeByName("Names") 

यह: स्प्रेडशीट पर

function myGetRangeByName(n) { // just a wrapper 
    return SpreadsheetApp.getActiveSpreadsheet().getRangeByName(n).getA1Notation(); 
} 

फिर, एक सेल में सेल में जो भी "नाम" परिभाषित किया गया है उसे रखेगा। जब आप जीएएस के आक्रामक कैशिंग के कारण "नाम" को फिर से परिभाषित करते हैं तो यह अपडेट नहीं होगा। हालांकि, आप जीएएस को प्रत्येक शीट गणना पर अपडेट करने के लिए मजबूर कर सकते हैं।

=myGetRangeByName("Names",now()) 

जावास्क्रिप्ट अप्रयुक्त पैरामीटर को अनदेखा कर देगा।

निम्नलिखित कोड जो आपको लगता है वह करता है। जब शीट का पहला कॉलम संपादित किया जाता है, तो वह उस कॉलम के आधार पर रेंज को टाइप करता है।

function onEdit(e) { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var editedCell = ss.getActiveCell(); 
    var columnToSortBy = 1; 
    var tableRange = ss.getRangeByName("Names"); 
    if (editedCell.getColumn() == columnToSortBy) { 
    tableRange.sort(columnToSortBy); 
    } 
} 

यह काम नहीं होगा यदि आप सूची से स्तंभ एक ले जाते हैं, क्योंकि getColumn() पूर्ण स्तंभ, नहीं रेंज में सेल के स्थान देता है। इसके लिए समायोजित करने के लिए आपको कोड जोड़ना होगा।

+0

उस 'अब() 'के साथ क्या है? मैंने इसे एक चादर में रखा और यह गलती हुई। अब() पैरामीटर के लिए – jcollum

+0

https://support.google.com/drive/bin/static.py?hl=hi&topic=25273&page=table.cs&tab=1240285 – HardScale

+0

+1, ठंडा! – mTorres

संबंधित मुद्दे