दिलचस्प पोस्ट
Android Proguard Javascript इंटरफ़ेस विफल मुझे जावा में एक विधि पैरामीटर पर "अंतिम" कीवर्ड का उपयोग क्यों करना चाहिए? IntelliJ IDEA में आंशिक संकलन को सक्षम करें आईपैड सफारी – कीबोर्ड को गायब बनाओ स्कैनफ़ दूसरी बार निष्पादित नहीं करेगा दिए गए अक्षांश / एलएनजी स्थान के लिए बाउंडिंग बॉक्स की गणना कैसे करें? आर: बेतरतीब डेटाएफ़्रेम अनुपात में एनएएस डालें मैं <text> युक्त एक संग्रहीत प्रक्रिया को कैसे प्राप्त करूं? सूचना: ऐरे को स्ट्रिंग रूपांतरण इन आईफोन ड्रैग / ड्रॉप क्या "glob" प्रकार पैटर्न के लिए java.util.regex का बराबर है? Asp.Net MVC 5 में लॉग-इन उपयोगकर्ता के UserID को प्राप्त करें रेल 3 में बनाम बनाम एक तीसरी पार्टी लाइब्रेरी में एक्लिप्स में ब्रेकपॉइंट कैसे सेट करें? एंड्रॉइड में प्रगति बार की प्रगति रंग कैसे बदल सकता है

अपडेट करने वाले डेटा को संक्षिप्त करने के लिए स्क्रिप्ट

मेरे पास टाइमशीट डेटा की एक Google स्प्रैडशीट है; इसमें प्रत्येक महीने की एक शीट होती है, प्रत्येक शीट में छह स्तंभ ब्लॉक होते हैं, एक प्रति ग्राहक प्रति ब्लॉक।

मैंने एक सारांश पत्रक बनाया है जो प्रत्येक ग्राहक के लिए कुल मिलाकर उसे एक सूची में प्रदर्शित करता है:

function getClientTotals(sheetname, colcount) { colcount = colcount ? colcount : 6; var res; var ss = SpreadsheetApp.openById('myid_goes_here'); if(ss) { res = []; var totrow = ss.getRange(sheetname + '!A1:ZZ1').getValues()[0]; for(var i = 0; i < totrow.length; i += colcount) { res.push([totrow[i], totrow[i + colcount - 1]]); } } return res; } 

