文件需要会员才能下载,需要用到的小伙伴如果不知道如何把宏代码复制到excel的开发工具中可以百度下,只有.xlsm的文件才可以保存宏,也可以通过百度网盘下载
链接:https://pan.baidu.com/s/1F-xM8-KRQ_IzzaamWbUllg
提取码:sqli
表结构和需复制到excel的列
复制到excel的列,将数据库的列复制过来之后点击按钮建表语句生成即可
弹出框和F列有文本代表已经生成建表语句
生成后的语句
注意点
使用vba的宏程序去生成,目前只对varchar,int,decimal,date,datetime格式进行了转换,由于sqlite没有日期格式,代码里转为了bigint,也可根据个人喜好转为varchar
代码
Sub GenerateColumnStrings()
Dim ws As Worksheet
Dim lastRow As Long
Dim i As Long
Dim col2Value As Variant
Dim col3Value As Variant
Dim col4Value As String
Dim resultString As String
Dim finalResult As String
' 设置要操作的工作表
Set ws = ThisWorkbook.Sheets("Sheet1") ' 根据实际工作表名称修改
' 获取最后一行
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
' 初始化最终结果字符串,注意这里修正了初始字符串的格式
finalResult = "CREATE_TABLE_WTBH_IF_NOT_EXISTS: ` CREATE TABLE if not exists ${TABLE_NAME()} (" & vbCrLf
' 遍历每一行
For i = 2 To lastRow
' 获取第二列、第三列和第四列的值及类型
col2Value = ws.Cells(i, 2).Value
col3Value = ws.Cells(i, 3).Value
col4Value = ws.Cells(i, 4).Value
col5Value = ws.Cells(i, 5).Value
' 根据第二列数据类型生成相应格式的字符串
Select Case LCase(col2Value)
Case "varchar"
If InStr(1, col5Value, "主键ID") > 0 Then
resultString = ws.Cells(i, 1).Value & " " & col2Value & "(" & col3Value & ")"
Else
resultString = ws.Cells(i, 1).Value & " " & col2Value & "(" & col3Value & ") DEFAULT ''"
End If
Case "int"
resultString = ws.Cells(i, 1).Value & " INTEGER"
Case "decimal"
resultString = ws.Cells(i, 1).Value & " DECIMAL" & " " & "(" & col3Value & "," & col4Value & ")"
' 如需修改date转换的类型为varchar 则根据case varchar 进行修改
Case "date"
resultString = ws.Cells(i, 1).Value & " BIGINT"
Case "datetime"
resultString = ws.Cells(i, 1).Value & " BIGINT"
Case Else
resultString = ""
End Select
' 添加主键和注释
'If InStr(1, col4Value, "主键ID") > 0 Then
' resultString = resultString & " PRIMARY KEY AUTOINCREMENT NOT NULL"
' End If
' 添加注释
If i < lastRow Then
resultString = resultString & ", --" & col5Value
Else
resultString = resultString & " --" & col5Value
End If
' 将当前行生成的字符串追加到最终结果
finalResult = finalResult & resultString
' 如果不是最后一行,则添加换行符
If i < lastRow Then
finalResult = finalResult & vbCrLf
End If
Next i
' 去掉最后一个逗号和换行符
If Right(finalResult, 2) = "," & vbCrLf Then
finalResult = Left(finalResult, Len(finalResult) - 2)
End If
' 完成 CREATE TABLE 语句的闭合
finalResult = finalResult & vbCrLf & ")`,"
' 输出最终结果到消息框和调试窗口
Debug.Print finalResult
' MsgBox finalResult
' 将最终结果写入到第一列的第五行
ws.Cells(1, 6).Value = finalResult
' 清除第一到第四列的数据
ws.Range(ws.Cells(2, 1), ws.Cells(lastRow, 5)).ClearContents
' 提示完成
MsgBox "字符串生成完成,并写入第一列的第6行。前4列数据已清除。"
End Sub