मैं Google शीट को किसी अन्य पत्रक के संदर्भ में ऑटो-अपडेट कैसे कर सकता हूं?


20

मैं Google स्प्रेडशीट में डेटा दर्ज करने के लिए एक बाहरी एप्लिकेशन का उपयोग कर रहा हूं। इस कार्यपुस्तिका को एक अलग कार्यपुस्तिका ( IMPORTRANGE(spreadsheet_key, range_string)फ़ंक्शन के साथ ) द्वारा संदर्भित किया जाता है जो डेटा में हेरफेर और व्याख्या करता है। मेरी समस्या यह है कि जब भी मैं संदर्भित कार्यपुस्तिका को व्यक्तिगत रूप से संशोधित करता हूं, तो संदर्भित कार्यपुस्तिका अपडेट ठीक होती है, लेकिन जब भी बाहरी एप्लिकेशन इसे संशोधित करता है, तो यह अपडेट नहीं होता है।

मैंने "स्प्रेडशीट सेटिंग्स" को संपादित करने की कोशिश की है ताकि पुनर्गणना हर मिनट और हर बदलाव पर हो। इसके अलावा, मैंने Google Chrome में एक एक्सटेंशन भी स्थापित किया है जो हर घंटे पेज को ऑटो-रिफ्रेश करता है। हालाँकि, संदर्भित कार्यपुस्तिका से डेटा को पुन: आयात नहीं किया जाता है। यहां तक ​​कि अगर मैं सूत्र को एक नए सेल में कॉपी करता हूं, तो भी डेटा फिर से आयात नहीं किया जाता है।

क्या डेटा को फिर से आयात करने के लिए Google शीट्स को ट्रिगर करने के लिए मैं संदर्भित वर्कबुक में कुछ भी कर सकता हूं?

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

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


मुझे इस बात की जानकारी नहीं है कि यह कैसे काम करता है, लेकिन मैं निम्नलिखित का उपयोग कर रहा हूं: ifttt.com/google_drive
tlewis3348

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

@ अच्छी तरह से, डेटा separate workbookठीक में दिखाई दे रहा है। सभी दिखावे से, ऐसा लगता है कि यह सिर्फ टाइप किया गया था।
tlewis3348

जी हां, यह नया गूगल शीट्स है। एक कार्यपुस्तिका जोड़े गए डेटा को दिखाती है, और दूसरी कार्यपुस्तिका को नहीं दिखाती है। मैं इसे स्पष्टीकरण के मूल प्रश्न में जोड़ दूंगा।
tlewis3348

जवाबों:


14

मैं उसी समस्या से जूझ रहा हूं। एक कस्टम फ़ंक्शन लिखने के बजाय, मैं इस उम्मीद spreadsheet_urlमें एक अलग क्वेरी स्ट्रिंग जोड़ता IMPORTRANGEहूं कि हर बार पृष्ठ ताज़ा होने के बाद, Google को लगता है कि उसे एक नई स्प्रेडशीट से डेटा प्राप्त करने की आवश्यकता है। मैं हर बार url को अद्वितीय बनाने के लिए एक नया टाइमस्टैम्प जोड़ता हूं। यह एक ज़बरदस्त हैक है, लेकिन यह मेरे लिए बहुत सारी चादरों में काम कर रहा है।

मेरा फार्मूला पहले कुछ इस तरह दिखता था:

=IMPORTRANGE("https://docs.google.com/spreadsheets/d/123123123123/edit#gid=1816927174","'Sheet1'!A1:B25")

और अब यह दिखता है:

=IMPORTRANGE("https://docs.google.com/spreadsheets/d/123123123123/edit#gid=1816927174"&"?"&now(),"'Sheet1'!A1:B25")

अपडेट करें:

यह तरीका अब काम नहीं करता है क्योंकि Google अब now()अंदर की अनुमति नहीं देता है importrange()। नीचे ह्यू से टिप्पणी देखें।


6
मैं इस जवाब के दौरान आया जब एक ही बात करने की कोशिश कर रहा था। ऐसा लग रहा है कि Google ने ऐसा कर दिया है कि अब (), रैंड () और रैंडबेट्विन () को इंपोर्टेंज () कॉल के अंदर इस्तेमाल नहीं किया जा सकता है।
ह्यूग

