Groovyでテーブルのデータを取得したい(1)
以前の日記で、Groovyがどうのこうの言っていた気がするのですが、最近忙しくて日記の更新もままならない状態です。
私の普段の作業で定型化できるような作業のうち、そのほとんどがExcelVBAのお世話になっているのですが、
どうせなら気になっているGroovyでどこまでできるのか試してみたくなりました。勉強にもなるし。
手始めにテーブルのデータを取得するようなVBAをGroovyで書いたらどんな風になるのか試してみることに。
今日は、変換元になるVBAを記載しておきます。
Public Sub getTableData() Dim objDB As New ADODB.Connection Dim objRS As ADODB.Recordset Dim strSQL As String Dim bizTableCollection As Collection Dim table_name As Variant objDB.Open "dsn=myDSN; uid=userid; pwd=password" 'カウント数を取りたいのでクライアントサイドカーソールに変更 objDB.CursorLocation = adUseClient Set objRS = objDB.Execute("SELECT table_name FROM user_tables WHERE table_name LIKE 'BIZ_AB_%';") Set bizTableCollection = New Collection Do Until objRS.EOF bizTableCollection.Add (objRS(0)) objRS.MoveNext Loop For Each table_name In bizTableCollection sSql = "SELECT * FROM " & table_name & " WHERE CREATE_USER_CD = '" & ActiveWorkbook.Worksheets("Main").Cells(7, 2) & "'" 'SQLの実行 Set objRS = objDB.Execute(sSql) If objRS.RecordCount > 0 Then 'ワークシートの準備 make_worksheet (table_name) rownum = 2 '列名を出力する For colnum = 1 To objRS.Fields.Count ActiveWorkbook.Worksheets(table_name).Cells(1, colnum) = objRS(colnum).name Next 'データを出力する Do Until objRS.EOF For colnum = 1 To objRS.Fields.Count ActiveWorkbook.Worksheets(table_name).Cells(rownum, colnum) = objRS(colnum).Value Next objRS.MoveNext rownum = rownum + 1 Loop End If Next If Err.Number <> 0 Then MsgBox Err.Description End If 'ADOをクローズします objDB.Close 'オブジェクトの破棄 Set objDB = Nothing MsgBox "終了しました。" End Sub Private Sub make_worksheet(name As String) '探してあれば削除 For Each sh In ActiveWorkbook.Worksheets If sh.name = name Then Application.DisplayAlerts = False sh.Delete Application.DisplayAlerts = True End If Next '新しいワークシートの作成 ActiveWorkbook.Worksheets("Template").Visible = xlSheetVisible ActiveWorkbook.Worksheets("Template").Select ActiveWorkbook.Worksheets("Template").Copy After:=Sheets(Sheets.Count) Set NewSheet = ActiveWorkbook.Worksheets("Template (2)") NewSheet.Select NewSheet.name = name ActiveWorkbook.Worksheets("Template").Visible = xlSheetHidden End Sub
ADODBを使用していますが、いつも忘れる参照設定も載せておきます。
これからGroovyで実装してみるのですが、ExcelVBAがかなり良くできているので
今回のケースだと優位点がでないかなと思います。