赞
踩
这个VBA宏的步骤如下:
Tip:因为 sql 文本 大小写等问题实际比较复杂,所以本例谨慎使用。
一些意外的情况,比如字段包含一些 ) values
之类的,主要是定位问题,再就是值的长度,万一值里面也有,
逗号,再就是空格等问题;
用python应该会好处理些;
以下VBA
脚本经供参考;可以自行绑定按钮;
针对这样式的:
insert into aaa (aa,bb,cc) values ('2','','3aa');
insert into aaa (aa,bb,cc) values ('1',null,'');
' +++++++++++++++++++++++++++++++++++++++++++++++++++ ' author Mr.qyb_y ' Version 1.0.0 ' Date 2024-07-09 21:10 ' +++++++++++++++++++++++++++++++++++++++++++++++++++ Sub ImportSQLToExcel() Dim fd As FileDialog Dim filePath As String Dim fileContent As String Dim lines As Variant Dim line As Variant Dim sht As Worksheet Dim currentSheetIndex As Integer ' 创建文件对话框以选择SQL文件 Set fd = Application.FileDialog(msoFileDialogFilePicker) fd.Title = "Select SQL File" fd.Filters.Add "SQL Files", "*.sql", 1 If fd.Show = -1 Then filePath = fd.SelectedItems(1) Else MsgBox "No file selected.", vbExclamation Exit Sub End If ' 读取文件内容 fileContent = ReadFileContent(filePath) lines = Split(fileContent, vbCrLf) currentSheetIndex = Sheets.Count ' 解析文件内容并插入到Excel中 For Each line In lines If InStr(line, "insert into") > 0 Then Dim tableName As String Dim columnNames As String tableName = ExtractTableName(CStr(line)) ' 强制转换为字符串类型 columnNames = ExtractColumnNames(CStr(line)) ' 提取列名 ' 检查工作表是否已经存在 On Error Resume Next Set sht = Sheets(tableName) On Error GoTo 0 ' 如果工作表不存在,则创建新的工作表,并插入列名 If sht Is Nothing Then Set sht = Sheets.Add(After:=Sheets(currentSheetIndex)) sht.Name = tableName currentSheetIndex = currentSheetIndex + 1 ' 插入列名 InsertColumnNames sht, columnNames End If ' 插入数据 InsertDataIntoSheet sht, CStr(line) ' 强制转换为字符串类型 End If Next line MsgBox "Data imported successfully!", vbInformation End Sub Function ReadFileContent(filePath As String) As String Dim fileNumber As Integer Dim content As String fileNumber = FreeFile Open filePath For Input As fileNumber content = Input(LOF(fileNumber), fileNumber) Close fileNumber ReadFileContent = content End Function Function ExtractTableName(ByVal sqlLine As String) As String ' 明确指定参数类型 Dim startPos As Integer Dim endPos As Integer startPos = InStr(sqlLine, "insert into") + Len("insert into ") endPos = InStr(startPos, sqlLine, " (") ExtractTableName = Trim(Mid(sqlLine, startPos, endPos - startPos)) End Function Function ExtractColumnNames(ByVal sqlLine As String) As String Dim startPos As Integer Dim endPos As Integer startPos = InStr(sqlLine, "(") + 1 endPos = InStr(sqlLine, ") values") ExtractColumnNames = Trim(Mid(sqlLine, startPos, endPos - startPos)) End Function Sub InsertColumnNames(sht As Worksheet, columnNames As String) Dim columns As Variant columns = Split(columnNames, ",") With sht Dim i As Integer For i = LBound(columns) To UBound(columns) .Cells(1, i + 1).Value = Trim(columns(i)) Next i End With End Sub Sub InsertDataIntoSheet(sht As Worksheet, ByVal sqlLine As String) ' 明确指定参数类型 Dim valuesStartPos As Integer Dim valuesEndPos As Integer Dim values As String Dim data As Variant valuesStartPos = InStr(sqlLine, "values (") + Len("values (") valuesEndPos = InStr(valuesStartPos, sqlLine, ");") values = Mid(sqlLine, valuesStartPos, valuesEndPos - valuesStartPos) data = Split(values, ",") ' 去掉单引号并插入数据到工作表中 With sht Dim nextRow As Long nextRow = .Cells(.Rows.Count, 1).End(xlUp).Row + 1 Dim i As Integer For i = LBound(data) To UBound(data) .Cells(nextRow, i + 1).Value = Replace(Trim(data(i)), "'", "") Next i End With End Sub
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/煮酒与君饮/article/detail/805234
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。