Google SpreadSheetとMySQLを連携する

2020年11月18日

【追記】

新型コロナによるリモートワークでアクセス数がものすごい増えてますが、いわゆる「やってみた」の記事なので、仕事レベルで使うのはやめてください……。いいことありません。

Google SpreadSheetは「Google App Script」が使えるので、大変便利。Javascriptでマクロがかけます。

まず使い方

最初に使い方はとってもかんたん。スプレットシートを開いて、ツール->スクリプトエディタを開くだけでGoogle App Scriptのエディタが開きます。

初歩的な使い方

初歩的な使い方は、、、他のサイトさんを調べてみてください。すみません。。。

いきなりMySQLと接続

それではMySQLと接続してみます。
MySQLにはこのようなデータが入っています。

これらのデータを取得し、スプレットシート上でプルダウンで選択できるようにしてみたいと思います。
このようなコードを書いてみました。

function set_catalog_list(){

// スプレッドシートの情報を取得
 var rng = SpreadsheetApp
   .getActiveSpreadsheet()
   .getActiveSheet()
   .setActiveSelection("A1");

  var con_str = 'jdbc:mysql://サーバーのIPアドレス:3306/DB名';
  var user_id = 'DBユーザー名';
  var user_pass = 'DBパスワード';
  
  // DBに接続
  var conn = Jdbc.getConnection(con_str, user_id, user_pass);
  var stmt = conn.createStatement();
  stmt.setMaxRows(100);
  
  //クエリを記載
  var str_query = 'select * from cataloglists;';
  // クエリを実行
  var rs = stmt.executeQuery(str_query);
  
  while(rs.next()) {
    //getStringで列名を指定して取得
    result.push(rs.getString("listname"));
  }

  rs.close();
  stmt.close();
  conn.close();
 
 // 取得した情報をスプレットシート上にプルダウンとして出力 
 var rule = SpreadsheetApp
   .newDataValidation()
   .requireValueInList(result, true)
   .build();

 rng.setDataValidation(rule);

}

実行すると次のようにA1にプルダウンが生成されます。

できましたね☆

おまけ

先程はエディタ上から実行したのですが、スプレットシートにボタンを設置して、そこから実行もできます。
挿入 -> 図形描画でボタンを作成し、図形を挿入します。挿入した図形を右クリック -> スクリプトを割り当てを選択して先程エディタ上に作成した関数名を指定することで、ボタンをクリックしたときにその関数が実行されるようになります。