找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 20763|回复: 12

[问题求助] 【已解决】XLS to TXT的VBS代码

[复制链接]
发表于 2018-6-21 14:50:13 | 显示全部楼层 |阅读模式
朋友帮我写了个XLS文件转换为TXT文件的VBS。
能实现转换,但需要进一步优化一下,在此请教达人帮帮我。
拜托,先谢谢了!


——原VBS文件代码:
  1. dim objexcel,f,path
  2. set objExcel = CreateObject("Excel.Application")

  3. Set objWorkbook = objExcel.Workbooks.Open ("F:\test\temp\2社会管理 市政 市政绿化.xls")
  4. intRow = 1
  5. strDN = ""
  6. Do Until objExcel.Cells(intRow,1).Value = ""
  7. objExcel.Cells(intRow,2).Value = intRow
  8. intRow = intRow + 1
  9. Loop

  10. objExcel.DisplayAlerts =false '屏蔽保存确认对话框
  11. 'application.displayalerts=false
  12. objExcel.Workbooks(1).SaveAS "F:\test\temp\2社会管理 市政 市政绿化.txt",-4158,ture 'EXCEL文件另存为TXT文件
  13. objExcel.Workbooks(1).Close,ture '关闭工作表
  14. objExcel.Quit ' 退出

  15. 'wscript.echo "保存成功"
  16. 'wscript.sleep 10000 '挂起10秒,此属性单位为毫秒
  17. 'fso.CreateTextFile(xx,true).write(xx)写入txt
复制代码
——需要优化的需求:
一、能自动去读取某目录下的所有XLS、XLSX文件,包括主目录下所有子目录下的XLS、XLSX文件;
二、TXT文件统一到一个指定的目录下,且TXT文件名自动以各个XLS、XLSX主文件名命名;
三、该VBS转换成的TXT文件,内容中字符之间的空格字符全部变成了?号;需要将该?号自动删除后再保存;见下面示例:

受?理??单?位?                ?街道 > 社区                受??理??人?                ?朱有才       
        反映人姓名?                ?陈女士                性????????别?                ?女       
受        身?份??证?号?                ?5001************                联系电话?



拜托各位,谢谢了!

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2018-6-21 16:43:14 | 显示全部楼层
本帖最后由 yhcfsr 于 2018-6-21 16:47 编辑

  • 传一小段样本过来.现在不确定出现乱码的原因,初步推断可能是文件编码的问题.
  • 至少我WIN10上简单测试,并没有出现空格变?的情况.
  • 删除?的方法是不可取的.
  • 敏感信息,请修改相关内容.
 楼主| 发表于 2018-6-21 22:25:33 | 显示全部楼层
本帖最后由 locoman 于 2018-6-21 22:28 编辑

回复 2# yhcfsr

谢谢您的热心!!
可以先帮我将前两个需求解决了吧,拜托了,谢谢您!
一、能自动去读取某目录下的所有XLS、XLSX文件,包括主目录下所有子目录下的XLS、XLSX文件;
二、TXT文件统一到一个指定的目录下,且TXT文件名自动以各个XLS、XLSX主文件名命名;

   


