CSV导入到ms访问后,宏或VB清理数据

时间:2016-02-12 05:40:28

标签: vba ms-access macros

目前,我每天提取1个csv文件,然后通过excel宏运行它来清理我的数据。一旦清理,我将在ms访问中将其导入到我的表中(我在数据库中只有一个表)。

csv数据有7列...跟踪号码(;和端口码),后跟包裹信息和时间戳。

ColA必须只包含跟踪号,并且colB是端口代码。问题是数据文件包含在跟踪编号之前端口代码所在的行。这是我的宏派上用场分割并将正确的数据放在右栏中的地方。

Data sample: <br>
<h1>colA<h1/><br>
TN123456789;3-CTC-A1T <br>
TN987654321;3-TPO-B2 <br>
TN111122222;N-BKK-A1 <br>
N-BKK-B1;TN222211111 <br>
S-KKC-C1T;TN33333333

Result:<br>
<h1>colA<h1/><br>
TN123456789<br>
TN987654321<br>
TN111122222<br>
TN222211111<br>
TN33333333<br>

<h1>colB<h1/><br>
3-CTC-A1T<br>
3-TPO-B2<br>
N-BKK-A1<br>
N-BKK-B1<br>
S-KKC-C1T<br>

问题(S):
而不是通过excel进行清理然后访问导入,是否可以导入csv数据文件,然后让我访问清理我的数据,然后将其附加到我的表中? 如果是,我该怎么做呢?

1 个答案:

答案 0 :(得分:0)

这是我的+1解决方案; - 读取文件 - 将文件清理到内存中 - 准备导入数据的输出文件

Sub demo_cleanbuffer()
'
'=======================================================================================
' Procedure : demo_cleanbuffer (Sub)
' Module    : Module1 (Module)
' Project   : VBAProject
' Author    : misterneo
' Date      : 12/02/2016
' Comments  : **MANDATORY**
' Unit Test : 12/02/2016 10:10 | Description [OK]
' Arg./i    :
'           - [NO PARAM]
'           -
'           -
' Arg./o    : ()
'
'Changes--------------------------------------------------------------------------------
'Date               Programmer                      Change
'12/02/2016         GRT / GAZ               Initiate
'
'=======================================================================================
'

Dim filen As Byte
Dim arrStr() As Variant
Dim arrReturn() As String
Dim buffer As String

'Note : String to erase
arrStr = Array("<br>", "<h1>", "<h1/>", "colA")
'Note : read file

Open "C:\tmp.txt" For Binary Access Read As #1
    buffer = Space(LOF(1))
    Get #1, , buffer
Close #1

'Note : erase unwanted string
For i = LBound(arrStr) To UBound(arrStr)
    buffer = Replace(buffer, arrStr(i), "")
Next i

'Note : store each buffer line into array
arrReturn = Split(buffer, vbCrLf)

'Note : write data into text file
Open "C:\tmpo.txt" For Output As #1
    For i = LBound(arrReturn) To UBound(arrReturn)
        If Not Len(arrReturn(i)) = 0 Then Print #1, Trim(arrReturn(i))
    Next i
Close #1

End Sub