GAS

GAS スプレッドシートのデータからSQL文を自動生成

GAS

こんにちは! 健史です。

以下の記事のGAS版です。

Excel-VBA 実例 ExcelデータからSQL文を自動生成
こんにちは! 健史です。 オラクルやSQLサーバなどのデータベースを使われている方で SQL文として、ExcelデータからのINSERT文など作成したい! と思ったことありませんか。 空白の列に'="INSERT INTO ~"を埋め込むこ...
スポンサーリンク

概要説明

シート1データからシート2のINSERTのSQLを作成します。

シート1

シート2

プログラム

//------------------------------
// INSERT SQL 作成
//------------------------------
function myfunc1(){
  const TABLENAME = "HANBAIDB.顧客M"
// シート定義
  var ss = SpreadsheetApp.getActiveSpreadsheet()
  var sheet1 = ss.getSheets()[0]
  var sheet2 = ss.getSheets()[1]
// 変数定義
  var ix1,iy1,ix1_max,iy1_max,ix2
  var str_sql
// 最大行、最大桁を取得
  ix1_max = sheet1.getLastRow()
  iy1_max = sheet1.getLastColumn()
// 出力エリアのクリア
  sheet2.clear()
  ix2 = 2
// ループ処理
  for (ix1 = 3 ; ix1 <= ix1_max ;ix1++) {
    str_sql = "INSERT INTO " + TABLENAME + " ("
// 項目名をセット
    for (iy1 = 1; iy1 <= iy1_max ; iy1++){
      str_sql = str_sql + sheet1.getRange(1,iy1).getValue()
      if (iy1 == iy1_max) {
        str_sql = str_sql + ") VALUES ("
      }
      else {
           str_sql = str_sql + ","
      }
    }
    for (iy1 = 1; iy1 <= iy1_max ; iy1++){
      switch(sheet1.getRange(ix1,iy1).getValue()) {
      case "":
        str_sql = str_sql + "NULL"
        break
      default:
        switch(sheet1.getRange(2,iy1).getValue()) {
        case "":
          str_sql = str_sql + "'" + sheet1.getRange(ix1,iy1).getValue() + "'"
          break
        case "N":
          str_sql = str_sql + sheet1.getRange(ix1,iy1).getValue()
          break
        }
      break
      }
      if (iy1 == iy1_max) {
        str_sql = str_sql + ");"
      }
      else {
        str_sql = str_sql + ","
      }
    }
    ix2++
    sheet2.getRange(ix2,1).setValue(str_sql)
  }
}

補足

VBA版のプログラムを置き換えただけなので、特にありません。

詳しくは、冒頭のVBA版の記事をご覧頂ければと思います。

最後に

データベースのデータをダウンロードしたり加工して貼り付けるのに使用するにはEXCELが多く、SQL作成においても冒頭記事のVBA版を利用されるのが多いかと思います。

ですが、プログラムで「データを順次処理する」ことが必要になった際に、ひな形として参考にして頂ければと思います。

ご活用頂ければと思います。

GAS
スポンサーリンク
- 面白かったらシェアお願いします! -
健史をフォローする
自分で改善

コメント