詳細的使用方法上述參考網址都有,就不在敘述。
使用上的問題,當有修正Google Apps Script的程式時除了要重新發佈->部置為網路應用程式外專案版本也要變動。不然會一直是修正前的程式碼在執行。
可以將Google的試算表傳給任何人,當Excel上傳資料後,Google試算表約1~3秒就會更新。適合即時回報統計數值。
1、VBA副程式
Public Sub sendData2GoogleSheet()
On Error GoTo handleerr
num1 = Sheet1.Range("E2") '將excel的E2的欄位資料丟進num1的變數中
num2 = Sheet1.Range("F2") '將excel的F2的欄位資料丟進num2的變數中
num3 = Sheet1.Range("G2") '將excel的G2的欄位資料丟進num3的變數中
num4 = Sheet1.Range("H2") '將excel的H2的欄位資料丟進num4的變數中
num5 = Sheet1.Range("I2") '將excel的I2的欄位資料丟進num5的變數中
num6 = Sheet1.Range("J2") '將excel的J2的欄位資料丟進num6的變數中
num7 = Sheet1.Range("K2") '將excel的K2的欄位資料丟進num7的變數中
num8 = Sheet1.Range("L2") '將excel的L2的欄位資料丟進num8的變數中
'將資料寫進googlesheet
Set WinHttp = CreateObject("WinHttp.WinHttpRequest.5.1")
postData = "method=write&snum1=" & num1 & "&snum2=" & num2 & "&snum3=" & num3 & "&snum4=" & num4 & "&snum5=" & num5 & "&snum6=" & num6 & "&snum7=" & num7 & "&snum8=" & num8 '&與變數之間要空一格
WinHttp.Open "POST", "這裡請填上你發佈的網路應用程式的網址", False
WinHttp.setRequestHeader "authority", "script.google.com"
WinHttp.setRequestHeader "User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36"
WinHttp.setRequestHeader "Content-type", "application/x-www-form-urlencoded"
WinHttp.send postData
MsgBox "傳送成功"
Exit Sub
handleerr:
MsgBox "傳送失敗"
End Sub
2、Google Apps Script
var sheet1=SpreadsheetApp.getActiveSpreadsheet().getSheetByName("sheet1");
function doPost(e) {
var para = e.parameter, method = para.method;
if (method == "write") {
write_data(para);
}
}
function write_data(para) {
var num1 = para.snum1,num2 = para.snum2,num3 = para.snum3,num4 = para.snum4,num5 = para.snum5,num6 = para.snum6,num7 = para.snum7,num8 = para.snum8;
var date = new Date();
var now = date.getHours() + ':' + date.getMinutes() + ':' + date.getSeconds();
sheet1.getRange(4,2).setValue(num1);
sheet1.getRange(5,2).setValue(num2);
sheet1.getRange(6,2).setValue(num3);
sheet1.getRange(7,2).setValue(num4);
sheet1.getRange(8,2).setValue(num5);
sheet1.getRange(9,2).setValue(num7);
sheet1.getRange(10,2).setValue(num8);
sheet1.getRange(3,2).setValue(num6);
sheet1.getRange(1,2).setValue(now);
}