2016-09-03 64 views
0

我想使用谷歌應用程序腳本連接MS SQL到谷歌電子表格。這裏是我的應用程序的腳本代碼使用谷歌腳本從MS SQL更新谷歌spreedsheet

function SQLdb() { 
// Replace the variables in this block with real values. 

// Read up to 1000 rows of data from the table and log them. 
function readFromTable() { 
    var user = '{usename}'; 
    var userPwd = '{password}'; 
    var database = '{databasename}' 
    var connectionString = 'jdbc:sqlserver://server.database.windows.net:1433;databaseName='+database; 
    var conn = Jdbc.getConnection(connectionString , user, userPwd); 

    var start = new Date(); 
    var stmt = conn.createStatement(); 
    stmt.setMaxRows(1000); 
    var results = stmt.executeQuery('SELECT TOP 1000 * FROM dbo.dbo'); 
    var numCols = results.getMetaData().getColumnCount(); 

    while (results.next()) { 
    var rowString = ''; 
    for (var col = 0; col < numCols; col++) { 
     rowString += results.getString(col + 1) + '\t'; 
    } 
    Logger.log(rowString) 
    } 

    results.close(); 
    stmt.close(); 

    var end = new Date(); 
    Logger.log('Time elapsed: %sms', end - start); 
} 
readFromTable(); 
} 

現在,當我看到在日誌中腳本編輯器,我可以看到,該連接到SQL數據庫的工作和腳本能夠讀取所有的表格單元格。但是我無法將這些數據輸入到數據表中。我是新應用程序腳本。那麼我在這裏錯過了什麼?

任何幫助將非常appricated!

+0

代碼顯示沒有嘗試使用電子表格。查看SprradsheetApp的文檔。 –

+0

我試圖爲已經存在的電子表格創建這個腳本,並試圖從SQL中獲取數據並插入到其中。請原諒我的基本谷歌腳本的知識。有沒有關於這方面的更多信息?謝謝! – Coderapper

+0

https://developers.google.com/apps-script/guides/sheets –

回答

0

下面是我如何做到這一點。將所有大寫位更改爲相應的URL,數據庫名稱,Google Spreadsheet ID等。

要這個函數傳遞您希望在MSSQL數據庫上執行的SQL查詢以及您想要的Spreadsheet中的工作表名稱把數據放進去。這基本上使用包含列名稱的查詢結果填充該命名錶。

function getData(query, sheetName) { 
    //jdbc:sqlserver://localhost;user=MyUserName;password=*****; 
    var conn = Jdbc.getConnection("jdbc:sqlserver://URL;user=USERNAME;password=PASSWORD;databaseName=DBNAME"); 
    var stmt = conn.createStatement(); 
    stmt.setMaxRows(MAXROWS); 
    var rs = stmt.executeQuery(query); 
    Logger.log(rs); 

    var doc = SpreadsheetApp.openById("SPREADSHEETID"); 
    var sheet = doc.getSheetByName(sheetName); 
    var results = []; 
    var cell = doc.getRange('a1'); 
    var row = 0; 

    cols = rs.getMetaData(); 
    colNames = []; 
    for (i = 1; i <= cols.getColumnCount(); i++) { 
    Logger.log(cols.getColumnName(i)); 
    colNames.push(cols.getColumnName(i)); 
    } 
    results.push(colNames); 

    var rowCount = 1; 
    while(rs.next()) { 
    curRow = rs.getMetaData(); 
    rowData = []; 
    for (i = 1; i <= curRow.getColumnCount(); i++) { 
     rowData.push(rs.getString(i)); 
    } 
    results.push(rowData); 
    rowCount++; 
    } 
    sheet.getRange(1, 1, MAXROWS, cols.getColumnCount()).clearContent(); 
    sheet.getRange(1, 1, rowCount, cols.getColumnCount()).setValues(results); 

    Logger.log(results); 
    rs.close(); 
    stmt.close(); 
    conn.close(); 
} 
0

這是我做到的。我還爲Mysql & MSSQL製作了一個JDBC連接器工具。您可以從我的GitHub Repo Here適應此工具:Google Spreadsheet JDBC Connector

function readFromTable(queryType, queryDb, query, tab, startCell) { 
    // Replace the variables in this block with real values. 
    var address; 
    var user; 
    var userPwd ; 
    var dbUrl; 

    switch(queryType) { 
    case 'sqlserver': 
     address = '%YOUR SQL HOSTNAME%'; 
     user = '%YOUR USE%'; 
     userPwd = '%YOUR PW%'; 
     dbUrl = 'jdbc:sqlserver://' + address + ':1433;databaseName=' + queryDb; 
     break; 
    case 'mysql': 
     address = '%YOUR MYSQL HOSTNAME%'; 
     user = '%YOUR USER'; 
     userPwd = '%YOUR PW%'; 
     dbUrl = 'jdbc:mysql://'+address + '/' + queryDb; 
    break; 
    } 

    var conn = Jdbc.getConnection(dbUrl, user, userPwd); 
    var start = new Date(); 
    var stmt = conn.createStatement(); 
    var results = stmt.executeQuery(query); 
    var sheet = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheetTab = sheet.getSheetByName(tab); 
    var cell = sheetTab.getRange(startCell); 
    var numCols = results.getMetaData().getColumnCount(); 
    var numRows = sheetTab.getLastRow(); 
    var headers ; 
    var row =0; 

    clearRange(tab,startCell,numRows, numCols); 


    for(var i = 1; i <= numCols; i++){ 
    headers = results.getMetaData().getColumnName(i); 
     cell.offset(row, i-1).setValue(headers); 
     } 

    while (results.next()) { 
    var rowString = ''; 
    for (var col = 0; col < numCols; col++) { 
     rowString += results.getString(col + 1) + '\t'; 
     cell.offset(row +1, col).setValue(results.getString(col +1)); 
    } 
    row++ 
    Logger.log(rowString) 
    } 

    results.close(); 
    stmt.close(); 

    var end = new Date(); 
    Logger.log('Time elapsed: %sms', end - start); 
}