设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 1918|回复: 2
打印 上一主题 下一主题

[模块/函数] 被蒙蔽的“=”

[复制链接]
跳转到指定楼层
1#
发表于 2017-10-14 22:24:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
几年前,在某宝的第三方商家上班,当时公司购买了某宝的数据产品。如果你用惯了某东的,也许你会讨厌某宝的。

因为相对来说,某东下载的数据报表相对比较规范。至于某宝嘛……例如,数据表里可能会有表头,为了便于自动化处理,你必须要想办法去删掉或者跳过第一行。而真正让同事们男默女泪的则是订单号问题:

之前的订单号还是15位或者更少位数时,挺规范的。直到有一天,我们发现导入数据到Access,居然出问!题!!了!!!
用Excel打开csv文件,看起来是正常的,却无法导入Access……聪明的你肯定猜到了。是的,因为它加了“=”。在没加“=”之前,订单号可以作为文本字段导入或者链接到Access里,而加了这个符号之后,则打乱了原有的顺序……这一点让我们有一种上当受骗的感觉。

为此,不得不每次用记事本打开csv文件,把“=”替换为空值,保存,然后再导入…大家(此处,Roych代表“大家”)叫苦不迭。当然没多久这事便转给其它同事了,于是也就不再研究这个问题了。

当历史的车轮行驶到2017年9月25日的时候,忽然有朋友说,看看我能不能为她做个小程序,做个自动化报表。收到附件后,心下一沉,真是“青山不改绿水长流”啊。好吧,既然来了,那就花点时间研究下吧,于是便写了这么一段代码(我认为,注释比较充分了):
  1. Function getFormat(ByVal strFileName As String)

  2.     Dim fso As New FileSystemObject
  3.     Dim txt As TextStream
  4.     Dim reg As New RegExp
  5.     Dim strTextContent As String
  6. '打开文件,默认为只读模式。设置为文本流,读取全部数据
  7.     Set txt = fso.OpenTextFile(CurrentProject.Path & "" & strFileName)
  8.     strTextContent = txt.ReadAll
  9. '设置替换的正则表达式,并替换
  10.     reg.Pattern = "="
  11.     reg.Global = True
  12.     strTextContent = reg.Replace(strTextContent, "")
  13. '关闭文件流。重新打开文件,写入文件流。
  14.     Set txt = Nothing
  15.     Set txt = fso.OpenTextFile(CurrentProject.Path & "" & strFileName, ForWriting, True)
  16.     txt.Write strTextContent
  17.     Set txt = Nothing

  18. End Function
复制代码
值得注意的是,OpenTextFile方法有个怪脾气:
①默认打开的话,为只读(ForReading),只可以读取数据(即此时可以使用Read、ReadLine和ReadAll方法),无法写入。这个很容易理解。
②然而,一旦改为写入(ForWriting)或者增加(ForAppending),那么这时候就不能读取。即①的方法失效,只能使用写入的方法(Write或者WriteBlankLine等方法)。

③这也就意味着,我们需要先创建读取数据的文件流,将字符串赋值给变量,然后关闭文件流,重新创建写入数据的文件流,再将变量写入。这就是为什么上面要关闭文件流再打开的原因。

④另外,有人说,可以用VBA自带的Replace方法来替换,然而测试时出错。所以改成了正则表达式。具体为什么,暂时没时间去看,大家可以去调试下。

最后当然是附件了。。。。最最重要的附件如下:





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅

点击这里给我发消息

2#
发表于 2017-10-14 22:34:26 | 只看该作者
赞一个! 坐个沙发!

点击这里给我发消息

3#
发表于 2017-10-14 22:34:56 | 只看该作者
replace也可全部替换的,只是没有正则这么智能!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-4-25 09:11 , Processed in 0.093085 second(s), 27 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表