내 연락처 정보
우편메소피아@프로톤메일.com
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
이 VBA 매크로의 단계는 다음과 같습니다.
팁: 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
🍀
안녕히 주무세요
평화
어서 해봐요