# Google Apps for Spreadshhet ###### tags: `GoogleAppScript` ## wirte a function You can use two type http method **post** or **get** ```javascript= function doGet(request){ } function doPost(request){ } ``` ## recevive parameters Following code was recevive url's **parameter**,like http://demo.com?tab=time ```javascript= function doGet(request){ const tab = request.parameter.tab } function doPost(request){ const dataSet = JSON.parse(request.postData.contents); } ``` ## setting Document Spreadsheet's url https://docs.google.com/spreadsheets/d/abcdfredggh ![](https://i.imgur.com/WWt1oAD.png) **abcdfredggh** was this document's id, paste it to following code ```javascript= var SpreadSheet = SpreadsheetApp.openById("documentId"); ``` ## Select tab It was easy to understand from api's name..... **[0]** index 0 mean first tab, index 1 mean second tab ```javascript= var Sheet = SpreadSheet.getSheets()[0]; ``` ## Select data Scope from tab ### for doGet #### 1. get lastRow ```javascript= var lastDataRowNumber = Sheet.getLastRow(); ``` #### 2. get data's range ```javascript= var data = Sheet.getRange("A2:F" + lastDataRowNumber).getValues(); ``` ### for doPost #### 1. set start position (row) ```javascript= var StartRow = 3; ``` ## response ### Returning JSON We usually want api's callback was a json data ```javascript= return ContentService.createTextOutput(JSON.stringify(result)) .setMimeType(ContentService.MimeType.JSON); ``` ### Returning HTML ```javascript= function doGet(){ var HTMLString = "<style> h1,p {font-family: 'Helvitica', 'Arial'}</style>" + "<h1>Hello World!</h1>" + "<p>Welcome to the Web App"; HTMLOutput = HtmlService.createHtmlOutput(HTMLString); return HTMLOutput } ``` ## write your code Maybe you want to receive each tab's data as a json type response, try this code. ### example for doGet ```javascript= function doGet(request) { const tab = request.parameter.tab var SpreadSheet = SpreadsheetApp.openById( "documentId" ); if(tab == 'home'){ const home = getHome(SpreadSheet); } if(tab == 'reservation'){ const reservation = getReservation(SpreadSheet); } if(tab == 'shopping'){ const shopping = getShooping(SpreadSheet); } const result = { home: home, reservation: reservation, shopping: shopping } return ContentService.createTextOutput(JSON.stringify(result)) .setMimeType(ContentService.MimeType.JSON); } function getHome(SpreadSheet){ var Sheet = SpreadSheet.getSheets()[0]; var lastDataRowNumber = Sheet.getLastRow(); var data = Sheet.getRange("A2:F" + lastDataRowNumber).getValues(); var homeArray = []; data.forEach(function(item) { if(!item[0]) return true const sort = item[0]; const product_name = item[1]; const product_link = item[2]; const product_pic = item[3]; const price = item[4]; const sale_price = item[5]; var obj = { sort: sort, product_name: product_name, product_link: product_link, product_pic: product_pic, price: price, sale_price: sale_price, }; homeArray.push(obj); }); return homeArray } function getReservation(SpreadSheet){ var Sheet = SpreadSheet.getSheets()[1]; var lastDataRowNumber = Sheet.getLastRow(); var data = Sheet.getRange("A5:AA" + lastDataRowNumber).getValues(); var ticketArray = []; const search_age_tran = { "不分齡" : 1, "6歲以下" : 2, "7歲以上" : 3, "親子一起": 4 } const search_price_tran = { "免費" : 1, "200元以下" : 2, "250-500元" : 3, "550元以上": 4, "不限金額" : 5 } const search_theme_tran = { "maker" : 1, "steam" : 2, "教育創新" : 3, "動手做": 4, } const search_sort_tran = { "未售完工作坊" : 1, "現場活動" : 2, "已售完工作坊" : 3, } const prefix = 'https://storage.googleapis.com/makerparty-parenting-com-tw/dev-2019/images' data.forEach(function(ticket) { const code = ticket[0]; if(!code) return true const name = ticket[1]; const sort = ticket[2]; const workshop_code = ticket[3]; const workshop_name = ticket[4]; const workshop_desc = ticket[5]; const age = ticket[6]; const togetther = ticket[7]; const price = ticket[8]; const price_desc = ticket[9]; const session = ticket[10]; const workshop_link = ticket[11]; const booth_code = ticket[12]; const booth_sort = ticket[13]; const booth_link = ticket[14]; const reservation_link = ticket[17]; const session_time = ticket[18]; const session_desc = ticket[19]; const workshop_pic = prefix + '/' +code + '/'+ ticket[20]; const vender_logo = prefix + '/logo/'+ ticket[21]; const vender_link = ticket[22]; const search_age = ticket[23]; const search_price = ticket[24]; const search_theme = ticket[25]; const search_sort = ticket[26]; var obj = { code: code, name: name, sort: sort, workshop_code: workshop_code, workshop_name: workshop_name, workshop_desc: workshop_desc, age: age, togetther: togetther, price: price, price_desc: price_desc, session: session, workshop_link: workshop_link, booth_code: booth_code, booth_sort: booth_sort, booth_link: booth_link, reservation_link: reservation_link, session_time: session_time, session_desc: session_desc, workshop_pic: workshop_pic, vender_logo: vender_logo, vender_link: vender_link, search_age: search_age, search_price: search_price, search_theme: search_theme, search_sort: search_sort_tran[search_sort] }; ticketArray.push(obj); }); return ticketArray } function getShooping(SpreadSheet){ var Sheet = SpreadSheet.getSheets()[2]; var lastDataRowNumber = Sheet.getLastRow(); var data = Sheet.getRange("A2:G" + lastDataRowNumber).getValues(); var shoppingArray = []; data.forEach(function(item) { const category = item[0]; if(!category) return true const sort = item[1]; const product_name = item[2]; const product_link = item[3]; const product_pic = item[4]; const price = item[5]; const sale_price = item[6]; var obj = { category: category, sort: sort, product_name: product_name, product_link: product_link, product_pic: product_pic, price: price, sale_price: sale_price, }; shoppingArray.push(obj); }); return shoppingArray } ``` ### example for do Post ```javascript= function doPost(request) { const dataSet = JSON.parse(request.postData.contents); var SpreadSheet = SpreadsheetApp.openById("documentId"); var Sheet = SpreadSheet.getSheets()[0]; var StartRow = 3; dataSet.forEach(function(item){ Sheet.getRange(StartRow, 1).setValue(item.id); Sheet.getRange(StartRow, 2).setValue(item.company_name); Sheet.getRange(StartRow, 3).setValue(item.company_name_en); Sheet.getRange(StartRow, 4).setValue(item.exhibition); Sheet.getRange(StartRow, 5).setValue(item.normal_url); Sheet.getRange(StartRow, 6).setValue(item.overseas_url); StartRow +=1; }) result = { message: 'export ' + dataSet.length + 'records', records: dataSet.length } return ContentService.createTextOutput(JSON.stringify(result)).setMimeType( ContentService.MimeType.JSON ); } ``` ### example for export pdf to your google drive add `exportAsPDF()` insert to your code ```javascript= function _exportBlob(blob, fileName) { blob = blob.setName(fileName) var folder_id = "google drive folder's id" var pdfFile = DriveApp.getFolderById(folder_id).createFile(blob) } function exportAsPDF() { var spreadsheet = SpreadsheetApp.getActiveSpreadsheet() var blob = _getAsBlob(spreadsheet.getUrl()) _exportBlob(blob, spreadsheet.getName()) } function _getAsBlob(url, sheet, range) { var rangeParam = '' var sheetParam = '' if (range) { rangeParam = '&r1=' + (range.getRow() - 1) + '&r2=' + range.getLastRow() + '&c1=' + (range.getColumn() - 1) + '&c2=' + range.getLastColumn() } if (sheet) { sheetParam = '&gid=' + sheet.getSheetId() } var exportUrl = url.replace(/\/edit.*$/, '') + '/export?exportFormat=pdf&format=pdf' + '&size=LETTER' + '&portrait=true' + '&fitw=true' + '&top_margin=0.75' + '&bottom_margin=0.75' + '&left_margin=0.7' + '&right_margin=0.7' + '&sheetnames=false&printtitle=false' + '&pagenum=false' + '&gridlines=true' + '&fzr=FALSE' + sheetParam + rangeParam Logger.log('exportUrl=' + exportUrl) var response = UrlFetchApp.fetch(exportUrl, { headers: { Authorization: 'Bearer ' + ScriptApp.getOAuthToken(), }, }) return response.getBlob() } ```