标题: [已解决]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
- '另存工作表为txt文件,并将空值替换为#
- dim hang,lie,counter,counter1 '声明变量
- on error resume next '忽略错误
-
- '设置对象
- set wshshell=createobject ("wscript.shell")
- path=wshshell.currentdirectory '当前路径
- set objexcel=createobject ("excel.application")
- set objworks=objexcel.workbooks.open (path&"\"&wscript.arguments(0)) 'arguments(0)表示参数1
- set objfso=createobject("scripting.filesystemobject")
- set objtext=objfso.opentextfile(path&"\"&wscript.arguments(1),2,true) 'arguments(1)表示参数2
- objexcel.worksheets(1).activate
-
- '获取工作表有效总行列数,但工作表的第一行和第一列不得有空值
- counter=0
- do
- counter=counter+1
- loop until objexcel.cells(1,counter).value=""
- lie=counter-1:counter=0
- do
- counter=counter+1
- loop until objexcel.cells(counter,1).value=""
- hang=counter-1:counter=0
-
- '读取工作表数据并将空值替换为#
- for counter=1 to hang
- for counter1=1 to lie
- if objexcel.cells(counter,counter1).value="" then
- strexcel=strexcel&" #"
- else
- strexcel=strexcel&" "&objexcel.cells(counter,counter1).value
- end if
- next
- strexcel=strexcel&vbcrlf
- next
- objtext.write strexcel
- objtext.close
- objworks.close
-
- '清空对象,释放内存
- set objtext=nothing
- set objfso=nothing
- set objworks=nothing
- set objexcel=nothing
- set wshshell=nothing
复制代码
作者: 523066680 时间: 2010-1-5 13:00
一个个都是都老手来的
作者: batman 时间: 2010-1-5 17:35
从楼顶的问题来看,固然我二楼的代码是没有问题的,但在随风在测试中又遇到很多问题:如前三行因单元格
合并导致运行出错;读取形如0.*的数据时出现超长数据;要求对数值取两位小数并四舍五入,于是,修改代码
如下:- '另存工作表为txt文件,并将空值替换为#
- dim hang,lie,counter,counter1,vbstr '声明变量
- on error resume next '忽略错误
-
- '设置对象
- set wshshell=createobject ("wscript.shell")
- path=wshshell.currentdirectory '当前路径
- set objexcel=createobject ("excel.application")
- set objworks=objexcel.workbooks.open (path&"\"&wscript.arguments(0))
- set objfso=createobject("scripting.filesystemobject")
- set objtext=objfso.opentextfile(path&"\"&wscript.arguments(1),2,true)
- objexcel.worksheets(1).activate
-
- '从第四行开始获取工作表有效总行列数(舍弃前三行非数据行)
- counter=0
- do
- counter=counter+1
- loop until objexcel.cells(4,counter).value=""
- lie=counter-1:counter=3
- do
- counter=counter+1
- loop until objexcel.cells(counter,1).value=""
- hang=counter-1:counter=0
-
- '读取工作表数据并将空值替换为#
- for counter=4 to hang
- for counter1=1 to lie
- vbstr=objexcel.cells(counter,counter1).value
- if vbstr="" then
- strexcel=strexcel&" #"
- else
- if replace(vbstr,".","")<>vbstr then vbstr=round(vbstr,2) '对小数取两位小数并四舍五入
- if mid(vbstr,1,1)="." then vbstr="0"&vbstr
- strexcel=strexcel&" "&vbstr
- end if
- next
- strexcel=strexcel&vbcrlf
- next
- objtext.write strexcel
- objtext.close
- objworks.close
-
- '清空对象,释放内存
- set objtext=nothing
- set objfso=nothing
- set objworks=nothing
- set objexcel=nothing
- set wshshell=nothing
复制代码
[ 本帖最后由 batman 于 2010-1-5 17:36 编辑 ]
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |