如何将Google表格连接到数据库

obi*_*ues 10 google-sheets google-sheets-api

我正在尝试使用查询在我的Google工作表文件中的工作表上自动填充一些原始数据.

它似乎没有像Microsoft Excel那样具有任何内置功能.

我错过了什么吗?我发现一个附加组件已经停止使用,不再适用于所有地方的数据:https://www.dataeverywhere.com/use-database-sheets

还有其他东西已经取代了吗?

how*_*ese 12

如果您不想推出自己的解决方案,请查看SeekWell。它允许您连接到数据库并直接在表格中编写 SQL 查询。

其他一些功能:

  • 快速查看数据库中的所有表和列,一键获取列的汇总统计信息
  • 从侧边栏、大型弹出窗口或单元格内查询 结果可以发送到特定单元格、草稿表或直接发送到数据透视表
  • 如果您需要重新执行旧查询,您的查询历史将被保存和查看
  • 您可以在“运行表”上保存一组查询以一次更新多个报告

免责声明:我做了这个。


abi*_*ita 8

至于提到这里,你可以使用谷歌Apps脚本的JDBC服务.您必须编写一个脚本,使用JDBC服务中的数据填充电子表格.

从数据库中读取

此示例演示如何从数据库中读取大量记录,并根据需要循环结果集.

// Replace the variables in this block with real values.
var address = 'database_IP_address';
var user = 'user_name';
var userPwd = 'user_password';
var db = 'database_name';

var dbUrl = 'jdbc:mysql://' + address + '/' + db;

// Read up to 1000 rows of data from the table and log them.
function readFromTable() {
  var conn = Jdbc.getConnection(dbUrl, user, userPwd);

  var start = new Date();
  var stmt = conn.createStatement();
  stmt.setMaxRows(1000);
  var results = stmt.executeQuery('SELECT * FROM entries');
  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);
}
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助!

  • 您从 JDBC 页面粘贴的代码片段显示了如何记录查询结果。但如何将它们放入 Google 表格文档中呢? (2认同)

Moj*_*aba 5

这是示例代码,说明如何从SQL Server实例读取数据并将其插入Google表格中。该代码创建一个菜单项以重新加载数据,并且每次清除内容时都会保留格式。

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);


}
Run Code Online (Sandbox Code Playgroud)

  • 这有效,但是“var Sheet = SpreadsheetApp.getActiveSheet();” 如果工作表中有多个选项卡,则可能会导致问题 - 它将清除用户在运行时打开的任何选项卡的内容。最好使用“varsheet=spreadsheet.getSheetByName(“Sheet1”)“。我建议在回复中进行编辑 (2认同)