kazpgmの日記

『プログラム自動作成@自動生成』作成の日記

kaz_javaSpringBootプログラム作成ツールのエクセルVBAをVBに変えてエクセルの外に出す。

■10:00
一昨日の夜発見した”VB.net用のPOIでエクセル操作が軽くて速い”って一文に、昨日一日中、沿ってみた。ら、「javaSpringBootテーブル項目一覧などの定義.xlsx」内の11シートすべてをVB.netの配列に取り込むのに、なんと16秒しかかからない。
うれしい、驚き、感激、感動、安堵だ。
これで、自動作成部分もエクセルマクロVBAからVB.netに変換しても実行時間を気にしないで済む。
POIは15年前から5年間、9年前から2年間にjavaのシステムで使ったことがある。信頼性の高いもので、使い勝手も良いし実行が早い。おすすめ。
①試しに作ったロジック。驚きの16秒!。はや~い
 NuGet パッケージ(NPOI)を入れるだけで動く。以下は入れた後の画面。

Imports NPOI.XSSF.UserModel
Imports NPOI.SS.UserModel
Imports NPOI.SS.Util

Public Class Form1
    Private Sub OtasukeBtn_Click(sender As Object, e As EventArgs) Handles OtasukeBtn.Click
        Dim XlsFileName As String
        Dim NPOI_book As IWorkbook
        Dim sheet As ISheet
        Dim i As Integer, j As Integer, k As Integer
        Dim row As IRow
        Dim cell As ICell
        Dim sheetArrays(1) As Array
        Dim sheetリストカウント As Integer = 0
        Dim sheetName As String
        Dim maxRow As Integer
        Dim maxCal As Integer
        Try
            '自動作成に必要なテーブル定義エクセルを全て配列に読み込む
            XlsFileName = "C:\kazuo\20210319_1400からの_java作成マクロ\202201160000_VB_まだまだ作業中\kaz_javaSpringBootプログラム作成ツール\作成例\javaSpringBootテーブル項目一覧などの定義.xlsx"
            NPOI_book = WorkbookFactory.Create(XlsFileName)
            For i = 0 To NPOI_book.NumberOfSheets - 1 Step 1
                sheet = NPOI_book.GetSheetAt(i)
                sheetName = sheet.SheetName
                If sheetName <> "ReadMe" And
                    sheetName <> "コード一覧表" And
                    sheetName <> "★ひな形★" Then
                    'シートで使用されている行の最終行インデックスと400行を比較して必要な行数を求める
                    maxRow = IIf(400 > sheet.LastRowNum, sheet.LastRowNum, 400)
                    Dim sheetArray(maxRow, 17) '行はMAX400行、列は17にして置く。
                    For j = 0 To maxRow - 1 Step 1
                        '行オブジェクトを取得
                        row = sheet.GetRow(j)
                        ' 行で使用されている最終列のインデックスと17列を比較して必要な列数を求める
                        maxCal = IIf(17 > row.LastCellNum, row.LastCellNum, 17)
                        For k = 0 To maxCal - 1 Step 1
                            'セルオブジェクトを取得
                            cell = sheet.GetRow(j).GetCell(k)
                            If cell Is Nothing Then
                                'sheetArray(j, k) = ""
                            Else
                                sheetArray(j, k) = cell.ToString
                            End If
                        Next
                    Next
                    ReDim Preserve sheetArrays(sheetリストカウント + 1)
                    sheetArrays(sheetリストカウント) = sheetArray
                    sheetリストカウント += 1
                End If
            Next
            'For i = 0 To UBound(sheetArrays) - 1
            'MsgBox("テーブル名=" & sheetArrays(i)(2 - 1, 3 - 1))
            'Next
        Catch ex As Exception
            MessageBox.Show("システムエラーが発生しました。" & ex.Message & vbCrLf & ex.StackTrace())
        Finally
            If NPOI_book IsNot Nothing Then
                'Excelを閉じる+
                NPOI_book.Close()
                NPOI_book = Nothing
            End If
        End Try
    End Sub

■18:30
自動作成マクロVBAVB.netに変換している。なんだか、変換方法が上手になってきたような気がする。
難しく考えなくても行けそう。なんと、日本語変数、日本語関数、日本語クラス、日本語モジュールのまま移行できる。変数の型記述なしでも問題ない箇所はそのまま動く。(問題あるところは型違いで例外発生するけどあまりストレスはない)
現時点の進捗:★PGM(4/24)を変換した。

1.AmendViewとRegisterView作成.cls
2.DDL文作成Otaasuke.cls
3.DbElementsマップ作成.cls
4.DetailView作成.cls
5.JSP項目値作成.cls
6.Joinテーブル達マップ作成.cls
7.ListViewとActionStrView作成.cls
8.Module1_一気にPGM作成Otaasuke.bas
★9.Module2_Consts.bas
10.Module3.bas
★11.Module4_Utils.bas
12.RegisterList作成.cls
★13.TextFile.cls
14.controllerForJoinC部品作成.cls
15.controller作成.cls
16.csv作成.cls
17.entity作成.cls
18.form作成.cls
★19.mail作成.cls
20.repository作成.cls
21.service作成.cls
22.templateなどOtaasuke.cls
23.upload作成.cls
24.テーブル内DbElement達マップ作成.cls

■2021/06/21から、『kaz_javaSpringBootプログラム自動作成◎自動生成ツール』をVectorに載せています。2022年にZenn本も書きました。使ってみての感想や間違いの指定や、こうやったほうがいいとかの情報があればメールください。
Vector
www.vector.co.jp
・Zenn本(SpringBoot、Thymeleaf プログラム自動作成(マクロ使用版))
zenn.dev