讲述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。

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

【编辑推荐】

  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-10-19 08:55:22

VB.NET多重继承

2009-11-02 15:45:03

VB.NET IEnu

2009-10-16 09:35:24

VB.NET制作透明窗

2009-10-15 16:39:00

VB.NET读取INI

2009-10-10 16:44:52

VB.NET开发控件

2009-10-15 11:11:08

VB.NET Text

2009-10-23 13:22:25

VB.NET实现拖动图

2009-10-14 11:15:06

VB.NET Grou

2009-10-27 11:39:03

VB.NET事件处理程

2009-10-22 09:20:46

VB.NET Proc

2009-10-21 18:28:48

VB.NET表间拖放

2009-10-29 09:57:16

VB.NET实现数据绑

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技术栈公众号