Jak zautomatyzować program Excel z programu Visual Basic .NET w celu wypełnienia lub uzyskania danych w zakresie przy użyciu tablic

Podsumowanie

W tym artykule pokazano, jak zautomatyzować program Microsoft Excel i jak wypełnić zakres wielu komórek tablicą wartości. W tym artykule przedstawiono również sposób pobierania zakresu wielu komórek jako tablicy przy użyciu usługi Automation.

Więcej informacji

Aby wypełnić zakres wielu komórek bez wypełniania komórek pojedynczo, można ustawić właściwość Value obiektu Range na tablicę dwuwymiarową. Podobnie dwuwymiarową tablicę wartości można pobrać dla wielu komórek jednocześnie przy użyciu właściwości Value. W poniższych krokach przedstawiono ten proces ustawiania i pobierania danych przy użyciu tablic dwuwymiarowych.

Tworzenie klienta usługi Automation dla programu Microsoft Excel

  1. Uruchom program Microsoft Visual Studio .NET.

  2. W menu Plik kliknij pozycję Nowy, a następnie kliknij pozycję Projekt. Wybierz pozycję Aplikacja systemu Windows z typów projektów Visual Basic. Domyślnie tworzony jest formularz Form1.

  3. Dodaj odwołanie do biblioteki obiektów programu Microsoft Excel. Aby to zrobić, wykonaj następujące kroki.

    1. W menu Projekt kliknij pozycję Dodaj odwołanie.
    2. Na karcie COM znajdź bibliotekę obiektów programu Microsoft Excel, a następnie kliknij pozycję Wybierz.

    Uwaga Pakiety Microsoft Office 2007 i Microsoft Office 2003 obejmują podstawowe zestawy międzyoperacyjności (PIA). Pakiet Microsoft Office XP nie zawiera identyfikatorów PIA, ale można je pobrać.

  4. Kliknij przycisk OK w oknie dialogowym Dodawanie odwołań, aby zaakceptować wybrane opcje. Jeśli zostanie wyświetlony monit o wygenerowanie otok dla wybranych bibliotek, kliknij przycisk Tak.

  5. W menu Widok wybierz pozycję Przybornik, aby wyświetlić przybornik. Dodaj dwa przyciski i pole wyboru do formularza Form1.

  6. Ustaw właściwość Name dla pola wyboru FillWithStrings.

  7. Kliknij dwukrotnie przycisk Button1. Zostanie wyświetlone okno kodu formularza.

  8. Dodaj następujące elementy na początku pliku Form1.vb:

    Imports Microsoft.Office.Interop
    
    
  9. W oknie kodu zastąp następujący kod

     Private Sub Button1_Click(ByVal sender As System.Object, _
       ByVal e As System.EventArgs) Handles Button1.Click
    End Sub
    

    Z:

     'Keep the application object and the workbook object global, so you can  
     'retrieve the data in Button2_Click that was set in Button1_Click.
     Dim objApp As Excel.Application
     Dim objBook As Excel._Workbook
    
    Private Sub Button1_Click(ByVal sender As System.Object, _
       ByVal e As System.EventArgs) Handles Button1.Click
         Dim objBooks As Excel.Workbooks
         Dim objSheets As Excel.Sheets
         Dim objSheet As Excel._Worksheet
         Dim range As Excel.Range
    
    ' Create a new instance of Excel and start a new workbook.
         objApp = New Excel.Application()
         objBooks = objApp.Workbooks
         objBook = objBooks.Add
         objSheets = objBook.Worksheets
         objSheet = objSheets(1)
    
    'Get the range where the starting cell has the address
         'm_sStartingCell and its dimensions are m_iNumRows x m_iNumCols.
         range = objSheet.Range("A1", Reflection.Missing.Value)
         range = range.Resize(5, 5)
    
    If (Me.FillWithStrings.Checked = False) Then
             'Create an array.
             Dim saRet(5, 5) As Double
    
    'Fill the array.
             Dim iRow As Long
             Dim iCol As Long
             For iRow = 0 To 5
                 For iCol = 0 To 5
    
    'Put a counter in the cell.
                     saRet(iRow, iCol) = iRow * iCol
                 Next iCol
             Next iRow
    
    'Set the range value to the array.
             range.Value = saRet
    
    Else
             'Create an array.
             Dim saRet(5, 5) As String
    
    'Fill the array.
             Dim iRow As Long
             Dim iCol As Long
             For iRow = 0 To 5
                 For iCol = 0 To 5
    
    'Put the row and column address in the cell.
                     saRet(iRow, iCol) = iRow.ToString() + "|" + iCol.ToString()
                 Next iCol
             Next iRow
    
    'Set the range value to the array.
             range.Value = saRet
         End If
    
    'Return control of Excel to the user.
         objApp.Visible = True
         objApp.UserControl = True
    
    'Clean up a little.
         range = Nothing
         objSheet = Nothing
         objSheets = Nothing
         objBooks = Nothing
     End Sub
    
    
  10. Wróć do widoku projektu formularza Form1, a następnie kliknij dwukrotnie przycisk Button2.

  11. W oknie kodu zastąp następujący kod

    Private Sub Button2_Click(ByVal sender As System.Object, _
      ByVal e As System.EventArgs) Handles Button2.Click
    
    End Sub
    

    Z:

    Private Sub Button2_Click(ByVal sender As System.Object, _
      ByVal e As System.EventArgs) Handles Button2.Click
        Dim objSheets As Excel.Sheets
        Dim objSheet As Excel._Worksheet
        Dim range As Excel.Range
    
    'Get a reference to the first sheet of the workbook.
        On Error Goto ExcelNotRunning
        objSheets = objBook.Worksheets
        objSheet = objSheets(1)
    
    ExcelNotRunning:
        If (Not (Err.Number = 0)) Then
            MessageBox.Show("Cannot find the Excel workbook.  Try clicking Button1 to " + _
            "create an Excel workbook with data before running Button2.", _
            "Missing Workbook?")
    
    'We cannot automate Excel if we cannot find the data we created, 
            'so leave the subroutine.
            Exit Sub
        End If
    
    'Get a range of data.
        range = objSheet.Range("A1", "E5")
    
    'Retrieve the data from the range.
        Dim saRet(,) As Object
        saRet = range.Value
    
    'Determine the dimensions of the array.
        Dim iRows As Long
        Dim iCols As Long
        iRows = saRet.GetUpperBound(0)
        iCols = saRet.GetUpperBound(1)
    
    'Build a string that contains the data of the array.
        Dim valueString As String
        valueString = "Array Data" + vbCrLf
    
    Dim rowCounter As Long
        Dim colCounter As Long
        For rowCounter = 1 To iRows
            For colCounter = 1 To iCols
    
    'Write the next value into the string.
                valueString = String.Concat(valueString, _
                    saRet(rowCounter, colCounter).ToString() + ", ")
    
    Next colCounter
    
    'Write in a new line.
            valueString = String.Concat(valueString, vbCrLf)
        Next rowCounter
    
    'Report the value of the array.
        MessageBox.Show(valueString, "Array Values")
    
    'Clean up a little.
        range = Nothing
        objSheet = Nothing
        objSheets = Nothing
    End Sub
    
    

Testowanie klienta usługi Automation

  1. Naciśnij klawisz F5, aby skompilować i uruchomić przykładowy program.
  2. Kliknij przycisk 1. Program Microsoft Excel rozpoczyna pracę z nowym skoroszytem, a komórki A1:E5 pierwszego arkusza są wypełniane danymi liczbowymi z tablicy.
  3. Kliknij przycisk Button2. Program pobiera dane w komórkach A1:E5 do nowej tablicy i wyświetla wyniki w polu komunikatu.
  4. Wybierz pozycję FillWithStrings, a następnie kliknij przycisk Button1, aby wypełnić komórki A1:E5 danymi ciągu.

Informacje

Aby uzyskać dodatkowe informacje na temat używania tablic do ustawiania i pobierania danych programu Excel z wcześniejszymi wersjami programu Visual Studio, kliknij poniższe numery artykułów, aby wyświetlić artykuł w bazie wiedzy Microsoft Knowledge Base:

247412 INFO: Metody przesyłania danych do programu Excel z programu Visual Basic