0

使用google.visualization.Query我有一個正常運作的谷歌Web應用程序是相同的呈現[這裏]在谷歌的Web應用程序

你會在SpreadsheetApp.openByID code.gs注意應用.... 。..getRange()的GetValues()用於檢索數組稍後在轉換成一個DataTable控制板-JavaScript.html

工作Code.gs:

function doGet(e) { 
    var template = HtmlService.createTemplateFromFile('Index'); 

    // Build and return HTML in IFRAME sandbox mode. 
    return template.evaluate() 
     .setTitle('Dashboard demo') 
     .setSandboxMode(HtmlService.SandboxMode.IFRAME); 
} 
/** 
* Return all data from first spreadsheet as an array. Can be used 
* via google.script.run to get data without requiring publication 
* of spreadsheet. 
* Returns null if spreadsheet does not contain more than one row. 
*/ 
function getSpreadsheetData() { 
    var sheetId = '-key-'; 
    var data = SpreadsheetApp.openById(sheetId).getSheets()[0].getRange("A1:D8").getValues(); 
    return (data.length > 1) ? data : null; 
} 

我想用google.visualization.query而不是.getRange。

不行的 - 目前返回「谷歌」沒有定義

function doGet(e) { 
     var template = HtmlService.createTemplateFromFile('Index'); 
    // Build and return HTML in IFRAME sandbox mode. 
     return template.evaluate() 
      .setTitle('Dashboard demo') 
      .setSandboxMode(HtmlService.SandboxMode.IFRAME); 
    } 

    function getSpreadsheetData() { 

     var opts = {sendMethod: 'auto'}; 
     var sheetId = '-key-'; 
     var query = new google.visualization.Query('http://spreadsheets.google.com?key=' + sheetId, opts); 
     query.setQuery('select A, B, C, D'); 
     query.send(draw) 


    } 
    function draw(response) { 
      if (response.isError()) { 
       alert('Error in query'); 
      } 
     alert('No error') 
    } 

我敢肯定有幾個問題 - 但我不能得到任何有用的錯誤返回調試問題。

我的問題是:

  1. 是有可能在code.gs使用google.visualization.query? (我讀過,使我相信,也許它不能用於服務器端??後/爲什麼)
  2. 如果是 - 如何避免「谷歌沒有定義」的錯誤
  3. 如果沒有 - 有沒有其他方法可以從服務器端「查詢」谷歌表格(最終目標是在檢索數據表時能夠靈活地省略列,執行聚合函數等)。這是不可能改變底層電子表格(即共享和發佈)

最後 - 我很抱歉,如果任何這是格式不好或不清楚。這是我在此的頭一篇博文。另外,我對javascript/apps腳本和google web應用程序的經驗有限,專業知識也較少。

回答

0

不,它不能做到服務器端,因爲google是一個客戶端API。 與google.script.run相同的原因。 (爲了更好地理解,你可以自己檢查整個代碼,它駐留在here,代碼需要嵌入在<script>標籤中,在Html側)。

作爲服務器端的替代方案,您應該可以使用URLFetchApp

組成應該是這個樣子的網址:

var BASE_URL = "https://docs.google.com/a/google.com/spreadsheets/d/"; 
var SS_KEY = "stringSS_Key"; 
var BASE_QUERY = "/gviz/tq?tq="; 
var partialUrl = BASE_URL + SS_KEY + BASE_QUERY; 
var queryToRun = 'select dept, sum(salary) group by dept'; 
var finalUrl = partialUrl + encodeURIComponent(queryToRun); 

並在其上調用URLFetchApp.fetch

+0

根據我在別處讀到的內容 - URLFetchApp請求不在服務器端代碼的上下文中執行。因此,我認爲該表格需要「發佈」或與所有人共享才能發揮作用。 http://stackoverflow.com/questions/27725424/content-service-for-google-apps-script-returning-html-instead-of-json – KantKodit

+0

你需要auth,是的,但谷歌提供的應用程序也是如此。因此,無論是使用URLFetchApp,還是我的建議,您在客戶端移動查詢(將變得更簡單和更清晰) – Adelin

+0

我是否也需要指定一個選項卡(google表單中的aka表單)我通常認爲「gid = 0 「爲第一個標籤。您構建的網址構建器中的那塊土地在哪裏? – KantKodit

相關問題