讲述VB.NET调用Excel的好处

开发 后端
这里介绍VB.NET调用Excel,为什么用VB.NET而不用C#,因为Excel中有个VBA,其语法和VB.NET是近似的。而且,VB.NET和C#的区别主要是语法,而非功能。

用什么开发工具,用什么开发模式来实现所要求的功能呢?公司内暂时只有tuenhai自己运用,要实现的功能也不多,在一开始并没有必要用复杂的大型数据库系统。为方便信息共享,tuenhai决定用VB.NET调用Excel来实现功能模块。

为什么用VB.NET而不用C#,因为Excel中有个VBA,其语法和VB.NET是近似的。而且,VB.NET和C#的区别主要是语法,而非功能。tuenhai现在只要求实现用程序自动安排《自制件生产计划》,这个功能不用VB.NET,单用VBA也能轻易实现。但是,考虑到以后可能的功能扩充、升级,还是用VB.NET。VB.NET是面向一代的开发工具,功能强大,而且VB.NET调用Excel也很方便。不推荐用VB6,VB.NET的入门及初级应用并不难,为何还要去用早期版本,而不用最新版本,掌握最新技术呢!

用VB.NET调用Excel排生产计划

软件构思是这样的:

先在Excel里定制好《自制件生产计划》的样表(模板),保存为自制件生产计划.xls,其中只有一个sheet:样表。在样表中设置好各种格式,填写好固定项。再新建一空白workbook,保存为2004年自制件生产计划.xls。

新建一VB.NET应用程序,命名为生产计划报表。在窗体上放很少几个控件,如:几个文本框,用来输入产品数量;checkbox用来先选择是正式生产计划还是增补生产计划;另外用二个文本框用来输入计划时间和计划编号。

点击button,程序打开自制件生产计划.xls和2004年自制件生产计划.xls,把样表copy到2004年自制件生产计划.xls,并自动在目标sheet中填写各自制件需要生产的数量。

