标题: 【练习-057】vbs生成excel工作表并写入指定内容 [打印本页]
作者: batman 时间: 2010-1-6 11:19 标题: 【练习-057】vbs生成excel工作表并写入指定内容
出题目的:
让大家初步接触并了解vbs对excel的操作方法
加分原则:
满分10分
题目如下:
用vbs在当前目录生成test.xls,并向工作表的c3:f10中写入所在的行列数(以空格格开),如单元格为d8则写入
8 4。
作者: qaz123654 时间: 2010-1-6 16:56
- dim aa
- aa=left(wscript.scriptfullname,instrrev(wscript.scriptfullname,"\")-1)
- Set oexcel=CreateObject("excel.application")
- oexcel.Workbooks.Add()
- oexcel.Cells(3,3).Value = "4 1"
- oexcel.Cells(10,6).Value = "10 6"
- oexcel.ActiveWorkbook.SaveAs(aa+"\test.xls")
- oexcel.Quit
复制代码
作者: batman 时间: 2010-1-6 17:00
楼上的是不是看错题意了,要求是向工作表的c3:f10范围内写入数字,不是只写入两个单元格中。。。
获取本地路径个人习惯用path=createobject("wscript.shell").currentdirectory&"\"
[ 本帖最后由 batman 于 2010-1-6 17:06 编辑 ]
作者: qaz123654 时间: 2010-1-6 17:56 标题: 回复 3楼 的帖子
的确是看错了~~
-
- dim aa
- aa=createobject("wscript.shell").currentdirectory&"\"
- Set oexcel=CreateObject("excel.application")
- oexcel.Workbooks.Add()
- Set obj = oexcel.Range("C3","F10")
- obj.columns ="=CONCATENATE(ROW(),"" "",COLUMN())"
- oexcel.ActiveWorkbook.SaveAs(aa+"test.xls")
- oexcel.Quit
复制代码
作者: batman 时间: 2010-1-6 18:11
今天才知道能根据给定单元格范围输入,以前都是用两个for来完成的。。。
作者: batman 时间: 2010-1-6 18:29 标题: 回复 4楼 的帖子
obj.columns ="=CONCATENATE(ROW(),"" "",COLUMN())"
巧妙地利用了excel本身的查找引用函数,但可以简化修改为obj.columns ="=ROW()&"" ""&COLUMN()"
[ 本帖最后由 batman 于 2010-1-6 18:41 编辑 ]
作者: zqz0012005 时间: 2010-1-6 18:53
left(wscript.scriptfullname,instrrev(wscript.scriptfullname,"\")-1)是脚本所在目录,等价于%~dp0
createobject("wscript.shell").currentdirectory&"\"是脚本工作目录,等价于%cd%
两者不是等同的,最显著的例子是在拖放时(拖放时工作在%userprofile%)。不少人对拖放的结果感到莫名其妙(怎么没有生成文件?),就是没有注意到这一点。
推荐用%~dp0
其实vbs操作excel最好的方式是vba,一个好去处是excelhome,当然MSDN上的Office参考是少不了
作者: batman 时间: 2010-1-6 18:57
简化4楼代码如下:- Set oexcel=CreateObject("excel.application")
- oexcel.Workbooks.Add()
- oexcel.Range("C3:F10").columns ="=ROW()&"" ""&COLUMN()"
- oexcel.ActiveWorkbook.SaveAs(createobject("wscript.shell").currentdirectory&"\test.xls")
- oexcel.Quit
复制代码
[ 本帖最后由 batman 于 2010-1-6 19:01 编辑 ]
作者: Undead 时间: 2010-1-6 22:10
两个FOR:- strString = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
- strStart = "C3"
- strEnd = "F10"
-
- IntCStart = InStr(strString, Left(strStart, 1))
- IntCEnd = InStr(strString, Left(strEnd, 1))
-
- IntLStart = Mid(strStart, 2)
- IntLEnd = Mid(strEnd, 2)
-
- WorkPath = Left(Wscript.ScriptFullName, InStrRev(Wscript.ScriptFullName, "\")-1)
-
- Set objExcel = CreateObject("Excel.Application")
- objExcel.Visible = True
- objExcel.Workbooks.Add
-
- For i = IntCStart To IntCEnd
- For j = IntLStart To IntLEnd
- objExcel.Cells(j, i).Value = j & " " & i
- Next
- Next
-
- objExcel.ActiveWorkbook.SaveAs(WorkPath & "\a.xls")
- objExcel.Quit
复制代码
[ 本帖最后由 Undead 于 2010-1-7 12:51 编辑 ]
作者: batman 时间: 2010-1-7 09:06 标题: 回复 9楼 的帖子
路径不对,在上级目录生成了"本级目录名a.xls"
同时前面的截取是不是显得过于复杂,其实你直接3 to 10,3 to 6就可以了啊
作者: batman 时间: 2010-1-7 09:12
本人的解:- dim counter1,counter2
- set objexcel=createobject("excel.application")
- objexcel.workbooks.add
- for counter1=3 to 10
- for counter2=3 to 6
- objexcel.cells(counter1,counter2).value=counter1&" "&counter2
- next
- next
- objexcel.activeworkbook.saveas(createobject("wscript.shell").currentdirectory&"\test.xls")
- objexcel.quit
- set objexcel=nothing
复制代码
作者: Undead 时间: 2010-1-7 12:53 标题: 回复 10楼 的帖子
的确是在上级目录生成了a.xls。已经修改,感谢指正。
之所以搞的那么复杂是因为本来想做成让用户自己输入C3和F10的。
作者: more 时间: 2010-1-12 12:56
选择目标单元格后用数组公式:
{=ROW()&" "&COLUMN()}
作者: more 时间: 2010-1-12 13:52
来个vba的:- Sub aaa()
- Range("c3:f10").Select
- Selection.FormulaArray = "=row()&"" ""&column()"
- End Sub
复制代码
作者: wc726842270 时间: 2011-3-17 11:36
smile版主真是细心,学习了
不过4L的obj.columns ="=CONCATENATE(ROW(),"" "",COLUMN())"还看是没看明白,可能是对EXCEL的功能和函数不是很了解吧
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |