2016-06-29 2 views
0

Я собрал простое всплывающее окно jQuery/JavaScript. Используя AJAX, я хочу заполнить содержимое всплывающего окна из ячеек в общедоступной Таблице Google. Этого я могу сделать, и мне удалось захватить данные из электронной таблицы Google в формате json.Как изменить активный лист в Google Spreadsheet с помощью JavaScript/jQuery?

Проблема в том, что содержимое, которое мне нужно получить, находится в разных «листах». Я не очень разбираюсь в Документах Google и не знаю, как «активировать» другой лист. Имя одного из листов, которые я хочу активировать, - «FG». Другим будет «SA».

Я нашел функцию JS следующим образом и поместил ее в свой код, но затем, прочитав далее, кажется, эта функция должна быть помещена в электронную таблицу Google, перейдя на spreadsheet > Tools > Script editor....

function goToSheet(sheetName) { 
    var sheet = SpreadsheetApp.getActive().getSheetByName(sheetName); 
    SpreadsheetApp.setActiveSheet(sheet); 
} 

Так я поместить вызов этой функции с именем «листа» Я хочу, чтобы загрузить в качестве значения парам внутри успеха для вызова AJAX в моих JS, и функция не загружается.

Мой JQuery/JavaScript в моем файле index.html выглядит следующим образом:

/** 
* Redirect Function 
*/ 
var appRedirect = (function(){ 

    var global = {}; 
    var base = {}; 

    /** 
    * AJAX Processing Elements 
    * val: 'before','complete' 
    * ************************************************************* */ 
    global.ajaxProcessingElems = function (val) {} 



    /** 
    * Popup Init 
    * type: content,buttons 
    * pClass: unique selector name for popup 
    * maxWidth: the maximum width value for the popup 
    * pTitle: title of the popup 
    * data: the data passed to the popup 
    * appSiteUrl: the site application to direct user to 
    * ************************************************************* */ 
    global.popupModalInit = function (type, pClass, maxWidth, pTitle, data, appSiteUrl) { 

     var count=10; 
     var counter=setInterval(timer, 1000); // 1000 will run it every 1 second 
     var pTop; 
     var pLeft; 
     //var ss = data.getActiveSpreadsheet(); 
     //var activeSheet = ss.getSheets()[2]; 
     var oData = data; 
     var dataStructure = ''; 

     /* Function: Popup Close */ 
     $(document).on('click', '.modalpopupbackdrop,.modalpopup_title .close', function (e) { 
      e.preventDefault(); 

      // Fade Out Modal Popup 
      $('.modalpopupbackdrop').delay(75).fadeOut(125); 
      $('.modalpopup').animate({ opacity: '0' }, 150, function() { 

       // Remove from DOM 
       var removePopupFrame = setTimeout(function() { 
        $('.modalpopupbackdrop,.modalpopup').remove(); 
       }, 450); 

      }); 
     }); 


     /* Popup Structure */ 
     var pStructure = 

       // Modal Backdrop 
       '<div class="modalpopupbackdrop" aria-hidden="true"></div>' + 

       // Modal Frame 
       '<div class="modalpopup ' + pClass + '" style="max-width: ' + maxWidth + 'px;" aria-label="Popup Notice for Selected Site">' + 
        '<div class="modalpopup_inner">' + 

         // Title 
         '<div class="modalpopup_title">' + 

          // Close Button 
          '<a href="javascript:void();" class="close" title="Click to Close Popup" aria-label="close"></a>' + 

          // Modal Title 
          '<h3>' + pTitle + '</h3>' + 

         '</div>' + 

         // Data Wrapper 
         '<div class="modalpopup_content"></div>' + 

         // Cookie and Timer 
         '<div class="modalpopup_cookieandtimer">' + 

          // Cookie 
          '<div class="modalpopup_cookie">' + 
           '<label>' + 
            '<input type="checkbox" value="" name="" /> ' + 
            'Don\'t show this screen in the future.' + 
           '</label>' + 
          '</div>' + 

          // Timer 
          '<div class="modalpopup_counter">' + 
           'Autoredirecting in <span class="timer"></span>' + 
          '</div>' + 

         '</div>' + 

         // Buttons 
         '<div class="modalpopup_buttonholder">' + 
          '<a href="#" class="button btn-cancel">Cancel</a>' + 
          '<a href="#" class="button btn-help">Help</a>' + 
          '<a href="#" class="button btn-comment">Submit a Comment</a>' + 
          '<a href="#" class="button btn-home">Home</a>' + 
         '</div>' + 

        '</div>' + 
       '</div>'; 

     /* Append Popup to Body */ 
     $('body').append(pStructure); 

     // Calculate Negative Top and Left Margin to Position Popup 
     pTop = -($('.modalpopup').height()/2); 
     pLeft = -($('.modalpopup').width()/2); 

     // Assign Top and Left Margin Values 
     $('.modalpopup').css({ marginTop: pTop, marginLeft: pLeft }); 

     // Fade Popup In 
     $('.modalpopupbackdrop').fadeIn(125); 
     $('.modalpopup').delay(75).fadeIn(125); 

     // Counter Loop 
     function timer() { 
      count=count-1; 

      if (count <= 0){ 
       clearInterval(counter); 
       return; 

       // Direct User to Selected Site: 
       //window.location.href = appSiteUrl; 
      } 

      $('.timer').html(count + ' seconds.'); 
     } 
     timer(); 

     // Append Fetched Data to Popup 
     setTimeout(function(){ 

      console.log(oData); 

      dataStructure += '<h3>' + oData.feed.title.$t + '</h3>'; 

      // Append Data Output 
      $('.modalpopup_content').append(dataStructure); 

     },300); 
    } 



    /** 
    * Globe Initialization Settings 
    * - pTitle: 
    * - appUrl: 
    * - appData: 
    * ************************************************************ */ 
    global.egpInit = function (pTitle,appSiteUrl,appData) { 

     // Debug 
     console.log('Function egpInit Initialized'); 

     // Variables 
     var dataUrl = 'https://spreadsheets.google.com/feeds/list/' + appData + '/od6/public/values?alt=json-in-script'; 
     var errorMessage = 'An error occurred while initializing .egpInit.'; 

     console.log(dataUrl); 

     $.ajax({ 
      url: dataUrl, 
      method: 'POST', 
      dataType: 'jsonp', 
      beforeSend: function() { global.ajaxProcessingElems('before') }, 
      complete: function() { global.ajaxProcessingElems('complete') }, 
      success: function (data) { 

       //function goToSheet(sheetName) { 
        //var sheet = SpreadsheetApp.getActive().getSheetByName(sheetName); 
        //SpreadsheetApp.setActiveSheet(sheet); 
       //} 
       goToSheet("FG"); 

       global.popupModalInit('content', 'fireglobe', '700', pTitle, data, appSiteUrl); 

      }, 
      error: function() { 

       // Debug 
       console.log(errorMessage); 

      } 
     }); 

    } 

    return global; 

})(); 

Мой HTML выглядит следующим образом:

<ul> 
    <li> 
     <a href="javascript:appRedirect.egpInit('Popup 1','http://www.google.com/globe/','1YERueWgOB1TJ3HrtK4NnrnXCTDaZ5kmTS379Sozljbc');"> 
      Information 1 
     </a> 
    </li> 
    <li> 
     <a href="javascript:appRedirect.egpInit('Popup 2','https://www.yahoo.com/sa/','1YERueWgOB1TJ3HrtK4NnrnXCTDaZ5kmTS379Sozljbc');"> 
      Information 2 
     </a> 
    </li> 
</ul> 

Я не уверен, как переключаться между листами. На данный момент он может быть статичным, и позже я могу добавить его в качестве параметра для моей функции: global.egpInit(pTitle,appSiteUrl,appData)

Любая помощь очень ценится.

+0

Я нашел некоторые ссылки здесь на SO, что обеспечивает некоторую INSITE: http://stackoverflow.com/questions/19942619/query-specific-sheets-of-a-google -spreadsheet http://stackoverflow.com/questions/24531351/retrieve-google-spreadsheet-worksheet-json и внешняя ссылка: http://damolab.blogspot.com/2011/03/od6-a nd-find-other-worksheet-ids.html К сожалению, не так много информации по этому вопросу. Но те ссылки, которые я нашел, должны быть способны помочь другим с теми же проблемами. – Pegues

ответ

0

Для данного URL, используемый для доступа к электронной таблицы Google Doc, вы должны использовать следующий URL:

(пример таблицы ID только, и не является функциональным)

https://spreadsheets.google.com/feeds/list/1YERue3gOB1TJ3Hr1K4Nnr8XCTDaZ5kBTS379Sozljbc/od6/public/values?alt=json-in-script 

В приведенном выше URL, значение 1YERue3gOB1TJ3Hr1K4Nnr8XCTDaZ5kBTS379Sozljbc относится к вашему идентификатору электронной таблицы, а значение od6 в указанном выше URL-адресе относится к первому рабочему листу (или таблице по умолчанию) электронной таблицы. Если у вас есть несколько рабочих листов в вашем Google Docs таблицы, изменить od6 до значения, используя следующие:

Лист 2 -> worksheet_id = 2 (таким образом od6 будет изменен на 2)
Лист 3 -> worksheet_id = 3 (это od6 будет изменен на 3)
Etc.

Смежные вопросы