Help and Support

文章編號: 301982 - 上次校閱: 2007年3月29日 - 版次: 8.3

如何從 Visual Basic.NET 的 Microsoft Excel 自動化

全部展開 | 全部摺疊

結論

這篇文章會示範如何建立的自動化 Microsoft Excel 使用 Microsoft Visual Basic.NET 用戶端。

其他相關資訊

自動化將是可以讓例如,以程式設計方式控制其他應用程式的 Visual Basic 語言所撰寫的應用程式的程序。 至 Excel 的自動化可讓您執行動作,例如建立新的活頁簿,新增的活頁簿,或建立圖表。 與 Excel 及其他的 Microsoft Office 應用程式中,幾乎所有的您可以透過使用者介面手動執行的動作也可以執行以程式設計方式使用 「 自動化。

Excel 會公開這個程式設計的功能,透過物件模型。 物件模型會是類別和方法,以做為對應至 Excel 的邏輯元件的集合。 例如,有是 應用程式 物件]、 [T: 活頁簿 物件和 [ 工作表 物件,各自其中會包含 Excel 的這些元件的功能。 若要存取物件模型,從 Visual Basic.NET 中,,您可以設定專案參考至型別程式庫。

本文示範如何設定 Excel 型別程式庫在適當的專案參考,Visual Basic.NET,並提供自動化 Excel 的範例程式碼。

建立 Microsoft Excel 的 Automation 用戶端

  1. 啟動 Microsoft Visual Studio.NET。
  2. 檔案 ] 功能表上按一下 [ 新增 ,] 然後按一下 [ 專案 ]。 選取的 Windows 應用程式 從 Visual Basic 專案類型。 根據預設會建立 Form1。
  3. 將參考加入至 Microsoft Excel 物件程式庫 。 如果要執行這項操作,請執行這些步驟:
    1. 按一下 [ 專案 ] 功能表中的 [ 新增參考
    2. 在 [ COM ] 索引標籤中,請找出 Microsoft Excel Object Library ,並按一下 [選取 ]。

      請注意 Microsoft Office 2003 包含了主要 Interop 組件 (PIA)。 Microsoft Office XP 不包含 PIA,但是可以被下載。 如需 Office XP primary interop assemblies (PIAs,請按一下下面的文件編號,,檢視 「 Microsoft 知識庫 」 中的文件]:
      328912? (http://support.microsoft.com/kb/328912/ ) Microsoft Office XP Primary Interop Assemblies (PIA) (英文) 可供下載
    3. 按一下 [確定] ,在 新增參考 接受您的選取項目] 對話方塊。
  4. 在 [ 檢視 ] 功能表上, 選取 [ 工具箱 ],以顯示的工具箱,然後再到 Form1 中新增 [按鈕]。
  5. 按兩下 [ Button1] 。 [程式碼] 視窗,表單隨即出現。
  6. 在 [程式碼] 視窗中,找出下列程式碼:
        Private Sub Button1_Click(ByVal sender As System.Object, _
          ByVal e As System.EventArgs) Handles Button1.Click
    
        End Sub
    					
    會將先前的程式碼取代下列程式碼:
        Private Sub Button1_Click(ByVal sender As System.Object, _
          ByVal e As System.EventArgs) Handles Button1.Click
            Dim oXL As Excel.Application
            Dim oWB As Excel.Workbook
            Dim oSheet As Excel.Worksheet
            Dim oRng As Excel.Range
    
            ' Start Excel and get Application object.
            oXL = CreateObject("Excel.Application")
            oXL.Visible = True
    
            ' Get a new workbook.
            oWB = oXL.Workbooks.Add
            oSheet = oWB.ActiveSheet
    
            ' Add table headers going cell by cell.
            oSheet.Cells(1, 1).Value = "First Name"
            oSheet.Cells(1, 2).Value = "Last Name"
            oSheet.Cells(1, 3).Value = "Full Name"
            oSheet.Cells(1, 4).Value = "Salary"
    
            ' Format A1:D1 as bold, vertical alignment = center.
            With oSheet.Range("A1", "D1")
                .Font.Bold = True
                .VerticalAlignment = Excel.XlVAlign.xlVAlignCenter
            End With
    
            ' Create an array to set multiple values at once.
            Dim saNames(5, 2) As String
            saNames(0, 0) = "John"
            saNames(0, 1) = "Smith"
            saNames(1, 0) = "Tom"
            saNames(1, 1) = "Brown"
            saNames(2, 0) = "Sue"
            saNames(2, 1) = "Thomas"
            saNames(3, 0) = "Jane"
    
            saNames(3, 1) = "Jones"
            saNames(4, 0) = "Adam"
            saNames(4, 1) = "Johnson"
    
            ' Fill A2:B6 with an array of values (First and Last Names).
            oSheet.Range("A2", "B6").Value = saNames
    
            ' Fill C2:C6 with a relative formula (=A2 & " " & B2).
            oRng = oSheet.Range("C2", "C6")
            oRng.Formula = "=A2 & "" "" & B2"
    
            ' Fill D2:D6 with a formula(=RAND()*100000) and apply format.
            oRng = oSheet.Range("D2", "D6")
            oRng.Formula = "=RAND()*100000"
            oRng.NumberFormat = "$0.00"
    
            ' AutoFit columns A:D.
            oRng = oSheet.Range("A1", "D1")
            oRng.EntireColumn.AutoFit()
    
            ' Manipulate a variable number of columns for Quarterly Sales Data.
            Call DisplayQuarterlySales(oSheet)
    
            ' Make sure Excel is visible and give the user control
            ' of Excel's lifetime.
            oXL.Visible = True
            oXL.UserControl = True
    
            ' Make sure that you release object references.
            oRng = Nothing
            oSheet = Nothing
            oWB = Nothing
            oXL.Quit()
            oXL = Nothing
    
            Exit Sub
    Err_Handler:
            MsgBox(Err.Description, vbCritical, "Error: " & Err.Number)
        End Sub
    
        Private Sub DisplayQuarterlySales(ByVal oWS As Excel.Worksheet)
            Dim oResizeRange As Excel.Range
            Dim oChart As Excel.Chart
            Dim oSeries As Excel.Series
            Dim iNumQtrs As Integer
            Dim sMsg As String
            Dim iRet As Integer
    
    
            ' Determine how many quarters to display data for.
            For iNumQtrs = 4 To 2 Step -1
                sMsg = "Enter sales data for" & Str(iNumQtrs) & " quarter(s)?"
                iRet = MsgBox(sMsg, vbYesNo Or vbQuestion _
                   Or vbMsgBoxSetForeground, "Quarterly Sales")
                If iRet = vbYes Then Exit For
            Next iNumQtrs
    
            ' Starting at E1, fill headers for the number of columns selected.
            oResizeRange = oWS.Range("E1", "E1").Resize(ColumnSize:=iNumQtrs)
            oResizeRange.Formula = "=""Q"" & COLUMN()-4 & CHAR(10) & ""Sales"""
    
            ' Change the Orientation and WrapText properties for the headers.
            oResizeRange.Orientation = 38
            oResizeRange.WrapText = True
    
            ' Fill the interior color of the headers.
            oResizeRange.Interior.ColorIndex = 36
    
            ' Fill the columns with a formula and apply a number format.
            oResizeRange = oWS.Range("E2", "E6").Resize(ColumnSize:=iNumQtrs)
            oResizeRange.Formula = "=RAND()*100"
            oResizeRange.NumberFormat = "$0.00"
    
            ' Apply borders to the Sales data and headers.
            oResizeRange = oWS.Range("E1", "E6").Resize(ColumnSize:=iNumQtrs)
            oResizeRange.Borders.Weight = Excel.XlBorderWeight.xlThin
    
            ' Add a Totals formula for the sales data and apply a border.
            oResizeRange = oWS.Range("E8", "E8").Resize(ColumnSize:=iNumQtrs)
            oResizeRange.Formula = "=SUM(E2:E6)"
            With oResizeRange.Borders(Excel.XlBordersIndex.xlEdgeBottom)
                .LineStyle = Excel.XlLineStyle.xlDouble
                .Weight = Excel.XlBorderWeight.xlThick
            End With
    
            ' Add a Chart for the selected data.
            oResizeRange = oWS.Range("E2:E6").Resize(ColumnSize:=iNumQtrs)
            oChart = oWS.Parent.Charts.Add
            With oChart
                .ChartWizard(oResizeRange, Excel.XlChartType.xl3DColumn, , Excel.XlRowCol.xlColumns)
                oSeries = .SeriesCollection(1)
                oSeries.XValues = oWS.Range("A2", "A6")
                For iRet = 1 To iNumQtrs
                    .SeriesCollection(iRet).Name = "=""Q" & Str(iRet) & """"
                Next iRet
                .Location(Excel.XlChartLocation.xlLocationAsObject, oWS.Name)
            End With
    
            ' Move the chart so as not to cover your data.
            With oWS.Shapes.Item("Chart 1")
                .Top = oWS.Rows(10).Top
                .Left = oWS.Columns(2).Left
            End With
    
            ' Free any references.
            oChart = Nothing
            oResizeRange = Nothing
        End Sub
    					
  7. 將下列程式碼加入至 Form1.vb 頂端:
    Imports Microsoft.Office.Core
    					

測試自動化用戶端

  1. 按 F5 以建置並執行程式。
  2. 如果要在的表單上按一下 [ Button1 ]。 程式啟動 Excel,並填入新的工作表上的資料。
  3. 出現提示輸入每季的銷售資料時時, 按一下 [是] 。 圖表連結至每季的資料會加入至工作表中。

?考

如需詳細資訊,請造訪下列 Microsoft Developer Network (MSDN) 網站:
Microsoft Office Development with Visual Studio
http://msdn2.microsoft.com/en-us/library/aa188489(office.10).aspx (http://msdn2.microsoft.com/en-us/library/aa188489(office.10).aspx)
如需 Excel 和 Visual Basic,請按一下下面的文件編號,,檢視 「 Microsoft 知識庫 」 中的文件]:
219151? (http://support.microsoft.com/kb/219151/ ) 如何從 Visual Basic 的 Microsoft Excel 自動化

這篇文章中的資訊適用於:
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • Microsoft Office Excel 2003
  • Microsoft Excel 2002 Standard Edition
關鍵字:?
kbmt kbpia kbautomation kbhowto KB301982 KbMtzh
機器翻譯機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。如果您發現錯誤,並想要協助我們進行改善,請填寫本篇文章下方的問卷。
按一下這裡查看此文章的英文版本:301982? (http://support.microsoft.com/kb/301982/en-us/ )
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

文章翻譯