मैंने तो बस मेरे सारांश पत्रक =getClientTotals($C$7,$C$8) युक्त एक कक्ष जोड़ा है जो महीने के लिए शीट नाम में गुजरता है और प्रत्येक ग्राहक के लिए कॉलमों की संख्या ("स्कीमा" संशोधनों के मामले में।

यह सब ठीक काम करता है, हालांकि, स्रोत डेटा को बदलते समय यह अपडेट नहीं होता है मैंने एक onEdit ट्रिगर जोड़ा है; कोई आनंद नहीं है। यदि आप स्क्रिप्ट एडिटर पर जाते हैं और सहेजें दबाते हैं तो यह अपडेट करता है, लेकिन वह उपयोगी नहीं है। क्या मैं कुछ भूल रहा हूँ?

Solutions Collecting From Web of "अपडेट करने वाले डेटा को संक्षिप्त करने के लिए स्क्रिप्ट"

आप तेजस्वी कैशिंग बग सुविधा याद कर रहे हैं यह इस तरह से काम करता है:

Google मानता है कि आपके सभी कस्टम फ़ंक्शन केवल उनके पैरामीटर मूल्यों पर निर्भर करते हैं, ताकि वे परिणाम निकाल सकें (आप वैकल्पिक रूप से अन्य स्थिर डेटा पर निर्भर कर सकते हैं)।

इस शर्त को देखते हुए वे आपके फ़ंक्शन का मूल्यांकन केवल तब कर सकते हैं जब कोई पैरामीटर बदलता है। जैसे

मान लें कि हमारे पास सेल बी 1 पर पाठ "10" है, फिर किसी अन्य सेल पर हम टाइप करें =myFunction(B1)

मेरी फंक्शन का मूल्यांकन किया जाएगा और इसके परिणाम पुनर्प्राप्त किए जाएंगे। तब यदि आप सेल बी 1 मान को "35" में बदलते हैं, तो कस्टम को उम्मीद के अनुसार पुनः मूल्यांकन किया जाएगा और नया परिणाम सामान्य रूप से पुनः प्राप्त होगा अब, यदि आप मूल बी 1 को फिर से मूल "10" में बदलते हैं, तो फिर से कोई मूल्यांकन नहीं होता है, मूल परिणाम कैश से तुरंत लिया जाता है।

इसलिए, जब आप चादर का नाम गतिशील रूप से लाने के लिए पैरामीटर के रूप में उपयोग करते हैं और परिणाम लौटाते हैं, तो आप कैशिंग नियम तोड़ रहे हैं।

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

कैशिंग समस्या के लिए एक अन्य समाधान

आपके विधि में एक डमी चर है उत्तीर्ण करना

 Filter(<the cell or cell range>,1=1) 

उस पैरामीटर के मान के रूप में

जैसे

 =getValueScript("B1","B4:Z10", filter(B4:Z10,1=1)) 

फ़िल्टर का उपयोग नहीं किया जाता है हालांकि यह स्प्रेडशीट को इंगित करता है कि यह सूत्र बी 4: Z10 रेंज के प्रति संवेदनशील है।

मुझे काम के लिए एक डैशबोर्ड बनाने की एक समान समस्या थी। आर्सेल के हालिया टिप्पणी के बावजूद, चामिल का ऊपर का समाधान (अर्थात् शीट के फ़िल्टर फ़ंक्शन को आपके फ़ंक्शन में डमी वेरिएबल के मान के रूप में पारित किया गया) का उपयोग किया जाता है मेरे मामले में, मैं एक श्रेणी का निरीक्षण करने के लिए एक फ़ंक्शन का उपयोग कर रहा था और एक ही सीमा पर फ़िल्टर का उपयोग नहीं कर सका क्योंकि उसने एक परिपत्र संदर्भ बनाया था। इसलिए मेरे पास सिर्फ एक सेल था (नीचे दिए गए कोड में मेरे मामले E45 में) जिसमें मैंने कभी भी नंबर बदल दिया है, जब मैं अपना फ़ंक्शन अपडेट करना चाहता हूं:

 =myFunction("E3:E43","D44",filter(E45,1=1)) 

जैसा कि चामेल ने संकेत दिया, फ़िल्टर का प्रयोग स्क्रिप्ट में नहीं किया गया है:

 function myFunction(range, colorRef, dummy) { variable 'dummy' not used in code here } 

आप क्या कर सकते हैं स्प्रैडशीट में कहीं और कक्ष स्थापित करना है जो हर बार एक नई शीट जुड़ जाती है। सुनिश्चित करें कि यह प्रत्येक परिवर्तन के लिए अपडेट नहीं करता है, लेकिन केवल जब आप गणना करना चाहते हैं (आपके मामले में जब आप एक शीट जोड़ते हैं)। फिर आप इस कक्ष के संदर्भ को अपने कस्टम फ़ंक्शन में पास कर सकते हैं। जैसा कि उल्लेख कस्टम फ़ंक्शन इस पैरामीटर को अनदेखा कर सकता है।

हेनरिक एब्रेू द्वारा समझाया गया सुविधा, आप आउट-ऑफ-बॉक्स स्प्रेडशीट फ़ंक्शन QUERY की कोशिश कर सकते हैं, कि एसक्यूएल ने क्वेरी को पसंद किया है जो कि मैं कच्चे डेटा पर अक्सर काम करता हूं, और एक अलग टैब पर डेटा को सारांश के रूप में प्राप्त करता है, परिणाम डेटा अपडेट होता है कच्चे आंकड़ों में परिवर्तन के बाद वास्तविक समय में

मेरा सुझाव इस तथ्य पर आधारित है कि आपकी स्क्रिप्ट में उन्नत काम नहीं है जैसे यूआरएल लाने, सिर्फ डेटा काम, बिना वास्तविक डेटा पढ़ी, मैं QUERY के साथ सटीक समाधान नहीं दे सकता

हेनरिक एब्रेू (मेरे पास सीधे उनके उत्तर के तहत टिप्पणी करने के लिए पर्याप्त प्रतिष्ठा नहीं है) द्वारा कैश सुविधा के संबंध में, मैंने परीक्षण किया और पाया कि:

  1. ऐसा दिखता है कि कोई कैश काम नहीं कर रहा है, नीचे दिखाया गया फ़ंक्शन की स्क्रिप्ट का परीक्षण करें:

    फ़ंक्शन योजक (बेस) {utilities.sleep (5000); वापसी आधार + 10; }

एक सेल को कॉल करके चादर में कस्टम फ़ंक्शन योजक () को लागू करने और फिर उस सेल मूल्य को आगे और पीछे बदल दिया, हर बार जब मैं लोडिंग संदेश और कुल 5 सेकंड से अधिक समय देखता हूं। यह इस जीएएस मुद्दे में उल्लिखित अद्यतन से संबंधित हो सकता है :

यह समस्या अब तय हो गई है। नई शीट्स में कस्टम फ़ंक्शन अब परिचित हैं और मूल्यों को आक्रामक रूप से कैश नहीं करते हैं

  1. इस विषय में उल्लिखित मुद्दा बनी हुई है, मेरा परीक्षण बताता है कि, Google शीट प्रत्येक बार कस्टम फ़ंक्शन की पुन: परिकलन करता है जब केवल

    • प्रत्यक्ष रूप से फ़ंक्शन द्वारा बुलाए गए मूल्य को बदल दिया जाता है।

    फ़ंक्शन getCellValue (sheetName, पंक्ति, कॉल) {var ss = SpreadsheetApp.getActiveSpreadsheet (); var sh = ss.getSheetByName (sheetName); वापसी sh.getRange (पंक्ति, कॉल) .getValue (); }

    यहां छवि विवरण दर्ज करें
    पीले कोशिकाओं में किसी भी मूल्य का एक परिवर्तन कस्टम फ़ंक्शन के पुनर्गणना का कारण होगा; फ़ंक्शन द्वारा वास्तविक डेटा स्रोत मान परिवर्तन को अनदेखा किया जाता है।

    • शीट में सेल का स्थान युक्त फ़ंक्शन बदल जाता है पूर्व। एक पंक्ति / स्तंभ को ऊपर या बाईं तरफ डालें / निकालें।

@ ब्रायनियस ने कहा कि इस समारोह में एक अतिरिक्त द्विपद तर्क दिया गया है। यदि आप अब () का उपयोग करते हैं तो आपको समय-समय की समस्या हो सकती है, अद्यतन को थोड़ा धीमा कर दे …

 cell A1 = int(now()*1000) cell A2 = function(args..., A1)