[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[问题求助] [已解决]VBS从XLS固定单元格取值并重命名XLS文件名

在一个文件中,有一堆的XLS文件,其名字可以分为三类:一类为形如Bok_EP2_A400YY.xls;第二类为形如Inv_ep2_A400YY.xls;第三类为形如Pac_EP2_A400YY.xls。其实BOK,Inv,Pac三份文件为一整套文件。整套文件的判断标准看每一个文件名的第二个“_"后的字符,如果字符相同,就是同一套文件。比如Bok_EP2_A400YY.xls;Inv_ep2_A400YY.xls;Pac_EP2_A400YY.xls其第二个“_"后的字符都为A400YY,那么这三个文件就是同一套文件。

需要取Bok_EP2_A400YY.xls文件的D4单元格值,并将取得的值用来重命名整套文件XLS文件,比如Bok_EP2_A400YY.xls文件的D4单元格为5782042200,那么需要将Bok_EP2_A400YY.xls重命名为5782042200 bok.xls,Inv_ep2_A400YY.xls重命名为5782042200 inv.xls;Pac_EP2_A400YY.xls重命名为5782042200 pac.xls。因为这几个是一套文件。

请看附件。
代码在2楼
感谢qaz123654
1

评分人数

    • Batcher: 感谢主动给标题标注[已解决]字样PB + 2

保存为vbs在xls目录运行
  1. On Error Resume Next
  2. Dim fName
  3. Set objFS = CreateObject("Scripting.FileSystemObject")
  4. Set objFolder = objFS.GetFolder(".")
  5. readxls("Bok")
  6. readxls("")
  7. msgbox "完成"
  8. Set objFS = Nothing
  9. Set objFolder = Nothing
  10. Function readxls(str)
  11. For each f in objFolder.Files
  12. fName=split(f.Name,"_")
  13. If right(f.Name,4) = ".xls" and ubound(fName)=2 and fName(0) <> str then
  14. Set oExcel = CreateObject( "Excel.Application")
  15. oExcel.WorkBooks.Open(createobject("wscript.shell").currentdirectory&"\Bok_"&fName(1)&"_"&fName(2))
  16. fName1=oExcel.Cells(4,4).Value
  17. oExcel.Quit
  18. Set oExcel = Nothing
  19. f.Name= fName1&" "&fName(0)&".xls"
  20. End If
  21. Next
  22. End Function
复制代码

[ 本帖最后由 qaz123654 于 2010-7-15 12:40 编辑 ]

TOP

谢谢qaz123654
可能是我表达不清楚,在XLS文件夹中并不是每次都有Bok_EP2_A400YY.xls,事实上,路径应该跟VBS文件路径相同。即VBS放在什么文件夹下,就对该文件夹下的XLS文件其作用。
另外,我发现现在的代码只能更改Bok_EP2_A400YY这一套的名字,其它的文件都不能更改。
结果如下图:

TOP

回复 3楼 的帖子

是从以Bok_EP2_开头的文件中读取吗?

TOP

原帖由 qaz123654 于 2010-7-14 17:48 发表
是从以Bok_EP2_开头的文件中读取吗?

是的,读取所有Bok_EP2_文件中的D4单元格。

TOP

再次感谢qaz123654
第一次的代码我发现,每次运行只能更改1套文件。将更改好的文件剪切出去后,再运行VBS文件可以又改一套。也就是每次运行,只能更改一套文件而不能循环更改。

第二次的代码,运行后,只能更改BOK文件,其它配套的的INV,PAC不能更改,而且,好像只能改几个BOK文件,其它的BOK文件没有变化。第二次的运行结果;

TOP

代码更新到2楼,测试了下似乎可用,效率就差了点

TOP

原帖由 qaz123654 于 2010-7-15 12:46 发表
代码更新到2楼,测试了下似乎可用,效率就差了点


已经可以了,多谢qaz123654.

TOP

返回列表