kazpgmの日記

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

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

■18:26
①自動作成マクロVBAVB.netに変換したのがだいたい動いた。が、ちょっと間違いデータを定義エクセルに入れると例外発生が起きる。
定義エクセル・N列(検索項目順)に”A”を入れて、そのまま、「一気に自動作成」ボタン押すと例外発生(at System.Number.ThrowOverflowOrFormatException(ParsingStatus status, TypeCode type)とか、at Microsoft.VisualBasic.CompilerServices.Conversions.ToInteger(String Value))する。
・・・テーブル定義入力確認チェックで、”エラー:「商品情報」シート13行14列:検索項目順を指定する時は、数字を指定してください。入力された値 = A"が出るので、必ず修正してから「一気に自動作成」ボタン押してほしい。
でも、気になる箇所は修正しておく。
・自動作成マクロVBA

if item項目名たち(k) = Null


VB.netの時

if IsDBNull(item項目名たち(k)) or IsNothing(item項目名たち(k))

・自動作成マクロVBA

If Cells(j, cont検索項目順) > i Then

VB.netの時

if Cells(j, cont検索項目順)<>""  And IsNumeric(Cells(j, cont検索項目順)) then
    If Integer.Parse(Cells(j, cont検索項目順)) > i Then
    End If
End If

補足:VB.netの時と書いたが、ここに書いた処理はPOIを使った時のもので、POIでエクセル読んで全データを「シート配列達()(、)」に全部保存して、それを自作Cells関数で読んでいる。VB.netにCellsという関数はないので。
以下が自作関数たち。

    Function Cells(ByRef 行 As Integer, ByRef 列 As Integer) As String
        Cells = CellsOnIDX(アクティブシートIDX, 行, 列)
    End Function
    Function CellsForコンスタント(ByRef 行 As Integer, ByRef 列 As Integer) As String
        CellsForコンスタント = CellsOnIDX(TOOL用コンスタントIDX, 行, 列)
    End Function

    Function CellsOnSheetName(ByRef sheetName As String, ByRef 行 As Integer, ByRef 列 As Integer) As String
        Dim idx As Integer
        idx = シートIDXMap.Item(sheetName)
        CellsOnSheetName = CellsOnIDX(idx, 行, 列)
    End Function

    Function CellsOnIDX(ByRef idx As Integer, ByRef 行 As Integer, ByRef 列 As Integer) As String
        Dim str As String
        If シート配列達(idx)(行, 列) Is Nothing Then
            str = ""
        Else
            str = シート配列達(idx)(行, 列)
        End If
        CellsOnIDX = str
    End Function

②POIのWorkbookFactory.Createの時、他のプロセスがエクセルをすでに開いているとき、例外発生する。これに対応する。
これで、他のプロセスがエクセルをすでに開いていても読み込めるようになる。
VB.netの修正前

Dim NPOI_book As IWorkbook
NPOI_book = WorkbookFactory.Create(エクセルファイル名フルパス)

VB.netの修正後

Dim XlsFileName As String
Dim NPOI_book As IWorkbook
Dim inputStream As System.IO.FileStream
inputStream = New System.IO.FileStream(エクセルファイル名フルパス, System.IO.FileMode.Open, System.IO.FileAccess.Read, System.IO.FileShare.ReadWrite)
NPOI_book = WorkbookFactory.Create(inputStream)

■22:36
VB.netの実行ファイルを作って動かした。
 思った通り動いている。
・SpringBootAutoCreate.exeとそのほかDLLなど

・画面

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