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

कोड इस प्रकार है:

कोड.जीएस

function doGet() {
  return HtmlService
      .createTemplateFromFile('Index')
      .evaluate();
}

function addSong(objArgs) {
    var ss = SpreadsheetApp.openById('id');
    var url = ss.getUrl();
    var sheet = ss.getActiveSheet();
    var lastRow = sheet.getLastRow()
    sheet.appendRow([lastRow+1]);
    SpreadsheetApp.flush();
    var range = sheet.getRange(sheet.getLastRow(), 1);
    var songTitle = objArgs.songTitle;
    Logger.log('songTitle: ' + songTitle)
    var namedRange = sheet.getRange("Title");
    var newRange = sheet.getRange(sheet.getLastRow(), namedRange.getColumn())
    newRange.setValue(songTitle);
    SpreadsheetApp.setActiveSpreadsheet(ss);
    SpreadsheetApp.setActiveSheet(sheet);
    SpreadsheetApp.setActiveRange(newRange);
    //I suspect the error is in the lines below   
  return {
    url: url,
    newRange: newRange
    };
}

अनुक्रमणिका.html

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
  </head>
  <body>
<br>Fill in field below with Song Title.<br>
Then click button to add new song to Catalog.<br><br>
    <input id="idSongTitle" type="text" placeholder="Song Title"><br><br>
    <button onclick="saveUserInput()">Add song to Catalog</button>    

    <script>
      window.saveUserInput = function() {
        var songTitle = document.getElementById('idSongTitle').value;
        console.log('songTitle: ' + songTitle)
        google.script.run       
          .withSuccessHandler(openCatalog)
          .addSong({songTitle:songTitle})
      }
       // This function is detritus left over from something else. Doesn't seem to be impacting the rest of this.
       function openCatalog(results){
           window.open(results.url, '_blank').focus();
       }
    </script>
  </body>
</html>

संशोधित कोड:

कोड.जीएस

function doGet() {
  return HtmlService
      .createTemplateFromFile('Index')
      .evaluate();
}
function addSong(objArgs) {
    var id= "1-yN6yAGUuOp84apeN2Cwaq25rPD63qb_m2Oe-MSMaIM"
    var ss = SpreadsheetApp.openById(id);
    var url = ss.getUrl();
    var sheet = ss.getActiveSheet();
    var lastRow = sheet.getLastRow()
    sheet.appendRow([lastRow+1]);
    SpreadsheetApp.flush();
    var range = sheet.getRange(sheet.getLastRow(), 1);
    var songTitle = objArgs.songTitle;
    Logger.log('songTitle: ' + songTitle)
    var namedRange = sheet.getRange("Title");
    var newRange = sheet.getRange(sheet.getLastRow(), namedRange.getColumn())
    newRange.setValue(songTitle);
    Logger.log(url)
return {
    url: url
    };
}

अनुक्रमणिका.html

    <!DOCTYPE html>
<html>
  <head>
    <base target="_top">
  </head>
  <body>
<br>Fill in field below with Song Title.<br>
Then click button to add new song to Catalog.<br><br>
    <input id="idSongTitle" type="text" placeholder="Song Title"><br><br>
    <button onclick="saveUserInput()">Add song to Catalog</button>    

    <script>
      window.saveUserInput = function() {
        var songTitle = document.getElementById('idSongTitle').value;
        console.log('songTitle: ' + songTitle)
        google.script.run       
          .withSuccessHandler(openCatalog)
          .addSong({songTitle:songTitle})
      }
       function openCatalog(results){
          window.open(results.url, '_blank').focus();
       }
    </script>
  </body>
</html>

अंतिम स्क्रिप्ट

कोड.जीएस

function doGet() {
  return HtmlService
      .createTemplateFromFile('Index')
      .evaluate();
}
function addSong(objArgs) {
    var id= "1-yN6yAGUuOp84apeN2Cwaq25rPD63qb_m2Oe-MSMaIM"
    var ss = SpreadsheetApp.openById(id);
    var url = ss.getUrl();
    var sheet = ss.getActiveSheet();
    var lastRow = sheet.getLastRow()
    sheet.appendRow([lastRow+1]);
    SpreadsheetApp.flush();
    var range = sheet.getRange(sheet.getLastRow(), 1);
    var songTitle = objArgs.songTitle;
    var namedRange = sheet.getRange("Title");
    var newRange = sheet.getRange(sheet.getLastRow(), namedRange.getColumn())
    var newLastRow = lastRow+1
    newRange.setValue(songTitle);
    url = url + "#gid=1286827341" + "&range=" + newLastRow + ":" + newLastRow;
    Logger.log('url: ' + url)

    return {
    url: url
    };
}

अनुक्रमणिका.html

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
  </head>
  <body>
<br>Fill in field below with Song Title.<br>
Then click button to add new song to Catalog.<br><br>
    <input id="idSongTitle" type="text" placeholder="Song Title"><br><br>
    <button onclick="saveUserInput()">Add song to Catalog</button>    

    <script>
      window.saveUserInput = function() {
        var songTitle = document.getElementById('idSongTitle').value;
        console.log('songTitle: ' + songTitle)
        google.script.run       
          .withSuccessHandler(openCatalog)
          .addSong({songTitle:songTitle})
      }
       function openCatalog(url){
       window.open(url);
       }
    </script>
  </body>
</html>

थोड़ा संपादित करें

मैंने स्विच आउट किया ...

return {
        url: url
        };

के लिये...

return url;

क्योंकि पूर्व 400 (खराब अनुरोध) त्रुटियों का उत्पादन कर रहा था।

0
Bee Tee 23 फरवरी 2019, 00:44

1 उत्तर

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

मुद्दा:

  • सर्वर-साइड: newRange एक इनबिल्ट रेंज ऑब्जेक्ट है और कानूनी रिटर्न वैल्यू नहीं है1.

  • क्लाइंट-साइड: newRange को सक्रिय रेंज बनाने के लिए कुछ भी नहीं किया गया है।

समाधान:

  • newRange, इनबिल्ट रेंज ऑब्जेक्ट को रिटर्न वैल्यू के रूप में न भेजें।
  • url खंड के रूप में सक्रिय श्रेणी के साथ एक url क्राफ्ट करें और इसके बजाय इसे भेजें।

नमूना स्निपेट:

कोड.जीएस

//Url : https:docs.google.com/spreadsheets/[ID]/edit
//Url fragment : #gid=[SHEET_ID]&range=[RANGE_A1_NOTATION]
url = url + "#gid=" + sheet.getSheetId() + "&range=" + newRange.getA1Notation();
return url; //typeof url === "string"; No illegal return values present.

इंडेक्स.एचटीएमएल:

function openCatalog(url){
  window.open(url);
}
0
TheMaster 24 फरवरी 2019, 00:22