——样本现在暂不方便传上来,确实可能与编码有关,因为,这样XLS文件都是从另一个IT系统导出来的,并不是一般手工制作的标准化二维表格。
 楼主| 发表于 2018-6-22 08:40:27 | 显示全部楼层
  • 传一小段样本过来.现在不确定出现乱码的原因,初步推断可能是文件编码的问题.

    yhcfsr 发表于 2018-6-21 16:43


  • 您好,素材样本已补传到1楼了,请帮我看看,谢谢了!
    发表于 2018-6-22 09:58:41 | 显示全部楼层
    以下脚本,只是单纯的转换,不会对文件内容进行处理.TXT编码为UNICODE,应该可以解决乱码问题.
    使用方法:在用户设置区,将路径设置好即可.
    1. '==============用户设置区================='
    2. Dim source,destination
    3. source="d:\test"      '源目录
    4. destination="e:\test" '目的目录
    5. '========================================='

    6. '=================函数定义区=============='
    7. '脚本功能:EXCEL文件另存为TXT'
    8. Function FilesTree(oFolder,dPath,objExcel)
    9.   
    10.         '处理当前目录文件
    11.         Set oFiles = oFolder.Files   
    12.         For Each oFile In oFiles
    13.                 exName=LCase(Right(oFile.Name,Len(oFile.Name)-InstrRev(oFile.Name,".")+1))
    14.                 baseName=Left(oFile.Name,InstrRev(oFile.Name,".")-1)
    15.     If exName=".xls" Or exName=".xlsx"  Then
    16.                 set objWorkbook=objExcel.Workbooks.open(oFile.Path)
    17.                 objExcel.Workbooks(1).SaveAS dPath&""&baseName&".txt",42,true
    18.                 objExcel.Workbooks(1).Close,ture
    19.         End If
    20.         Next   
    21.    
    22.         '递归处理子目录文件
    23.         Set oSubFolders = oFolder.SubFolders
    24.         For Each oSubFolder In oSubFolders      
    25.                 FilesTree oSubFolder,dPath,objExcel   
    26.         Next   
    27.        
    28. End Function
    29. '================函数定义区结束================='

    30. '================主程序开始====================='
    31. Set oFso = CreateObject("Scripting.FileSystemObject")   

    32. If oFso.FolderExists(source) And oFso.FolderExists(destination) Then
    33.         set objExcel=CreateObject("Excel.Application")
    34.         Set oFolder = oFso.GetFolder(source)
    35.         objExcel.DisplayAlerts = False
    36.         FilesTree oFolder,destination,objExcel
    37.         objExcel.DisplayAlerts = True
    38.         objExcel.Quit ' 退出
    39.         'msgbox "处理完成"&vbCrlf&" 即将打开目的目录"
    40.         CreateObject("Wscript.Shell").run destination
    41. Else
    42.         msgbox "源目录或目的目录不存在"
    43. End If






    复制代码

    评分

    参与人数 3技术 +3 收起 理由
    locoman + 1 技高人好!
    9zhmke + 1 热心助人
    老刘1号 + 1 感谢分享

    查看全部评分

     楼主| 发表于 2018-6-22 14:10:36 | 显示全部楼层
    本帖最后由 locoman 于 2018-6-22 14:43 编辑

    回复 5# yhcfsr

    谢谢您的热情帮助!
    佩服您的高超能力!
    ——经测试完全能实现需求,也没有乱码,——完美!
    ——等大批量测试几次后再结贴吧。
    再次感谢大哥哥的帮助!
    再次感谢这个论坛的帮助!
    七百多个XLS文件转TXT,用时8分钟。
       
     楼主| 发表于 2018-6-23 13:38:37 | 显示全部楼层
    回复 5# yhcfsr


    多次测试:
    同样七百多个文件,
    在WIN7(32位)下耗时8分钟,
    在WIN10(64位)下耗时18分钟,
    差距有点大。
    请问是否有可以优化的?
    谢谢您!
    发表于 2018-6-23 21:34:37 | 显示全部楼层
    脚本没什么可优化的了.时间差异我没法测试.
    去百度一下相关软件,可能比脚本效率高.
    EXCLE中用录制宏来处理,也是可行的.
     楼主| 发表于 2018-6-24 15:44:40 | 显示全部楼层
    本帖最后由 locoman 于 2018-6-24 15:46 编辑

    回复 8# yhcfsr


        谢谢您的帮助,就这样也完全可以使用了!
    这个论坛给我们很多很大的帮助,感谢这些热心的达人们!
    发表于 2018-6-26 15:10:43 | 显示全部楼层
    楼主该给相助者发个红包了...
     楼主| 发表于 2018-6-30 13:56:00 | 显示全部楼层
    我没有这热心达人的微信呀,有的话,一定发个红包给他的,表达谢意和敬意!
     楼主| 发表于 2018-7-2 13:06:21 | 显示全部楼层
    本帖最后由 locoman 于 2018-7-2 13:09 编辑

    现在,突然发现一个严重问题……
    @yhcfsr帮助写的代码能正常将XLS和XLSX转换成TXT,其保存的TXT的编码格式是Unicode格式。

    但是,我把这些导出的TXT文件提交到另一个应用系统去处理时,其TXT在该系统中显示为乱码,
    原来,该应用系统必须要用ANSI编码格式的TXT文件。

    ——请问,是否可以将5楼的代码修改为TXT直接保存为ANSI的编码格式。

    谢谢再帮我修正一下吧,谢谢了!
    发表于 2018-7-2 13:56:09 | 显示全部楼层
    回复 12# locoman


    论坛没有@功能,不过可以点击5楼左下角的那个“回复”,这样yhcfsr就能收到通知了。
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

    GMT+8, 2026-3-17 01:13 , Processed in 0.025112 second(s), 9 queries , File On.

    Powered by Discuz! X3.5

    © 2001-2026 Discuz! Team.

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