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
Avviare Microsoft Visual Studio .NET.
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.
Aggiungere un riferimento alla libreria di oggetti di Microsoft Excel. A tal fine, attenersi alla seguente procedura:
- Scegliere Aggiungi riferimento dal menu Progetto.
- 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.
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ì.
Nel menu Visualizza selezionare Casella degli strumenti per visualizzare la casella degli strumenti. Aggiungere due pulsanti e una casella di controllo a Form1.
Impostare la proprietà Name per la casella di controllo su FillWithStrings.
Fare doppio clic su Button1. Viene visualizzata la finestra del codice per Il modulo.
Aggiungere quanto segue all'inizio di Form1.vb:
Imports Microsoft.Office.Interop
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
Tornare alla visualizzazione progettazione per Form1 e quindi fare doppio clic su Button2.
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
- Premere F5 per compilare ed eseguire il programma di esempio.
- 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.
- 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.
- 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