Board logo

标题: [技术讨论] 【练习-040】根据原始数据表用VBS生成统计表 [打印本页]

作者: batman    时间: 2009-4-2 23:09     标题: 【练习-040】根据原始数据表用VBS生成统计表

&&这是本人所出的第一个vbs题,有两个目的:一是想调动大家学习vbs的积极性;二是想通过研读高手的代码学习vbs技术。
   题目如下:
   有原始数据表test..xls表中记录了刘起涯、周月、向文章、区同雨、顾思明、李东、张浩七个人共1000笔关于宽带、电话、小
灵通、手机四种产品的销售量流水帐(见附件一)。现在要求使用vbs生成统计表temp.xls对各人的各种产品的总销售量进行统
计,生成的统计表如下(字体和颜色不要求设置):



     本题满分20分,视情形加分
链接: https://pan.baidu.com/s/1TF3Y3xPDKtTQ_FkV6_UkBA?pwd=yd7e
作者: batman    时间: 2009-4-2 23:14     标题: 本人的参考答案及代码注释如下:

本人的test..xls完全路径为d:\test
  1. dim counter,counter1,counter2,countera,counterb,numbera,numberb,numberc '声明变量
  2. '生成数组
  3. numbera=array("姓名","宽带","电话","小灵通","手机")
  4. numberb=array("刘起涯","周月","向文章","区同雨","顾思明","李东","张浩","合计")
  5. numberc=array("b","c","d","e")
  6. set objexcel=nothing '置空objexcel对象
  7. '设置object对象
  8. set objexcel=createobject("excel.application")
  9. set objworks=objexcel.workbooks
  10. set wshshell=createobject("wscript.shell")
  11. set delfile=createobject("scripting.filesystemobject")
  12. objexcel.visible=true '设置工作表对象可见
  13. objworks.open("d:\test\test.xls") '打开test.xls
  14. objworks.add '新建工作表
  15. objexcel.worksheets(1).activate '将工作表的第一页设为活动页
  16. '向工作表第一行中写入项目
  17. for counter1=0 to 4
  18.     counter=counter1+1
  19.     objexcel.cells(1,counter).value=numbera(counter1)
  20. next
  21. '向工作表中第一列中写入姓名和合计字符
  22. for counter2=0 to 7
  23.     counter=counter2+2
  24.     objexcel.cells(counter,1).value=numberb(counter2)
  25. next
  26. '逐行从第二列开始向工作表中写入数组公式
  27. for counter1=0 to 6
  28.     countera=counter1+2
  29.     for counter2=0 to 3
  30.         counterb=counter2+2
  31.         objexcel.cells(countera,counterb).value="=SUM(([test.xls]Sheet1!$A$2:$A$1001=A"&countera&")*([test.xls]Sheet1!$B$2:$B$1001="&numberc(counter2)&"1)*[test.xls]Sheet1!$C$2:$C$1001)"
  32.         objexcel.cells(countera,counterb).activate
  33.         wscript.sleep 10
  34.         wshshell.sendkeys "{f2}"
  35.         wscript.sleep 10
  36.         wshshell.sendkeys "^+~" '发送组合键ctrl+shift+enter生成数组公式
  37.     next
  38. next
  39. '写入求和公式
  40. for counter1=0 to 3
  41.     countera=counter1+2
  42.     objexcel.cells(9,countera).value="=sum("&numberc(counter1)&"2:"&numberc(counter1)&"8)"
  43. next
  44. '设置工作表的字体颜色
  45. objExcel.ActiveSheet.Rows.Font.Name="楷体_GB2312"
  46. objExcel.ActiveSheet.Rows.Font.size=12
  47. objExcel.ActiveSheet.Rows.Font.Color=vbblue
  48. objExcel.ActiveSheet.Rows(1).Font.Color=vbred
  49. objExcel.ActiveSheet.Rows(1).Font.Bold=true
  50. objexcel.activeworkbook.saveas("d:\test\temp.xls") '另存工作表为d:\test\temp.xls
  51. wscript.sleep 3000
  52. objexcel.quit
  53. set objexcel=nothing
  54. 'delfile.deletefile "d:\test\temp.xls" '如要删除新建的temp.xls请将d前面的'去掉
复制代码



[ 本帖最后由 batman 于 2009-4-2 23:33 编辑 ]
作者: Batcher    时间: 2009-4-2 23:35

把图片改成PNG格式吧,BMP太浪费空间了。
作者: batman    时间: 2009-4-6 11:26

看来是没人想做vbs的题了,唉!
作者: slore    时间: 2009-4-9 12:56

。。。直接VBS套SQL。。。。

SUM下就出来了。。。
作者: anyhow    时间: 2009-4-10 11:05

访问excel不是用vba吗,vbs访问excel我得去查查




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