講述VB.NET調(diào)用Excel的好處
用什么開發(fā)工具,用什么開發(fā)模式來實現(xiàn)所要求的功能呢?公司內(nèi)暫時只有tuenhai自己運用,要實現(xiàn)的功能也不多,在一開始并沒有必要用復(fù)雜的大型數(shù)據(jù)庫系統(tǒng)。為方便信息共享,tuenhai決定用VB.NET調(diào)用Excel來實現(xiàn)功能模塊。
為什么用VB.NET而不用C#,因為Excel中有個VBA,其語法和VB.NET是近似的。而且,VB.NET和C#的區(qū)別主要是語法,而非功能。tuenhai現(xiàn)在只要求實現(xiàn)用程序自動安排《自制件生產(chǎn)計劃》,這個功能不用VB.NET,單用VBA也能輕易實現(xiàn)。但是,考慮到以后可能的功能擴(kuò)充、升級,還是用VB.NET。VB.NET是面向一代的開發(fā)工具,功能強(qiáng)大,而且VB.NET調(diào)用Excel也很方便。不推薦用VB6,VB.NET的入門及初級應(yīng)用并不難,為何還要去用早期版本,而不用最新版本,掌握最新技術(shù)呢!
用VB.NET調(diào)用Excel排生產(chǎn)計劃
軟件構(gòu)思是這樣的:
先在Excel里定制好《自制件生產(chǎn)計劃》的樣表(模板),保存為自制件生產(chǎn)計劃.xls,其中只有一個sheet:樣表。在樣表中設(shè)置好各種格式,填寫好固定項。再新建一空白workbook,保存為2004年自制件生產(chǎn)計劃.xls。
新建一VB.NET應(yīng)用程序,命名為生產(chǎn)計劃報表。在窗體上放很少幾個控件,如:幾個文本框,用來輸入產(chǎn)品數(shù)量;checkbox用來先選擇是正式生產(chǎn)計劃還是增補(bǔ)生產(chǎn)計劃;另外用二個文本框用來輸入計劃時間和計劃編號。
點擊button,程序打開自制件生產(chǎn)計劃.xls和2004年自制件生產(chǎn)計劃.xls,把樣表copy到2004年自制件生產(chǎn)計劃.xls,并自動在目標(biāo)sheet中填寫各自制件需要生產(chǎn)的數(shù)量。
下面是實現(xiàn)代碼及詳細(xì)注釋。注意,要先添加com引用Microsoft Excel Object Library,tuenhai的是office 2003,引用Microsoft Excel 11.0 Object Library。
- Private Sub producePlan()
 - Call killEXCEL() '調(diào)用殺死EXCEL進(jìn)程過程
 - '以下代碼判斷用戶填寫信息是否完整,如不完整則提示信息并退出.
 - If chkFormal.Checked = False And chkSubjoin.Checked = False Then
 - MsgBox("是正式計劃還是增補(bǔ)計劃??", MsgBoxStyle.Critical, "請先選擇計劃性質(zhì)")
 - Exit Sub
 - End If
 - If txtDay.Text = "2004年月" Then
 - MsgBox("什么月份的生產(chǎn)計劃???", MsgBoxStyle.Critical, "請?zhí)顚懹媱潟r間")
 - Exit Sub
 - End If
 - If txt703.Text = Nothing Or txt909.Text = Nothing Or txt931.Text = Nothing Or txt932.Text = Nothing Then
 - MsgBox("請?zhí)顚懹媱澟_數(shù)!", MsgBoxStyle.Critical, "計劃臺數(shù)填寫不全")
 - Exit Sub
 - End If
 - If chkFormal.Checked = True And chkSubjoin.Checked = True Then
 - MsgBox("正式和增補(bǔ)兩者只能選一!", MsgBoxStyle.Critical, "請重新選擇計劃性質(zhì)")
 - Exit Sub
 - End If
 - '以下代碼即是計算各自制件的數(shù)量,用中文來命名是免去代碼注釋
 - 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
 - '定義一個數(shù)組,方便在EXCEL中循環(huán)寫入數(shù)字,也可以放在EXCEL的VBA中實現(xiàn)
 - 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 '自制件生產(chǎn)計劃.xls
 - Dim excelbook2004 As Excel.Workbook '2004自制件生產(chǎn)計劃.xls
 - Dim excelWorksheet As Excel.Worksheet
 - Dim planProperty As String '計劃性質(zhì),是正式計劃還是增補(bǔ)計劃
 - Try '建議用try方式捕捉錯誤,處理錯誤
 - excelBook = excelApp.Workbooks.Open(Application.StartupPath & "\自制件生產(chǎn)計劃.xls")
 - excelbook2004 = excelApp.Workbooks.Open(Application.StartupPath & "\2004年自制件生產(chǎn)計劃.xls")
 - excelWorksheet = CType(excelBook.Worksheets("樣表"), Excel.Worksheet)
 - excelWorksheet.Copy(After:=excelbook2004.Sheets("sheet1"))
 - '把樣表copy到<2004年自制件生產(chǎn)計劃>workbook中sheet1的后面
 - excelApp.Visible = True '設(shè)置工作薄為可視
 - If chkFormal.Checked = True Then
 - planProperty = "正式"
 - ElseIf chkSubjoin.Checked = True Then
 - planProperty = "增補(bǔ)"
 - End If
 - With excelbook2004.ActiveSheet '用with 簡化代碼
 - .Range("D1").Value = txtDay.Text '計劃時間
 - .Range("C2").Value = "laoban公司" & txtDay.Text & planProperty & "采購計劃" '計劃依據(jù)
 - .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 '循環(huán)把各自制件數(shù)填入<2004年自制件生產(chǎn)計劃>中的活動工作表相應(yīng)位置
 - Catch ex As Exception '捕捉錯誤,并回收資源,顯示錯誤
 - excelBook = Nothing
 - excelbook2004 = Nothing
 - excelWorksheet = Nothing
 - excelApp = Nothing
 - GC.Collect(0)
 - MsgBox(ex.ToString) '顯示錯誤信息,以查找定位
 - Exit Sub '出錯就退出
 - Finally '這里的代碼一定會被執(zhí)行到
 - excelBook = Nothing
 - excelbook2004 = Nothing
 - excelWorksheet = Nothing
 - excelApp = Nothing
 - GC.Collect(0)
 - End Try
 - MsgBox("已排好自制件生產(chǎn)計劃,請查看")
 - excelBook = Nothing
 - excelbook2004 = Nothing
 - excelWorksheet = Nothing
 - excelApp = Nothing
 - GC.Collect(0)
 - End Sub
 
【編輯推薦】















 
 
 
 
 
 
 