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
自動作成マクロVBAをVB.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