ट्रिगर फ़ंक्शन ईमेल भेजने से पहले कुछ स्प्रेडशीट सेल अपडेट नहीं होते हैं

मेरे पास एक स्प्रेडशीट है जो वर्म और क्वेरी फॉर्मूला का उपयोग करके अन्य 6 स्प्रेडशीट्स से सभी आवश्यक डेटा निकालती है और जमा करती है और सभी समेकित डेटा को पीडीएफ में परिवर्तित किया जाएगा और ट्रिगर ईवेंट का उपयोग करके मेल आईडी में ईमेल किया जाएगा।

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

शीट के लिए लिंक

screenshot

क्या कोई मुझे इस मुद्दे को सुलझाने के लिए निर्देशित कर सकता है।

For this solution should be -> all the data should be updated and then the email script should work; or either it should update before emailing script starts.

या किसी भी अन्य बेहतर विचारों की सराहना की जाती है।

1
जोड़ा संपादित
विचारों: 1
हां, यह एक ऐप स्क्रिप्ट है। क्या तुम चले गए हो
जोड़ा लेखक Jimson Jose, स्रोत
हाँ मैंने इसे किया है। धन्यवाद
जोड़ा लेखक Jimson Jose, स्रोत
आपने जिस स्क्रिप्ट का उल्लेख किया है, क्या यह Google Apps स्क्रिप्ट है?
जोड़ा लेखक Henrique G. Abreu, स्रोत
क्या आप getLastRow को भी काम करने में सक्षम थे?
जोड़ा लेखक Henrique G. Abreu, स्रोत

1 उत्तर

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

निचली पंक्ति यह है कि आपके पास यह सूत्र नहीं हो सकते हैं और समय-चालित (या अन्य ट्रिगर जिसे किसी लॉग इन की आवश्यकता नहीं है) पर ट्रिगर की गई स्क्रिप्ट का उपयोग करें और उम्मीद है कि स्क्रिप्ट इस डेटा को पढ़ने में सक्षम हो।

हालांकि कामकाज काफी सरल है। अपनी स्क्रिप्ट के अंदर importRange फ़ंक्शन क्या करता है! जैसे

var source = SpreadsheetApp.openById('source-spreadsheet-key');
var data = source.getSheetByName('List').getRange('I6:AT500').getValues();
//then save it somewhere
var s = Spreadsheet.getActive().getSheetByName('hidden-import');
s.getRange('I6:AT500').setValues(data);
SpreadsheetApp.flush(); //force the data to be written
//so all the other formulas on your spreadsheet get updated with the new data

आपके सभी "तर्क" सूत्र, जैसे query और vmerge , जो स्क्रिप्ट के नकल के लिए मुश्किल हैं, को स्प्रेडशीट पर छोड़ा जा सकता है, लेकिन इस "छिपे हुए आयात" का संदर्भ लें शीट मैंने अभी importRange घोंसले के बजाय आविष्कार किया है।

[संपादित करें]

केवल गैर-खाली पंक्तियों की प्रतिलिपि बनाने के लिए ऐसा करें:

var data = SpreadsheetApp.openById('source-spreadsheet-key').
  getSheetByName('List').getDataRange().getValues();
Spreadsheet.getActive().getSheetByName('hidden-import').
  getRange(1,1,data.length,data[0].length).setValues(data);
2
जोड़ा
समर्थन और सुझाव के लिए धन्यवाद। इसके लिए आप केवल खाली पंक्तियों की प्रतिलिपि बनाने के लिए मुझे एक स्क्रिप्ट के साथ मार्गदर्शन कर सकते हैं। क्योंकि लिपि खाली सभी सहित सभी की प्रतिलिपि बना रही है।
जोड़ा लेखक Jimson Jose, स्रोत
एक बार फिर धन्यवाद, मैं बस निर्दिष्ट (पहले कॉलम और पंक्ति से कॉलम + स्थायी) तक निकालने की कोशिश में खो गया था, उदाहरण i7: AT + {अंतिम पंक्ति}। लेकिन मैं इसे बनाने में सक्षम नहीं था। क्या आप मेरी मदद कर सकते हैं।
जोड़ा लेखक Jimson Jose, स्रोत
श्रीमान हेनरिक अब्रू के लिए आपने जो कुछ किया है, उसके लिए धन्यवाद। मुझे आशा है कि आप मेरी क्वेरी को समझ चुके हैं। मैंने कोशिश की है लेकिन मेरा संदेह था कि लाइन 'कोड' var डेटा = source.getSheetByName ('List') से पहले अंतिम पंक्ति संख्या निकालने का तरीका था। getRange ('I6: AT500')। getValues ​​& zwnj; (); निष्पादित किया जाता है। यह मेरा अनुरोध है। यदि आप इच्छुक हैं या इच्छुक नहीं हैं तो मैं आपके काम के लिए आभारी हूं और आपका आभारी हूं। और कृपया ध्यान दें कि मैं आपको आग्रह नहीं कर रहा हूं, मेरे ज्ञान के अनुसार मैं सिर्फ इसके लिए मदद मांग रहा हूं। अगर मैं आपको अपनी अंग्रेजी से चोट पहुंचाता तो मुझे
जोड़ा लेखक Jimson Jose, स्रोत
मुझे मार्गदर्शन करने के लिए बहुत बहुत धन्यवाद। अब तक ईमानदार होने के लिए मुझे कभी भी "वोटिंग" नहीं पता था, क्योंकि अब मैं निश्चित रूप से जवाब दूंगा और वोट दूंगा। जैसा कि पहले खाली पंक्तियों को निकालने पर उत्तर दिया गया था। मैंने कोशिश की है लेकिन लिपि रिक्त पंक्तियों सहित सभी डेटा की प्रतिलिपि बना रही है। क्या आप कृपया मेरे लिए एक बार फिर से सत्यापित कर सकते हैं। अग्रिम में धन्यवाद
जोड़ा लेखक Jimson Jose, स्रोत
आपके मार्गदर्शन के साथ, मैंने उन सभी को वोट दिया है जिन्होंने मेरी स्क्रिप्टिंग कार्य में मेरी मदद की है। एक बार फिर आपका धन्यवाद।
जोड़ा लेखक Jimson Jose, स्रोत
मैंने इसे अपने जवाब में शामिल किया है।
जोड़ा लेखक Henrique G. Abreu, स्रोत
स्निपेट से मैंने चिपकाया है कि आप इसे स्वयं करने में सक्षम होना चाहिए। आप जो पूछ रहे हैं वह अब संदेह नहीं है, आप बस चाहते हैं कि मैं यह आपके लिए करूँ। इसे स्वयं को कैसे करें इसे जानने के लिए आपको ऐप्स स्क्रिप्ट ट्यूटोरियल और दस्तावेज़ों को पढ़ना चाहिए: developers.google। com/क्षुधा स्क्रिप्ट/लेख
जोड़ा लेखक Henrique G. Abreu, स्रोत
ठीक है, कठोर होने के लिए खेद है। यहां दस्तावेज़ों पर एक नज़र डालें: developers.google.com/apps-script/class_sheet# getLastRow (वैसे, मैं देखता हूं कि आपने स्टेक ओवरफ्लो पर स्वीकार किए गए अपने प्रश्नों के किसी भी उत्तर को कभी भी स्वीकार नहीं किया है, आपको ऐसा करना चाहिए जब आपको लगता है कि आपको अच्छा जवाब मिल रहा है, मतदान भी महत्वपूर्ण है)।
जोड़ा लेखक Henrique G. Abreu, स्रोत