【发布时间】:2021-06-25 15:05:06
【问题描述】:
我想读取 .csv 文件的全部内容,然后删除数据周围的双引号。我不确定最有效的方法是什么,最好不要先将文件的内容写入数组并使用replace
TOG2021-0012;"沙洲 AC145";63,8;"2021-01-13 06:32";"2021-01-13 06:49"
Sub csv_import()
Dim strSQL1 As String
Dim strSQL2 As String
Dim intNAP As Integer
Dim intIDMaßnahme As Integer
Dim strFieldlist As String
Dim strDateipfad As String
Dim strMsg As String
Dim db As DAO.Database
Dim rsCSV As DAO.Recordset
Dim rsTemp As DAO.Recordset
Dim rsTennet As DAO.Recordset
Dim rsNeueMaßnahmen As DAO.Recordset
Dim rsNeueRegelungsstufe As DAO.Recordset
Dim rsImportRegelstufe_roh As DAO.Recordset
Dim rsImportRegelstufe As DAO.Recordset
Dim intRSCount As Integer
Dim i As Integer
strDateipfad = Dateiname
If strDateipfad = vbNullString Then Exit Sub
DoCmd.TransferText acImportDelim, "CSVImport_Tabelle", "tblCSVtemp", strDateipfad, HasFieldNames:=1
Set db = CurrentDbC
'### erstellt temporäre Tabelle ###
If TableExists("tblRSStemp") Then DoCmd.DeleteObject acTable, "tblRSStemp"
strFieldlist = "txtMaßnahmenNR String, txtNAP String, dblRegelungsstufe Float, txtDatStart String, datDatStart Date, fkIDNAP Integer"
db.Execute "CREATE TABLE tblRSStemp (" & strFieldlist & ")"
On Error GoTo ErrHandler
Set rsCSV = db.OpenRecordset("tblCSVtemp")
Set rsTemp = db.OpenRecordset("tblRSStemp")
'### zählt die Datensätze der Abfrage Location ###
If Not rsCSV.EOF Then
rsCSV.MoveLast
intRSCount = rsCSV.RecordCount
rsCSV.MoveFirst
Else
intRSCount = 0
End If
'### writes the CSV in a temporary tabel ###
Do While Not rsCSV.EOF
With rsTemp
---> '##### here first get rid of double quotes for the entire file ######
If Left(rsCSV![Einspeiser/Netzbetreiber], 6) = "xyz" Then
Debug.Print "ja"
.AddNew
!txtMaßnahmenNr = rsCSV![Massnahmen-Nr]
!txtNAP = rsCSV![Einspeiser/Netzbetreiber]
!dblRegelungsstufe = rsCSV!Feld3
!txtDatStart = rsCSV!Start
!datDatStart = CDate(rsCSV!Start)
If Right(rsCSV![Einspeiser/Netzbetreiber], 1) = "6" Then
!fkIDNAP = 1
Else
!fkIDNAP = 2
End If
.Update
End If
End With
rsCSV.MoveNext
Loop
【问题讨论】:
-
我不认为 VBA 可以读取整个 CSV 文件并进行 en masse 替换。如果每个值都用引号括起来,然后使用 TransferText 命令导入会更好。
标签: vba ms-access ms-access-2010