Vba 宏或VB在CSV导入ms access后清理数据
目前,我每天提取1个csv文件,然后通过excel宏运行它来清理数据。清理后,我将其导入到ms access中的表中(我在数据库中只有一个表) csv数据有7列。。。跟踪编号(;和端口代码),后跟包裹信息和时间戳 ColA必须只包含跟踪编号,colB必须包含端口代码。问题是数据文件中的行中端口代码位于跟踪编号之前。在这里,我的宏可以方便地进行拆分,并将正确的数据放在正确的列中Vba 宏或VB在CSV导入ms access后清理数据,vba,ms-access,macros,Vba,Ms Access,Macros,目前,我每天提取1个csv文件,然后通过excel宏运行它来清理数据。清理后,我将其导入到ms access中的表中(我在数据库中只有一个表) csv数据有7列。。。跟踪编号(;和端口代码),后跟包裹信息和时间戳 ColA必须只包含跟踪编号,colB必须包含端口代码。问题是数据文件中的行中端口代码位于跟踪编号之前。在这里,我的宏可以方便地进行拆分,并将正确的数据放在正确的列中 Data sample: <br> <h1>colA<h1/><br>
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>
数据样本:
可乐
TN123456789;3-CTC-A1T
TN987654321;3-TPO-B2
TN111122222;N-BKK-A1
N-BKK-B1;tn221111
S-KKC-C1T;TN33333
结果:
可乐
TN123456789
TN987654321
TN111122222
tn221111
TN33333
感冒
3-CTC-A1T
3-TPO-B2
N-BKK-A1
N-BKK-B1
S-KKC-C1T
问题:是否可以导入csv数据文件,然后让access在将数据附加到我的表之前为我清理数据,而不是先通过excel进行清理,然后再通过access进行导入? 如果是,我该如何着手进行 这里是我的+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
Sub demo_cleanbuffer()
'
'=======================================================================================
'程序:demo_cleanbuffer(Sub)
'模块:模块1(模块)
'项目:VBA项目
作者:米塞尼奥
“日期:2016年2月12日
'备注:**必填项**
'单元测试:12/02/2016 10:10 |说明[确定]
'Arg./i:
'-[无参数]
' -
' -
'Arg./o:()
'
"变化",--------------------------------------------------------------------------------
'日期程序员更改
'12/02/2016 GRT/GAZ启动
'
'=======================================================================================
'
作为字节的Dim文件
Dim arrStr()作为变量
返回()作为字符串
将缓冲区设置为字符串
'注意:要删除的字符串
arrStr=Array(“
”、“”、“”、“”、“”和“colA”)
'注意:读取文件
打开“C:\tmp.txt”进行二进制访问,读取为#1
缓冲区=空间(LOF(1))
获取#1,缓冲区
关闭#1
'注意:删除不需要的字符串
对于i=LBound(arrStr)到UBound(arrStr)
缓冲区=替换(缓冲区,arrStr(i),“”)
接下来我
'注意:将每个缓冲行存储到数组中
arrrurn=Split(缓冲区,vbCrLf)
'注意:将数据写入文本文件
打开“C:\tmpo.txt”将输出为#1
对于i=LBound(arrrurn)到UBound(arrrurn)
如果不是Len(arrrurnal(i))=0,则打印#1,修剪(arrrurnal(i))
接下来我
关闭#1
端接头