Office中国论坛/Access中国论坛
标题:
被蒙蔽的“=”
[打印本页]
作者:
roych
时间:
2017-10-14 22:24
标题:
被蒙蔽的“=”
几年前,在某宝的第三方商家上班,当时公司购买了某宝的数据产品。如果你用惯了某东的,也许你会讨厌某宝的。
因为相对来说,某东下载的数据报表相对比较规范。至于某宝嘛……例如,数据表里可能会有表头,为了便于自动化处理,你必须要想办法去删掉或者跳过第一行。而真正让同事们男默女泪的则是订单号问题:
之前的订单号还是15位或者更少位数时,挺规范的。直到有一天,我们发现导入数据到Access,居然出
问!题!!了!!!
用Excel打开csv文件,看起来是正常的,却无法导入Access……聪明的你肯定猜到了。是的,因为它加了“=”。在没加“=”之前,订单号可以作为文本字段导入或者链接到Access里,而加了这个符号之后,则打乱了原有的顺序……这一点让我们有一种上当受骗的感觉。
为此,不得不每次用记事本打开csv文件,把“=”替换为空值,保存,然后再导入…大家(此处,Roych代表“大家”)叫苦不迭。当然没多久这事便转给其它同事了,于是也就不再研究这个问题了。
当历史的车轮行驶到2017年9月25日的时候,忽然有朋友说,看看我能不能为她做个小程序,做个自动化报表。收到附件后,心下一沉,真是“青山不改绿水长流”啊。好吧,既然来了,那就花点时间研究下吧,于是便写了这么一段代码(我认为,注释比较充分了):
Function getFormat(ByVal strFileName As String)
Dim fso As New FileSystemObject
Dim txt As TextStream
Dim reg As New RegExp
Dim strTextContent As String
'打开文件,默认为只读模式。设置为文本流,读取全部数据
Set txt = fso.OpenTextFile(CurrentProject.Path & "" & strFileName)
strTextContent = txt.ReadAll
'设置替换的正则表达式,并替换
reg.Pattern = "="
reg.Global = True
strTextContent = reg.Replace(strTextContent, "")
'关闭文件流。重新打开文件,写入文件流。
Set txt = Nothing
Set txt = fso.OpenTextFile(CurrentProject.Path & "" & strFileName, ForWriting, True)
txt.Write strTextContent
Set txt = Nothing
End Function
复制代码
值得注意的是,
OpenTextFile
方法有个怪脾气:
①默认打开的话,为只读(ForReading),只可以读取数据(即此时可以使用Read、ReadLine和ReadAll方法),无法写入。这个很容易理解。
②然而,一旦改为写入(ForWriting)或者增加(ForAppending),那么这时候就不能读取。即
①的方法失效
,只能使用写入的方法(Write或者WriteBlankLine等方法)。
③这也就意味着,我们需要先创建读取数据的文件流,将字符串赋值给变量,然后关闭文件流,重新创建写入数据的文件流,再将变量写入。这就是为什么上面要关闭文件流再打开的原因。
④另外,有人说,可以用VBA自带的Replace方法来替换,然而测试时出错。所以改成了正则表达式。具体为什么,暂时没时间去看,大家可以去调试下。
最后当然是附件了。。。。最最重要的附件如下:
[attach]62065[/attach]
作者:
tmtony
时间:
2017-10-14 22:34
赞一个! 坐个沙发!
作者:
tmtony
时间:
2017-10-14 22:34
replace也可全部替换的,只是没有正则这么智能!
欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/)
Powered by Discuz! X3.3