下面是实现代码及详细注释。注意,要先添加com引用Microsoft Excel Object Library,tuenhai的是office 2003,引用Microsoft Excel 11.0 Object Library。

  1. Private Sub producePlan()  
  2. Call killEXCEL() '调用杀死EXCEL进程过程  
  3.  
  4. '以下代码判断用户填写信息是否完整,如不完整则提示信息并退出.  
  5. If chkFormal.Checked = False And chkSubjoin.Checked = False Then  
  6. MsgBox("是正式计划还是增补计划??", MsgBoxStyle.Critical, "请先选择计划性质")  
  7. Exit Sub  
  8. End If  
  9. If txtDay.Text = "2004年月" Then  
  10. MsgBox("什么月份的生产计划???", MsgBoxStyle.Critical, "请填写计划时间")  
  11. Exit Sub  
  12. End If  
  13. If txt703.Text = Nothing Or txt909.Text = Nothing Or txt931.Text = Nothing Or txt932.Text = Nothing Then  
  14. MsgBox("请填写计划台数!", MsgBoxStyle.Critical, "计划台数填写不全")  
  15. Exit Sub  
  16. End If  
  17. If chkFormal.Checked = True And chkSubjoin.Checked = True Then  
  18. MsgBox("正式和增补两者只能选一!", MsgBoxStyle.Critical, "请重新选择计划性质")  
  19. Exit Sub  
  20. End If  
  21.  
  22. '以下代码即是计算各自制件的数量,用中文来命名是免去代码注释  
  23. Dim 涂氟龙面板703 As Integer = CType(txt703.Text, Integer)  
  24. Dim 钛金面板909 As Integer = CType(txt909.Text, Integer)  
  25. Dim 油磨不锈钢面板931 As Integer = CType(txt931.Text, Integer)  
  26. Dim 油磨不锈钢面板932 As Integer = CType(txt932.Text, Integer)  
  27. Dim 底盘24 As Integer = 涂氟龙面板703  
  28. Dim 底盘22 As Integer = 钛金面板909  
  29. Dim 底盘41A As Integer = 油磨不锈钢面板931  
  30. Dim 底盘41B As Integer = 油磨不锈钢面板931  
  31. Dim 水盘25 As Integer = 涂氟龙面板703  
  32. Dim 水盘24 As Integer = 涂氟龙面板703  
  33. Dim 水盘22 As Integer = 钛金面板909 * 2  
  34. Dim 中心支架2 As Integer = 涂氟龙面板703 + 钛金面板909  
  35. Dim 长支架931 As Integer = (油磨不锈钢面板931 + 油磨不锈钢面板932) * 2  
  36. Dim 支架931U As Integer = 油磨不锈钢面板931 * 2  
  37. Dim 支架932U As Integer = 油磨不锈钢面板932 * 2  
  38. Dim 磁头抱攀 As Integer = (钛金面板909 + 油磨不锈钢面板931 + 油磨不锈钢面板932) * 2  
  39. Dim 电池抱攀 As Integer = (涂氟龙面板703 + 钛金面板909 + 油磨不锈钢面板931 + 油磨不锈钢面板932) * 2  
  40. Dim 三通抱攀 As Integer = 电池抱攀 / 2  
  41. Dim 炉头垫片 As Integer = 电池抱攀 * 3  
  42.  
  43. '定义一个数组,方便在EXCEL中循环写入数字,也可以放在EXCEL的VBA中实现  
  44. Dim allNum() As Integer = _ 
  45. {涂氟龙面板703, 钛金面板909, 油磨不锈钢面板931, 油磨不锈钢面板932, _  
  46. 底盘24, 底盘22, 底盘41A, 底盘41B, _  
  47. 水盘25, 水盘24, 水盘22, _  
  48. 中心支架2, 长支架931, 支架931U, 支架932U, _  
  49. 磁头抱攀, 电池抱攀, 三通抱攀, 炉头垫片}  
  50.  
  51. Dim excelApp As New Excel.Application  
  52. Dim excelBook As Excel.Workbook '自制件生产计划.xls  
  53. Dim excelbook2004 As Excel.Workbook '2004自制件生产计划.xls  
  54. Dim excelWorksheet As Excel.Worksheet  
  55. Dim planProperty As String '计划性质,是正式计划还是增补计划  
  56.  
  57. Try '建议用try方式捕捉错误,处理错误  
  58.  
  59. excelBook = excelApp.Workbooks.Open(Application.StartupPath & "\自制件生产计划.xls")  
  60.  
  61. excelbook2004 = excelApp.Workbooks.Open(Application.StartupPath & "\2004年自制件生产计划.xls")  
  62. excelWorksheet = CType(excelBook.Worksheets("样表"), Excel.Worksheet)  
  63. excelWorksheet.Copy(After:=excelbook2004.Sheets("sheet1"))  
  64. '把样表copy到<2004年自制件生产计划>workbook中sheet1的后面  
  65.  
  66. excelApp.Visible = True '设置工作薄为可视  
  67.  
  68. If chkFormal.Checked = True Then  
  69. planProperty = "正式" 
  70. ElseIf chkSubjoin.Checked = True Then  
  71. planProperty = "增补" 
  72. End If  
  73.  
  74. With excelbook2004.ActiveSheet '用with 简化代码  
  75. .Range("D1").Value = txtDay.Text '计划时间  
  76. .Range("C2").Value = "laoban公司" & txtDay.Text & planProperty & "采购计划" '计划依据  
  77. .Range("C25").Value = Now.Date.Today.ToShortDateString '这就是制表日期  
  78. .Range("F2").Value = txtNO.Text '计划编号  
  79.  
  80. End With  
  81. For i As Integer = 0 To 18 '共19种自制件  
  82. excelbook2004.ActiveSheet.cells(4 + i, 4) = allNum(i) '4+i是行号,第二个4是列号  
  83. Next '循环把各自制件数填入<2004年自制件生产计划>中的活动工作表相应位置  
  84.  
  85. Catch ex As Exception '捕捉错误,并回收资源,显示错误  
  86. excelBook = Nothing 
  87. excelbook2004 = Nothing 
  88. excelWorksheet = Nothing 
  89. excelApp = Nothing 
  90. GC.Collect(0)  
  91. MsgBox(ex.ToString) '显示错误信息,以查找定位  
  92. Exit Sub '出错就退出  
  93. Finally '这里的代码一定会被执行到  
  94. excelBook = Nothing 
  95. excelbook2004 = Nothing 
  96. excelWorksheet = Nothing 
  97. excelApp = Nothing 
  98. GC.Collect(0)  
  99. End Try  
  100. MsgBox("已排好自制件生产计划,请查看")  
  101.  
  102. excelBook = Nothing 
  103. excelbook2004 = Nothing 
  104. excelWorksheet = Nothing 
  105. excelApp = Nothing 
  106. GC.Collect(0)  
  107.  
  108. End Sub 

【编辑推荐】

  1. 概括VB.NET使用OracleTransaction
  2. 五分钟了解VB.NET类构造
  3. 讨论奇妙的VB.NET属性
  4. 详谈VB.NET编码规范经验
  5. 自己动手实现VB.NET控件数组
责任编辑:佚名 来源: 51CTO.com
相关推荐

2009-10-16 13:26:53

VB.NET Exce

2009-10-14 17:08:44

VB.NET使用Fil

2009-10-21 10:45:50

VB.NET Quic

2009-10-13 17:03:55

VB.NET面向对象

2009-10-12 16:39:59

OracleTransVB.NET使用

2009-11-02 15:45:03

VB.NET IEnu

2009-10-16 09:35:24

VB.NET制作透明窗

2009-10-19 08:55:22

VB.NET多重继承

2009-10-23 13:22:25

VB.NET实现拖动图

2009-10-15 11:11:08

VB.NET Text

2009-10-14 11:15:06

VB.NET Grou

2009-10-10 16:44:52

VB.NET开发控件

2009-10-15 16:39:00

VB.NET读取INI

2009-10-27 11:39:03

VB.NET事件处理程

2009-10-29 09:57:16

VB.NET实现数据绑

2009-10-21 18:28:48

VB.NET表间拖放

2009-10-22 09:20:46

VB.NET Proc

2009-10-26 19:22:29

VB.NET使用Log

2009-11-03 17:31:01

VB.NET窗体

2010-01-15 13:30:50

VB.NET Prog
点赞
收藏

51CTO技术栈公众号