मेरे पास निम्न है जो ठीक काम करता है:

function phototable() {
  var ss = SpreadsheetApp.openById('####');
  var lastRow = ss.getLastRow();
  ss.getRange('H'+lastRow)
  .setValue('=VLOOKUP("Form Responses_Images/"&B'+lastRow+',importrange("https://docs.google.com/spreadsheets/d/####/edit","Form Responses!U:Z"),4,false)');
}

हालांकि, मैं नहीं चाहता कि सूत्र को कॉलम H में कॉपी किया जाए, केवल वास्तविक मान। तो मैंने कोशिश की:

ss.getRange('H'+lastRow)
  .getValue('=VLOOKUP("Form Responses_Images/"&B'+lastRow+',importrange("https://docs.google.com/spreadsheets/d/###/edit","Form Responses!U:Z"),4,false)')
  .copyTo('H'+lastRow,{contentsOnly:true});

लेकिन वह कॉलम एच में कुछ भी सम्मिलित नहीं करता है। कोई विचार?

1
testing123 5 नवम्बर 2020, 00:42

2 जवाब

सबसे बढ़िया उत्तर

संशोधन बिंदु:

  • I have the following that works fine: के बारे में, जब मैंने उपरोक्त स्क्रिप्ट देखी, तो मुझे लगता है कि getValue पर एक त्रुटि हुई है। क्योंकि getValue का कोई तर्क नहीं है। मैंने सोचा था कि getValue setValue था।
  • copyTo('H'+lastRow,{contentsOnly:true}) पर, पहला तर्क थ्रू रेंज ऑब्जेक्ट है।
  • स्क्रिप्ट के दौरान सूत्र के परिणाम को स्ट्रिंग के रूप में कॉपी करने के लिए, flush का उपयोग करना आवश्यक है।

जब उपरोक्त बिंदु आपकी लिपि में परिलक्षित होते हैं, तो यह निम्नानुसार हो जाता है।

संशोधित स्क्रिप्ट:

function phototable() {
  var ss = SpreadsheetApp.openById('####');
  var lastRow = ss.getLastRow();
  var range = ss.getRange('H'+lastRow);
  range.setValue('=VLOOKUP("Form Responses_Images/"&B'+lastRow+',importrange("https://docs.google.com/spreadsheets/d/###/edit","Form Responses!U:Z"),4,false)');
  SpreadsheetApp.flush();
  range.copyTo(range, {contentsOnly:true});
}

ध्यान दें:

  • आपकी स्क्रिप्ट में, ss स्प्रैडशीट का पहला टैब है। कृपया इससे सावधान रहें।

सन्दर्भ:

2
testing123 5 नवम्बर 2020, 01:13

मुद्दे / स्पष्टीकरण:

आपके पास सूत्र के मान के साथ कॉलम H में सेल को अपडेट करने के 2 तरीके हैं:

  1. यदि आप एच में सेल को उसके मूल्य के साथ अपडेट करना चाहते हैं तो मूल्य प्राप्त करें और इसे वापस सेट करें:

    range.setValue(range.getValue());
    
  2. copyTo() तरीके का इस्तेमाल करें:

    range.copyTo(range, {contentsOnly:true});
    

बोनस जानकारी के रूप में, copyTo() कर सकते हैं यदि स्रोत श्रेणी और लक्ष्य श्रेणी एक ही स्प्रेडशीट फ़ाइल के नहीं हैं, तो इसका उपयोग नहीं किया जाएगा।


समाधान:

function phototable() {
  var ss = SpreadsheetApp.openById('####').getSheetByName('Sheet1');
  var lastRow = ss.getLastRow();
  var range = ss.getRange('H'+lastRow);
  range.setValue('=VLOOKUP("Form Responses_Images/"&B'+lastRow+',importrange("https://docs.google.com/spreadsheets/d/####/edit","Form Responses!U:Z"),4,false)');
  SpreadsheetApp.flush();
  range.setValue(range.getValue());
  // range.copyTo(range, {contentsOnly:true}); // choose this or the previous line
}

Sheet1 को उस शीट के नाम में संशोधित करें जिसे आप इस ऑपरेशन को लागू करना चाहते हैं।

  • इसके अलावा किसी भी फ़ंक्शन को लागू करने से पहले किसी विशेष शीट को चुनना एक बेहतर अभ्यास है। इसके नाम से एक शीट प्राप्त करने के लिए getSheetByName() का उपयोग करें।
1
soMario 5 नवम्बर 2020, 01:30