Board logo

标题: [已解决]VBS把xls文件转换为txt文件 [打印本页]

作者: 随风    时间: 2010-1-5 10:05     标题: [已解决]VBS把xls文件转换为txt文件

〔已解决〕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 编辑 ]
作者: batman    时间: 2010-1-5 12:22

  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
复制代码

作者: 523066680    时间: 2010-1-5 13:00

一个个都是都老手来的
作者: batman    时间: 2010-1-5 17:35

从楼顶的问题来看,固然我二楼的代码是没有问题的,但在随风在测试中又遇到很多问题:如前三行因单元格

合并导致运行出错;读取形如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 编辑 ]




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2