Translate

2018年11月28日 星期三

透過Execl VBA將資料寫進google sheet(import or send data from Excel to Google sheet)

參考:透過Excel將資料寫進google sheet(import or send data from Excel to Google sheet)

詳細的使用方法上述參考網址都有,就不在敘述。

使用上的問題,當有修正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);
}