簡體   English   中英

REST API Google表格-在客戶端JS中使用

[英]REST API Google Sheets - use from client JS

有什么方法可以使用Google表格在網絡瀏覽器中直接從客戶端JavaScript直接寫入和讀取數據嗎?

數據安全在這里不是問題。 我只需要一些免費的小型數據庫,即可安裝沒有Web服務器的單頁Web應用程序。

是的,有辦法。 有時我用谷歌表來保存表格數據。 所以我不會給您完整的解決方案,但這可能是一個很好的起點。

  • 在Google表格中創建或打開電子表格。
  • 選擇菜單項“工具”>“腳本編輯器”。 如果出現歡迎屏幕,請單擊左側的空白項目以啟動新項目。
  • 在腳本編輯器中刪除任何代碼。 只需將代碼復制並粘貼到腳本編輯器中:

 // 1. Enter sheet name where data is to be written below var SHEET_NAME = "Sheet1"; // 2. Run > setup // // 3. Publish > Deploy as web app // - enter Project Version name and click 'Save New Version' // - set security level and enable service (most likely execute as 'me' and access 'anyone, even anonymously) // // 4. Copy the 'Current web app URL' and post this in your form/script action // // 5. Insert column names on your destination sheet matching the parameter names of the data you are passing in (exactly matching case) var SCRIPT_PROP = PropertiesService.getScriptProperties(); // new property service // If you don't want to expose either GET or POST methods you can comment out the appropriate function function doGet(e){ return handleResponse(e); } function doPost(e){ return handleResponse(e); } function handleResponse(e) { // shortly after my original solution Google announced the LockService[1] // this prevents concurrent access overwritting data // [1] http://googleappsdeveloper.blogspot.co.uk/2011/10/concurrency-and-google-apps-script.html // we want a public lock, one that locks for all invocations var lock = LockService.getPublicLock(); lock.waitLock(30000); // wait 30 seconds before conceding defeat. try { // next set where we write the data - you could write to multiple/alternate destinations var doc = SpreadsheetApp.openById(SCRIPT_PROP.getProperty("key")); var sheet = doc.getSheetByName(SHEET_NAME); // we'll assume header is in row 1 but you can override with header_row in GET/POST data var headRow = e.parameter.header_row || 1; var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues()[0]; var nextRow = sheet.getLastRow()+1; // get next row var row = []; // loop through the header columns for (i in headers){ if (headers[i] == "Timestamp"){ // special case if you include a 'Timestamp' column row.push(new Date()); } else { // else use header name to get data row.push(e.parameter[headers[i]]); } } // more efficient to set values as [][] array than individually sheet.getRange(nextRow, 1, 1, row.length).setValues([row]); // return json success results return ContentService .createTextOutput(JSON.stringify({"result":"success", "row": nextRow})) .setMimeType(ContentService.MimeType.JSON); } catch(e){ // if error return this return ContentService .createTextOutput(JSON.stringify({"result":"error", "error": e})) .setMimeType(ContentService.MimeType.JSON); } finally { //release lock lock.releaseLock(); } } function setup() { var doc = SpreadsheetApp.getActiveSpreadsheet(); SCRIPT_PROP.setProperty("key", doc.getId()); } 

  • 發布>部署為Web應用程序。
  • 選擇您的安全性選項。 然后按“部署”
  • 現在將為您生成URL,在我的情況下,該URL為: https : //script.google.com/macros/s/AKfycbyRs2qfvz5-qmhyFPVmpm0hayjcofsDIcnypkb_Zz0fDzriMWAb/exe
  • 使用鏈接之前,請不要忘記運行“運行”>“設置”。
  • 最后,您可以通過將表單數據發布到URL將數據發送到工作表。 工作表的第一行應包含您計划保存的字段名稱。 在這種情況下,請在A1:名稱,B1:郵件和C1->注釋中輸入。

  <form id="form" action="YOUR_URL"> <label>Name</label><br /> <input name="Name" type="text" value="" /><br /> <label>Email</label><br /> <input name="Email" type="text" value="" /><br /> <label>Comment</label><br /> <textarea name="Comment" /><br /> <input type="submit" value="Send" /> </form> 

現在,您可以使用javascript將數據發送到您的URL。 如果您仔細查看網址,則可以找到電子表格的密鑰。 我的文檔密鑰是:10vmpPMTBqsXYsTH20a_kU-GTJ06KYxXWg-E2aAtm_dM

可通過以下網址獲取任何Google Spreadsheet的JSON供稿:

JSON格式: https//spreadsheets.google.com/feeds/list/YOUR_KEY/od6/public/basic? alt = json

因此,應該在訪問JSON URL之前發布您的文檔。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM