Office中国论坛/Access中国论坛

标题: 文件名判别 [打印本页]

作者: ycxchen    时间: 2010-12-22 09:48
标题: 文件名判别
我想导入数据,导入前先判别文件名是否包括有日期格式的字符,例如类似“旅游统计2010-12-22.xcl”,请问,如何用代码判别?
作者: hgxly    时间: 2010-12-22 10:39
导入数据必须有确定的导出对象文件指向,好像并不存在对文件名的判别问题。
作者: ycxchen    时间: 2010-12-22 10:43
为便于数据管理,导出前我已对文件名自动加上日期,所以,导入时为尽可能减少错误,先判别文件名是否包括有日期格式的字符,如何办?
作者: hgxly    时间: 2010-12-22 11:55
可在导入前先用对话框提示一下文件的名称,然后再确认是否导入。如何显示导入文件名称可参阅本地的地址:http://www.office-cn.net/forum-v ... BC%FE%2B%C3%FB.html
作者: ycxchen    时间: 2010-12-22 14:42
我想用数字函数、字符函数可解决问题。
作者: hgxly    时间: 2010-12-22 15:32
本帖最后由 hgxly 于 2010-12-22 15:34 编辑

用left或right函数先提取文件名中日期部分的字符串,然后用isdate函数判别此字符串是否是日期,返回true为真。这应该可以的吧。
a= "2010-12-22"
?isdate(a)
True

作者: todaynew    时间: 2010-12-22 15:49
ycxchen 发表于 2010-12-22 09:48
我想导入数据,导入前先判别文件名是否包括有日期格式的字符,例如类似“旅游统计2010-12-22.xcl”,请问, ...

思维的逻辑过程似乎有点问题。
判断的范围取是否含有日期没有什么意义,含有日期格式的文件多了去了,这个范围虽然比所有文件少,但仍然是一个很大很不确定的范围。
从你的问题看有意义的范围可以用两个常量标识,其一是“旅游统计”,其二是扩展名“xcl”。
你可能要说,我希望导入导出2010-10-1至2010-10-15的一组文件怎么办?解决这个问题有两个方法:如果文件名中代表文件生成日期的字符串格式和位置是固定的,那么可以用mid、left或right函数截取这个字符串,用Cdate转换为日期型后进行判断;还有一种方法直接读取文件的创建(或者修改日期)进行判断。
作者: roych    时间: 2010-12-22 16:52
本帖最后由 roych 于 2010-12-22 17:53 编辑

用format来判断格式就好了~~先贴代码上来以便无法下载附件的网友看看:
  1. Private Sub 导出数据_Click()
  2. Dim fso As Object
  3. '创建组件
  4. Set fso = CreateObject("Scripting.FileSystemObject")
  5. '判断相对路径下是否存在这个文件
  6. If fso.FileExists(CurrentProject.Path & "" & Format(Date - 1, "MMDD") & ".xls") = False Then
  7. MsgBox CurrentProject.Path & "" & Format(Date - 1, "MMDD") & ".xls"
  8. MsgBox "在指定路径下:" & CurrentProject.Path & "" & Chr(13) & "找不到文件:" & Format(Date - 1, "MMDD") & ".xls"
  9. Exit Sub
  10. Else
  11. '消除生成表的警告
  12. DoCmd.SetWarnings False
  13. MsgBox "Dyesect导出的Excl文件必须以日期来命名" & Chr(13) & Chr(13) & "例如,0805.xls,准备好了就按OK吧!", vbOKCancel, "导出数据注意事项"
  14. '链接数据表,主要因为某些字段含有点号,直接导入会出错。
  15. DoCmd.TransferSpreadsheet acLink, acSpreadsheetTypeExcel9, "tem", CurrentProject.Path & "" & Format(Date - 1, "MMDD") & ".xls", True
  16. '执行生成表查询
  17. DoCmd.OpenQuery "Q_WFT"
  18. '开始到处生成表
  19. DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "WFT", Me.导出路径.Value, True
  20. '提示信息
  21. MsgBox "已成功导出到" & Chr(13) & Chr(13) & Me.导出路径.Value
  22. '删除临时表,以备下一次执行(如果不删除,下一次链接表就成了Tem1、Tem2……了)
  23. DoCmd.RunSQL ("Drop table Tem")
  24. End If
  25. End Sub
复制代码
需要说明的是,下载后,两个文件必须保存在同一路径下,否则还是无法识别路径的。此外,这里不支持批量导入。不过您也可以根据这些代码写一下。
[attach]44458[/attach]

作者: ycxchen    时间: 2010-12-23 14:43
十分多谢大家的指教特别是roych的热心解答!
作者: t小宝    时间: 2010-12-24 09:40
“旅游统计2010-12-22.xcl”

如果2010-12-22.xcl前面的文字个数不固定,这样判断:
If  文件名  Like  "*####-##-##.xcl"  then

如果2010-12-22.xcl前面的文字个数固定4个,这样判断:
If  文件名  Like  "????####-##-##.xcl"  then

作者: ycxchen    时间: 2010-12-24 11:39
小宝版主的不失是个好办法!
作者: miracle-y    时间: 2011-1-18 16:18
学习了




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3