|
几年前,在某宝的第三方商家上班,当时公司购买了某宝的数据产品。如果你用惯了某东的,也许你会讨厌某宝的。
因为相对来说,某东下载的数据报表相对比较规范。至于某宝嘛……例如,数据表里可能会有表头,为了便于自动化处理,你必须要想办法去删掉或者跳过第一行。而真正让同事们男默女泪的则是订单号问题:
之前的订单号还是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方法来替换,然而测试时出错。所以改成了正则表达式。具体为什么,暂时没时间去看,大家可以去调试下。
最后当然是附件了。。。。最最重要的附件如下:
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|