यदि मैं हर मिनट अपडेट करने के लिए स्प्रेडशीट सेट करता हूं, तो क्या फॉर्मूला भी रिफ्रेश हो जाएगा और नया डेटा (यदि उपलब्ध हो) प्राप्त कर सकता है?
निखिल साहू

5

जिमी के इस वेब एप उत्तर में निम्नलिखित आता है ।

  1. दोनों स्प्रेडशीट =now()में एक यादृच्छिक सेल में एक समीकरण सम्मिलित करते हैं , कहते हैंZ1
  2. दोनों स्प्रेडशीट में एक =importrange()फ़ंक्शन सम्मिलित nowहोता है जो अन्य स्प्रेडशीट के फ़ंक्शन को संदर्भित करता है।
  3. अपनी स्प्रैडशीट सेटिंग में जाएं और हर मिनट पर पुनर्गणना चुनें।

मैंने =now()फ़ंक्शन का उपयोग करने , इस थ्रेड में अब URL ट्रिक, या सेट स्क्रिप्ट पर यादृच्छिक पाठ सम्मिलित करने के लिए ऐप्स स्क्रिप्ट सहित कई अन्य सुझावों की कोशिश की , लेकिन सोर्स शीट के मैनुअल एडिट के अलावा कुछ भी अपडेट करने के लिए मजबूर नहीं करेगा।


दिसंबर 2018 में मेरे लिए काम किया
MalcolmOcean

4

मैंने पाया कि सबसे आसान तरीका यह था कि ifचारों ओर एक सरल वक्तव्य दिया जाए importrange

B1 = Sheet ID
B2 = Sheet Name and Range
B3 = Now()
=if (B3> now()-1, IMPORTRANGE(B1,B2),)

यह हर बार काम करता है।


मैं आपके समाधान को लागू करने की कोशिश कर रहा हूं, लेकिन यह मेरे लिए स्पष्ट नहीं है कि बी 3 का उपयोग कैसे करें। आप कह रहे हैं B3 = Now () तब=if (Now() > now()-1, IMPORTRANGE(B1,B2),)
यूजीन वैन डेर मेरवे

3

डेटास्टैंप वर्कअराउंड मेरे लिए काम नहीं करता है - एक स्पष्ट नोट है कि डेटास्टैम्प और रैंड फ़ंक्शन का उपयोग करने की अनुमति नहीं है।

मेरा बहुत ही हैकरी वर्क सेल हटाना है और फिर ctrl + z को हिट करना है। यह हर बार एक ताज़गी देता है। यह डेटा को ताज़ा रखने के लिए इस onopen, या विशिष्ट समय अंतराल पर स्क्रिप्ट के लिए तुच्छ है।


2

मुझे मैन्युअल सेल अपडेट को अनुकरण करने और बाहरी स्प्रेडशीट में संशोधनों को लॉन्च करने के लिए एक सरल हैक मिला।

  1. इस तरह एक कस्टम फ़ंक्शन बनाया:

    // Hack function used just to simulate a manual update
    function hack(value) {
      var list = []
      list.push(value);
      return list;
    }
    
  2. फिर, अपनी शीट पर मैं इसे इस तरह से कॉल करता हूं:

    =arrayformula(hack(tab!B1))
    

    जहां tab!B1मैं कोड द्वारा संशोधित कोशिकाओं में से एक हूं।


यह एक मैनुअल सेल अपडेट कैसे अनुकरण करता है?
haemse

2

या ... आप एक साधारण स्क्रिप्ट कर सकते हैं, पहले वैल्यू सेरो (0) दे सकते हैं, फिर फॉर्मूला बैक सहित और यह ट्रिक करते हैं:

  var cell = sheet.getRange("B1:B1"); //SHEET TO INSERT VALUE
  cell.setFormula("=0");
   Utilities.sleep(2000); //JUST TO GIVE TIME TO UPDATE (OPTIONAL)
  var cell = sheet.getRange("B1:B1");
  cell.setFormula("=ImportRange(\"YOUR_SHEET_ID\",\"RANGE_TO_INSERT\")");  

