How to connect Google Sheets to Database

前端 未结 8 1770
[愿得一人]
[愿得一人] 2020-12-23 02:31

I\'m trying to auto-populate some raw data on a sheet in my google sheets file with a query.

It doesn\'t look like sheets has any built in functionality to do so lik

8条回答
  •  挽巷
    挽巷 (楼主)
    2020-12-23 03:09

    This is the sample code to how read data from a SQL Server instance and insert them in Google Sheet. The code creates a menu item to re-load data, and each time clears the content while it keeps the format.

    function onOpen() {
    
    var spreadsheet = SpreadsheetApp.getActive();
    
    var menuItems = [
        {name: 'Get Data', functionName: 'readData'}
    ];
    spreadsheet.addMenu('My Functions', menuItems);
    }
    
    
    // Replace the variables in this block with real values.
    var address = 'ip-address:port'; //ex. '10.1.1.1:1433'
    var user = 'db-username';
    var userPwd = 'db-password';
    var db = 'db-name';
    
    var dbUrl = 'jdbc:sqlserver://' + address + ';databaseName=' + db;
    
    
    function readData() {
     var conn = Jdbc.getConnection(dbUrl, user, userPwd);
    
    
     var stmt = conn.createStatement();
    
     var results = stmt.executeQuery('SELECT * FROM [dbo].[User]');
     var metaData=results.getMetaData();
     var numCols = metaData.getColumnCount();
    
     var spreadsheet = SpreadsheetApp.getActive();
     var sheet = spreadsheet.getSheetByName("Sheet1");
     //you can use the following line to get the active sheet
     //var sheet = SpreadsheetApp.getActiveSheet();
    
    
    
     sheet.clearContents();
    
     var arr=[];
    
     for (var col = 0; col < numCols; col++) {
      arr.push(metaData.getColumnName(col + 1));
     }
    
     sheet.appendRow(arr);
    
    
     while (results.next()) {
      arr=[];
    
      for (var col = 0; col < numCols; col++) {
    
       arr.push(results.getString(col + 1));
      }
     sheet.appendRow(arr);
    
    }
    
    results.close();
    stmt.close();
    
    sheet.autoResizeColumns(1, numCols+1);
    
    
    }
    

提交回复
热议问题