web-dev-qa-db-ja.com

Googleスプレッドシートをデータベースに接続する方法

Googleシートファイル内のシートにクエリを使用して生データを自動入力しようとしています。

Microsoft Excelのように、シートに機能が組み込まれているようには見えません。

何か不足していますか?それ以降廃止され、どこでもデータと呼ばれる機能を持たなくなったアドオンが1つ見つかりました。 https://www.dataeverywhere.com/use-database-sheets

それに代わるものはありますか?

10
obizues

here を参照すると、 Google Apps Scriptの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);
}

お役に立てれば!

8
abielita

これは、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);


}
5
Mojtaba

独自のソリューションを展開したくない場合は、 SeekWell を確認してください。これにより、データベースに接続し、SQLクエリを直接Sheetsで作成できます。

その他の機能:

  • データベース内のすべてのテーブルと列をすばやく表示し、ワンクリックで列の要約統計を取得します
  • サイドバー、大きなポップアップウィンドウ、またはセル内からのクエリ結果は、特定のセル、スクラッチシート、またはピボットテーブルに直接送信できます。
  • クエリ履歴は保存され、古いクエリを再実行する必要がある場合に表示できます
  • クエリのセットを「実行シート」に保存して、複数のレポートを一度に更新できます

免責事項:私はこれを作りました。

"Database Browser" は、既製のソリューションです GSuite Marketplaceのアドオン データベースに接続し、(クエリビルダーを使用して)データベースにクエリを実行し、結果をGoogleシートに取得します直接。

このアドオンは、接続とクエリのリストも保持しており、再実行に便利です。あなたが言及した廃止されたアドオンの代替を探しているなら、データベースブラウザは良い選択です。

2
Jasperin

このコードはうまく機能します:Azureデータベースに接続し、テーブルからデータを取得します

function onOpen() {

var spreadsheet = SpreadsheetApp.getActive();

var menuItems = [
    {name: 'Get Data', functionName: 'readData'}
];
        spreadsheet.addMenu('Report', menuItems);
}


// Replace the variables in this block with your values.
 var hostName = 'SERVER.database.windows.net:1433;'
 var db = 'DBNAME;';
 var user = '[email protected]';
 var userPwd = 'PASSWORD';



 var dbUrl = 'jdbc:sqlserver://'+hostName + 'databaseName='+db; 


function readData() {
 var conn = Jdbc.getConnection(dbUrl, user, userPwd);
 var stmt = conn.createStatement();

  
 // Place your query below
 var results = stmt.executeQuery('SELECT TOP (10) * FROM [dbo].[NAME]');
 var metaData=results.getMetaData();
 var numCols = metaData.getColumnCount();
 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);

}
0
Dmitri