Come automatizzare Excel da Visual Basic .NET per compilare o ottenere dati in un intervallo usando matrici

Riepilogo

Questo articolo illustra come automatizzare Microsoft Excel e come riempire un intervallo a più celle con una matrice di valori. Questo articolo illustra anche come recuperare un intervallo di più celle come matrice tramite Automazione.

Ulteriori informazioni

Per riempire un intervallo di più celle senza popolamento di celle una alla volta, è possibile impostare la proprietà Value di un oggetto Range su una matrice bidimensionale. Analogamente, una matrice bidimensionale di valori può essere recuperata per più celle contemporaneamente usando la proprietà Value. I passaggi seguenti illustrano questo processo sia per l'impostazione che per il recupero dei dati usando matrici bidimensionali.

Compilare il client di automazione per Microsoft Excel

  1. Avviare Microsoft Visual Studio .NET.

  2. Scegliere Nuovo dal menu File e quindi fare clic su Progetto. Selezionare Applicazione Windows dai tipi di progetto di Visual Basic. Per impostazione predefinita, viene creato Form1.

  3. Aggiungere un riferimento alla libreria di oggetti di Microsoft Excel. A tal fine, attenersi alla seguente procedura:

    1. Scegliere Aggiungi riferimento dal menu Progetto.
    2. Nella scheda COM individuare Libreria oggetti di Microsoft Excel e quindi fare clic su Seleziona.

    Nota Microsoft Office 2007 e Microsoft Office 2003 includono assembly di interoperabilità primari (PIA). Microsoft Office XP non include FUNZIONALITÀ personali, ma può essere scaricato.

  4. Fare clic su OK nella finestra di dialogo Aggiungi riferimenti per accettare le selezioni. Se viene richiesto di generare wrapper per le librerie selezionate, fare clic su Sì.

  5. Nel menu Visualizza selezionare Casella degli strumenti per visualizzare la casella degli strumenti. Aggiungere due pulsanti e una casella di controllo a Form1.

  6. Impostare la proprietà Name per la casella di controllo su FillWithStrings.

  7. Fare doppio clic su Button1. Viene visualizzata la finestra del codice per Il modulo.

  8. Aggiungere quanto segue all'inizio di Form1.vb:

    Imports Microsoft.Office.Interop
    
    
  9. Nella finestra del codice sostituire il codice seguente

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

    Con:

     '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. Tornare alla visualizzazione progettazione per Form1 e quindi fare doppio clic su Button2.

  11. Nella finestra del codice sostituire il codice seguente

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

    Con:

    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
    
    

Testare il client di automazione

  1. Premere F5 per compilare ed eseguire il programma di esempio.
  2. Fare clic su Button1. Microsoft Excel viene avviato con una nuova cartella di lavoro e le celle A1:E5 del primo foglio di lavoro vengono popolate con dati numerici da una matrice.
  3. Fare clic su Button2. Il programma recupera i dati nelle celle A1:E5 in una nuova matrice e visualizza i risultati in una finestra di messaggio.
  4. Selezionare FillWithStrings e quindi fare clic su Button1 per riempire le celle A1:E5 con i dati stringa.

Riferimenti

Per altre informazioni sull'uso di matrici per impostare e recuperare i dati di Excel con le versioni precedenti di Visual Studio, fare clic sui numeri degli articoli seguenti per visualizzare l'articolo della Microsoft Knowledge Base:

247412 INFO: Metodi per il trasferimento di dati in Excel da Visual Basic