2012-05-09 10 views
19

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

मेरे स्प्रेडशीट

+-------------+-----------+----------------------+ 
| Date  | Username | Comment    | 
+-------------+-----------+----------------------+ 
| 2012-05-02 | palani | My first comment  | 
| 2012-05-02 | raja  | My second comment | 
| 2012-05-03 | palani | My third comment  | 
| 2012-05-03 | raja  | My fourth comment | 
+-------------+-----------+----------------------+ 

अब मैं उपयोगकर्ता नाम पर तारीख को 2012-05-02 और raja के लिए डेटा फ़िल्टर और ऐप्स-लिपि में लेबल (जो एक वेब सेवा के रूप में चल रहा है) का उपयोग कर उन्हें प्रदर्शित करना चाहते हैं नहीं है।

मेरी सभी खोजें SpreadsheetApp.getActiveSheet().getDataRange(); का उपयोग करके समाधान लौटती हैं जो मुझे लगता है कि शीट में 1000+ पंक्तियों में से एक रिकॉर्ड प्रदर्शित करने के लिए अनुकूलित तरीका नहीं है।

संपादित

अभी, मैं .getValues() केवल उपयोग कर रहा हूँ। और यहां दिखाया गया डेटा नमूना के लिए है; मेरे असली शीट में अब 15 कॉलम और 5000+ पंक्तियां हैं। और अंत में यह लाखों तक बढ़ेगा क्योंकि यह एक टाइमशीट आवेदन है। मैं सोच रहा हूँ वहाँ फ़िल्टर की गई पंक्तियों की getValues() के लिए किसी भी अन्य तरीका है?

एक tmp सेल पर =Filter सूत्र लागू करना भी एक मुद्दा, के रूप में स्क्रिप्ट लोगों की संख्या से एक साथ इस्तेमाल किया जा सकता है किया जाएगा।
जाँच करने के लिए इस पाश में एक पाश

for (i in data) { 

बनाने के लिए

var data = SpreadsheetApp.getActiveSheet().getDataRange().getValues(); 

तो का उपयोग कर किसी सरणी में मूल्यों को प्राप्त:

+1

दुर्भाग्य से लागू फिल्टर के साथ getValues ​​करने के लिए कोई रास्ता नहीं है। लेकिन यदि आपका डेटा लाखों पंक्तियों में बढ़ता है, तो स्क्रिप्ट आपकी प्राथमिक चिंता नहीं होगी, क्योंकि स्प्रेडशीट में केवल 400 हजार कोशिकाएं हो सकती हैं। –

उत्तर

26

सबसे आसान तरीका है, और एक मैं जानता हूँ कि, करने के लिए है यदि तिथि (data[i][0]) उस व्यक्ति के बराबर है जिसे आप ढूंढ रहे हैं, और यदि नाम (data[i][1]) उस व्यक्ति के बराबर है जिसे आप ढूंढ रहे हैं। और यह एक सरणी के लिए धक्का

var labels=new Array; 
label.push([data[i][0], data[i][1], data[i][2]]); 

तो इस सरणी में अपने सभी डेटा होने, आप पाश

for (i in labels) { ... 
+0

धन्यवाद @cartman। लेकिन मैं रिकॉर्ड के हजारों है और यह पाशन बुरा समाधान हो रहा है। – palaniraja

+0

यह वास्तव में तेज़ है आप जानते हैं ... – Cartman

+0

हजारों पंक्तियां निश्चित रूप से बहुत कम हैं, विशेष रूप से केवल 3 कॉलम के साथ। getValues ​​साथ सभी को एक बार हो रही है और पाशन समाधान यहाँ है। जब तक कुछ ऐसा न हो जो हम आपके डेटा या उपयोग के बारे में नहीं जानते। जैसे फ़िल्टर स्थैतिक है, या डेटा है। अधिक जानकारी के साथ –

4

खैर के लिए एक का उपयोग कर, आप एक सेल का उपयोग करने पर विचार कर सकते हैं लेबल के साथ एक panen Ui पॉप्युलेट कर सकते हैं और उस पर "क्वेरी" सूत्र का उपयोग करें। चलो मान दिनांक स्तंभ A, प्रयोक्ता नाम = कॉलम बी पर है, टिप्पणी कॉलम सी है, जबकि खाली सेल डी 1 है, है अपनी स्क्रिप्ट इस तरह दिखेगा:

SpreadsheetApp.getActiveSheet().getRange("D1").setFormula('Query(A:C,"SELECT A,B,C WHERE B="' + "SomeOne'" + ',1)'; //filter the data and populate to D1 onwards  
SpreadsheetApp.getActiveSheet().getRange("D:F").getValues();//this is the filtered data 
संबंधित मुद्दे