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

[已解决]VBS把xls文件转换为txt文件

[复制链接]
发表于 2010-1-5 10:05:20 | 显示全部楼层 |阅读模式
〔已解决〕vbs把xls文件转换为txt文件
要求:
   xzt.vbs 运行方式是从bat中调用 如: call xzt.vbs "a.xls" hhh.txt
vbs功能
1、首先把xls文件中的所有空值改为#
2、再把xls文件另存为hhh.txt
注:要求1中把所有空值改为#并不是要改xls文件内容,目的是要txt中的空值等于#
    如果要求1有难度,可以忽略,直接解决第2个要求也可以。
有劳大家!

[ 本帖最后由 随风 于 2010-1-5 17:23 编辑 ]
发表于 2010-1-5 12:22:20 | 显示全部楼层
  1. '另存工作表为txt文件,并将空值替换为#
  2. dim hang,lie,counter,counter1 '声明变量
  3. on error resume next '忽略错误

  4. '设置对象
  5. set wshshell=createobject ("wscript.shell")
  6. path=wshshell.currentdirectory '当前路径
  7. set objexcel=createobject ("excel.application")
  8. set objworks=objexcel.workbooks.open (path&""&wscript.arguments(0)) 'arguments(0)表示参数1
  9. set objfso=createobject("scripting.filesystemobject")
  10. set objtext=objfso.opentextfile(path&""&wscript.arguments(1),2,true) 'arguments(1)表示参数2
  11. objexcel.worksheets(1).activate

  12. '获取工作表有效总行列数,但工作表的第一行和第一列不得有空值
  13. counter=0
  14. do
  15.      counter=counter+1
  16. loop until objexcel.cells(1,counter).value=""
  17. lie=counter-1:counter=0
  18. do
  19.      counter=counter+1
  20. loop until objexcel.cells(counter,1).value=""
  21. hang=counter-1:counter=0

  22. '读取工作表数据并将空值替换为#
  23. for counter=1 to hang
  24.     for counter1=1 to lie
  25.         if objexcel.cells(counter,counter1).value="" then
  26.            strexcel=strexcel&" #"
  27.            else
  28.            strexcel=strexcel&" "&objexcel.cells(counter,counter1).value
  29.         end if
  30.      next
  31.      strexcel=strexcel&vbcrlf
  32. next
  33. objtext.write strexcel
  34. objtext.close
  35. objworks.close

  36. '清空对象,释放内存
  37. set objtext=nothing
  38. set objfso=nothing
  39. set objworks=nothing
  40. set objexcel=nothing
  41. set wshshell=nothing
复制代码

评分

参与人数 1PB +11 技术 +1 收起 理由
随风 + 11 + 1 感谢!

查看全部评分

发表于 2010-1-5 13:00:09 | 显示全部楼层
一个个都是都老手来的
发表于 2010-1-5 17:35:02 | 显示全部楼层
从楼顶的问题来看,固然我二楼的代码是没有问题的,但在随风在测试中又遇到很多问题:如前三行因单元格

合并导致运行出错;读取形如0.*的数据时出现超长数据;要求对数值取两位小数并四舍五入,于是,修改代码

如下:
  1. '另存工作表为txt文件,并将空值替换为#
  2. dim hang,lie,counter,counter1,vbstr '声明变量
  3. on error resume next '忽略错误

  4. '设置对象
  5. set wshshell=createobject ("wscript.shell")
  6. path=wshshell.currentdirectory '当前路径
  7. set objexcel=createobject ("excel.application")
  8. set objworks=objexcel.workbooks.open (path&""&wscript.arguments(0))
  9. set objfso=createobject("scripting.filesystemobject")
  10. set objtext=objfso.opentextfile(path&""&wscript.arguments(1),2,true)
  11. objexcel.worksheets(1).activate

  12. '从第四行开始获取工作表有效总行列数(舍弃前三行非数据行)
  13. counter=0
  14. do
  15.      counter=counter+1
  16. loop until objexcel.cells(4,counter).value=""
  17. lie=counter-1:counter=3
  18. do
  19.      counter=counter+1
  20. loop until objexcel.cells(counter,1).value=""
  21. hang=counter-1:counter=0

  22. '读取工作表数据并将空值替换为#
  23. for counter=4 to hang
  24.     for counter1=1 to lie
  25.         vbstr=objexcel.cells(counter,counter1).value
  26.         if vbstr="" then
  27.            strexcel=strexcel&" #"
  28.            else
  29.            if replace(vbstr,".","")<>vbstr then vbstr=round(vbstr,2) '对小数取两位小数并四舍五入
  30.            if mid(vbstr,1,1)="." then vbstr="0"&vbstr
  31.            strexcel=strexcel&" "&vbstr
  32.         end if
  33.      next
  34.      strexcel=strexcel&vbcrlf
  35. next
  36. objtext.write strexcel
  37. objtext.close
  38. objworks.close

  39. '清空对象,释放内存
  40. set objtext=nothing
  41. set objfso=nothing
  42. set objworks=nothing
  43. set objexcel=nothing
  44. set wshshell=nothing
复制代码

[ 本帖最后由 batman 于 2010-1-5 17:36 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-17 03:51 , Processed in 0.019808 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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