こんにちは! 健史です。
以下の記事の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版を利用されるのが多いかと思います。
ですが、プログラムで「データを順次処理する」ことが必要になった際に、ひな形として参考にして頂ければと思います。
ご活用頂ければと思います。
コメント