講述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)。但是,考慮到以后可能的功能擴充、升級,還是用VB.NET。VB.NET是面向一代的開發(fā)工具,功能強大,而且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)計劃還是增補生產(chǎn)計劃;另外用二個文本框用來輸入計劃時間和計劃編號。
點擊button,程序打開自制件生產(chǎn)計劃.xls和2004年自制件生產(chǎn)計劃.xls,把樣表copy到2004年自制件生產(chǎn)計劃.xls,并自動在目標(biāo)sheet中填寫各自制件需要生產(chǎn)的數(shù)量。
下面是實現(xiàn)代碼及詳細注釋。注意,要先添加com引用Microsoft Excel Object Library,tuenhai的是office 2003,引用Microsoft Excel 11.0 Object Library。
- Private Sub producePlan()
- Call killEXCEL() '調(diào)用殺死EXCEL進程過程
- '以下代碼判斷用戶填寫信息是否完整,如不完整則提示信息并退出.
- If chkFormal.Checked = False And chkSubjoin.Checked = False Then
- MsgBox("是正式計劃還是增補計劃??", 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("正式和增補兩者只能選一!", 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ì),是正式計劃還是增補計劃
- 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 = "增補"
- 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
【編輯推薦】