zoukankan      html  css  js  c++  java
  • VBA制作jeecgboot代码生成器

    在jeecgboot中制作查询报表非常方便,可以在online报表配置中快速完成。

    图片

    在数据库中可以看到对应的两张表存放这些配置,一张是onl_cgreport_head,存放查询表的头部信息。

    图片

    另一张是明细表onl_cgreport_item,存放查询报表的字段信息。

    图片

    在开发数据大屏时需要很多查询数据,可以先在online报表中配置查询SQL,通过报表查看需要的数据,然后用VBA通过数据库中的这两张表可以生成jeecgboot后端接口代码。

    图片

    首先在MySQL 官网上下载 Excel 连接 MySQL 数据库的工具,连接为:
    https://dev.mysql.com/downloads/windows/excel/

    连接mysql的方法

    Public Sub OpenConnection(Server As String, PORT As Long, DB As String, UID As String, PWD As String)
        Set conn = New ADODB.Connection
        conn.ConnectionString = "Driver={MySQL ODBC 8.0 Unicode Driver};Server=" & Server _
                                & ";Port=" & PORT & ";DB=" & DB & ";UID=" & UID & ";PWD=" & PWD & ";OPTION=3;"
        conn.Open
    End Sub 
    

    查询SQL数据并显示到listview的方法

    Public Sub dataToListView(sql As String, lv As ListView)
        lv.ListItems.Clear
        lv.ColumnHeaders.Clear
        Dim i, j
        Dim rc As New ADODB.Recordset
        rc.Open sql, conn, adOpenStatic
        For i = 0 To rc.Fields.Count - 1
            lv.ColumnHeaders.Add , , rc.Fields(i).Name
        Next i
        rc.MoveFirst
        i = 1
        Do Until rc.EOF
            lv.ListItems.Add , , rc.Fields(0)
            For j = 1 To rc.Fields.Count - 1
                If Not IsNull(rc.Fields(j)) Then lv.ListItems(i).SubItems(j) = rc.Fields(j)
            Next j
            i = i + 1
            rc.MoveNext
        Loop
        rc.Close
        Set rc = Nothing
    End Sub
    

    将上面方法放到类模块中,就可以实例化对象来使用方法。

    如连接数据库,将编码以"sql_"开头的的SQL报表显示到listview1中

    msql.OpenMySQLConnection IP, PORT, DATABASE, USERNAME, PASSWORD
    msql.dataToListView "select * from onl_cgreport_head where left(code,4)=""sql_""", ListView1
    

    选择SQL报表,显示明细到listview2中。

    Private Sub ListView1_ItemClick(ByVal Item As MSComctlLib.ListItem)
        msql.dataToListView "select * from onl_cgreport_item where cgrhead_id=""" & Item.Text & """", ListView2
    End Sub
    

    图片

    一键生成文件夹、java和xml文件

    If ListView1.SelectedItem Is Nothing Then
    Else
        folderPath = ThisWorkbook.Path & "api"
        entity = Replace(ListView1.SelectedItem.SubItems(1), "sql_", "")
        desc = ListView1.SelectedItem.SubItems(2)
        cf.MakeFolder folderPath
        cf.MakeFolder folderPath & "" & entity
        cf.MakeFolder folderPath & "" & entity & "controller"
        createController
        cf.MakeFolder folderPath & "" & entity & "entity"
        createEntity
        cf.MakeFolder folderPath & "" & entity & "mapper"
        cf.MakeFolder folderPath & "" & entity & "mapperxml"
        createXML
        createMapper
        cf.MakeFolder folderPath & "" & entity & "service"
        createService
        cf.MakeFolder folderPath & "" & entity & "serviceimpl"
        createImpl
    End If
    

    其中生成实体类的代码

    Dim cf As New CFileAction
    With cf
        .Clear
        .WriteText "package org.jeecg.modules.demo.api." & entity & ".entity;" & vbCrLf
        .WriteText "import lombok.Data;" & vbCrLf
        .WriteText "@Data" & vbCrLf
        .WriteText "public class " & entity & " {" & vbCrLf
        For i = 1 To ListView2.ListItems.Count
            .WriteText "    private " & ListView2.ListItems(i).SubItems(5) & " " & ListView2.ListItems(i).SubItems(2) & ";" & vbCrLf
        Next i
        .WriteText "}" & vbCrLf
        WriteUTF8File .txt, folderPath & "" & entity & "entity" & entity & ".java"
    End With
    Set cf = Nothing
    

    图片

    生成java代码时需要的是没有BOM的UTF-8编码,一开始使用ADODB.Stream对象来保存java文件,IDEA打开后每个文件都要切换GBK再换回UTF-8编码才能正常使用。后来用以下api函数来保存java文件,默认bBOM为false,生成的代码可以直接运行使用。

    Public Declare PtrSafe Function MultiByteToWideChar Lib "kernel32" ( _
    ByVal CodePage As Long, _
    ByVal dwFlags As Long, _
    ByRef lpMultiByteStr As Any, _
    ByVal cchMultiByte As Long, _
    ByVal lpWideCharStr As Long, _
    ByVal cchWideChar As Long) As Long
    
    Public Declare PtrSafe Function WideCharToMultiByte Lib "kernel32" ( _
    ByVal CodePage As Long, _
    ByVal dwFlags As Long, _
    ByVal lpWideCharStr As LongPtr, _
    ByVal cchWideChar As Long, _
    ByRef lpMultiByteStr As Any, _
    ByVal cchMultiByte As Long, _
    ByVal lpDefaultChar As String, _
    ByVal lpUsedDefaultChar As Long) As Long
    
    Public Const CP_UTF8 = 65001
    
    ' 将输入文本写进UTF8格式的文本文件
    ' 输入
    ' strInput:文本字符串
    ' strFile:保存的UTF8格式文件路径
    ' bBOM:True表示文件带"EFBBBF"头,False表示不
    Public Sub WriteUTF8File(strInput As String, strFile As String, Optional bBOM As Boolean = False)
        Dim bByte As Byte
        Dim ReturnByte() As Byte
        Dim lngBufferSize As Long
        Dim lngResult As Long
        Dim TLen As Long
        ' 判断输入字符串是否为空
        If Len(strInput) = 0 Then Exit Sub
        'On Error GoTo errHandle
        ' 判断文件是否存在,如存在则删除
        If Dir(strFile) <> "" Then Kill strFile
        TLen = Len(strInput)
        lngBufferSize = TLen * 3 + 1
        ReDim ReturnByte(lngBufferSize - 1)
        lngResult = WideCharToMultiByte(CP_UTF8, 0, StrPtr(strInput), TLen, ReturnByte(0), lngBufferSize, vbNullString, 0)
        If lngResult Then
            lngResult = lngResult - 1
            ReDim Preserve ReturnByte(lngResult)
            Open strFile For Binary As #1
                If bBOM = True Then
                    bByte = 239
                    Put #1, , bByte
                    bByte = 187
                    Put #1, , bByte
                    bByte = 191
                    Put #1, , bByte
                End If
                Put #1, , ReturnByte
            Close #1
        End If
    End Sub
    

    api接口测试成功。

    图片

  • 相关阅读:
    npm执行清理缓存失败npm cache clean
    Vue中计算属性(computed)和监听属性函数watch的比较
    vue生命周期函数
    vue自定义指令
    vue 自定义过滤器
    vue 自定义全局按键修饰符
    线性回归模型
    python常用模块
    KNN算法的实现
    python集合(set)的运算
  • 原文地址:https://www.cnblogs.com/seanhu/p/15187726.html
Copyright © 2011-2022 走看看