इससे भी बेहतर सेल। setFormula ("=" & cell.getValue ()) ;, तो उपयोगकर्ता 2 सेकंड के लिए शून्य नहीं देखता है ....
टोनी बेनब्राहिम

1

मैं एक कस्टम फ़ंक्शन के साथ Apps स्क्रिप्ट का उपयोग करके अपनी समस्या ( यहां विस्तृत ) हल करने का एक तरीका खोजने में सक्षम था ।

आप की जगह तो =IMPORTRANGE(spreadsheet_url, range_string)अपनी स्प्रैडशीट में =DynamicImportRange(spreadsheet_url, sheet_name, range)और उपकरण में नीचे दिए गए कोड पेस्ट -> स्क्रिप्ट संपादक -> रिक्त प्रोजेक्ट, यह काम करना चाहिए (देखें इस क्षुधा स्क्रिप्ट लिखने पर अधिक जानकारी के लिए)।

/**
Usage: =DynamicImportRange(spreadsheet_url, sheet_name, range)
Compare to: =IMPORTRANGE(spreadsheet_url, range_string)

Where the given arguments are placeholders that should be replaced
by arguments specific to your use-case.
 */
function DynamicImportRange(sheet_url, sheet_name, sheet_range) {
  var values = SpreadsheetApp.openByUrl(sheet_url).getSheetByName(sheet_name).getRange(sheet_range).getValues();
  return values
};

/**
*/
function RefreshSheet() {
  // Update the following two variables to suit your particular situation
  var sheet_name = "sample_sheet_sheet"
  var range = "A1"

  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheet_name);
  var formula1 = "Loading...";
  var formula2 = sheet.getRange(range).getFormula().toString().replace('"', '\"');
  // The following assumes that the data is being inserted into the sheet in the same
  // location as it is in in the source sheet.
  var form_range = formula2.split(",")[2].split("\"")[1];
  sheet.getRange(form_range).clear();
  sheet.getRange(range).setValue(formula1);
  Utilities.sleep(245);
  sheet.getRange(range).setValue(formula2);
};

यदि आप चाहते हैं कि शीट को नियमित आधार पर अपडेट किया जाए, तो आप संसाधन स्क्रिप्ट -> वर्तमान प्रोजेक्ट के ट्रिगर्स एप्स स्क्रिप्ट विंडो में जाकर ट्रिगर सेट कर सकते हैं।


4
सभी GOOGLERS END UP HERE के लिए : स्प्रैडशीट कस्टम फ़ंक्शन (स्प्रैडशीट) का उपयोग करके SpreadsheetApp.openById()या अन्य स्प्रेडशीट नहीं खोल सकते हैं SpreadsheetApp.openByUrl()। चेक यहाँ और यहाँ
फ्रांसेस्को Vadicamo

1

now()सड़क के लिए एक समाधान के रूप में , आप हर घंटे अपडेट करने के लिए स्प्रैडशीट की सेटिंग बदल सकते हैं।

फ़ाइल -> स्प्रेडशीट सेटिंग्स -> गणना

शीट को " ऑन चेंज एंड हर आवर " या "चेंज ऑन एंड हर मिनट" पर ही अपडेट करें । हालांकि ध्यान रखें, हर मिनट पुनर्गणना का चयन स्प्रेडशीट को लटका सकता है।


0

अपने संदर्भ को दूसरी शीट से स्वचालित रूप से अपडेट करने के लिए आप Google शीट ऐड-ऑन शीटगो का उपयोग कर सकते हैं । आप प्रति माह मुफ्त में 30 अपडेट का उपयोग कर सकते हैं या अधिक अपडेट के लिए सशुल्क सदस्यता प्राप्त कर सकते हैं। यह वीडियो आपको मूल उपयोग की व्याख्या करना चाहिए।


2
कृपया ध्यान रखें कि यद्यपि इसे " फ्री में इंस्टॉल करें " साइट पर बड़ी चतुराई से कहा गया है , यह एक एड-ऑन है जिसमें एक सीमित मुफ्त योजना है, जिसके बाद 3 भुगतान किए गए हैंमूल्य निर्धारण पृष्ठ का लिंक केवल साइट के बहुत नीचे पाया जाना है।
मेरीकामिटोस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.