Automazione di Microsoft Excel da Visual Basic .NET

Il supporto per Office 2003 è terminato

Il supporto Microsoft per Office 2003 è terminato l'8 aprile 2014. Questa modifica ha interessato gli aggiornamenti software e le opzioni di sicurezza. Ulteriori informazioni su come continuare a essere protetti.

Questo articolo è stato precedentemente pubblicato con il codice di riferimento I301982
Questo articolo è stato archiviato. L’articolo, quindi, viene offerto “così come è” e non verrà più aggiornato.
Sommario
In questo articolo viene spiegato come creare un client di automazione per Microsoft Excel mediante Microsoft Visual Basic .NET.
Informazioni
L'automazione è un processo che consente alle applicazioni scritte in linguaggi quali Visual Basic di controllare altre applicazioni a livello di programmazione. L'automazione di Excel consente di eseguire operazioni quali la creazione di una nuova cartella di lavoro, l'aggiunta di dati alla cartella di lavoro e la creazione di grafici. In Excel e in altre applicazioni di Microsoft Office, l'automazione consente di eseguire a livello di programmazione teoricamente tutte le azioni che vengono eseguite manualmente tramite l'interfaccia grafica.

Excel espone questa funzionalità a livello di programmazione tramite un modello di oggetti. Il modello di oggetti è un insieme di classi e metodi che corrispondono ai rispettivi componenti logici di Excel. Esistono, ad esempio, oggetti Application, Workbook e Worksheet, contenenti le funzionalità degli oggetti corrispondenti in Word. Per accedere al modello di oggetti da Visual Basic .NET, è possibile impostare un riferimento del progetto alla libreria dei tipi.

In questo articolo viene spiegato come impostare correttamente il riferimento del progetto alla libreria dei tipi di Excel per Visual Basic .NET e vengono forniti esempi di codice per l'automazione di Excel.

Creazione di un client di automazione per Microsoft Excel

  1. Avviare Microsoft Visual Studio .NET.
  2. Scegliere Nuovo dal menu File, quindi Progetto. Selezionare Applicazione per Windows dai tipi di progetto di Visual Basic. Per impostazione predefinita, viene creato il progetto Form1.
  3. Aggiungere un riferimento alla libreria di oggetti di Microsoft Excel. Per effettuare questa operazione, attenersi alla seguente procedura:
    1. Scegliere Aggiungi riferimento dal menu Progetto.
    2. Nella scheda COM individuare la libreria di oggetti di Microsoft Excel, quindi scegliere Seleziona.

      Nota Microsoft Office 2003 include gli assembly di interoperabilità primari (PIA, Primary Interop Assembly). Non sono invece inclusi in Microsoft Office XP, ma possono essere scaricati. Per ulteriori informazioni sugli assembly di interoperabilità primari di Office XP, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito:
      328912 Assembly di interoperabilità primari (PIA) di Microsoft Office XP disponibili per il download
    3. Scegliere OK nella finestra di dialogo Aggiungi riferimento per accettare le selezioni.
  4. Scegliere Casella degli strumenti dal menu Visualizza per visualizzare la Casella degli strumenti, quindi aggiungere un pulsante a Form1.
  5. Fare doppio clic su Button1. Viene visualizzata la finestra del codice per il form.
  6. Nella finestra del codice individuare il codice seguente:
        Private Sub Button1_Click(ByVal sender As System.Object, _      ByVal e As System.EventArgs) Handles Button1.Click    End Sub					
    Sostituire il codice precedente con il seguente:
        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 SubErr_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. Aggiungere il codice riportato di seguito nella parte superiore di Form1.vb:
    Imports Microsoft.Office.Core					

Verifica del client di automazione

  1. Premere F5 per compilare ed eseguire il programma.
  2. Nel form fare clic su Button1. Verrà avviato Excel e verranno inseriti dati in un nuovo foglio di lavoro.
  3. Quando viene richiesto di immettere dati di vendita trimestrali, scegliere Yes. Al foglio di lavoro verrà aggiunto un grafico collegato ai dati di vendita trimestrali.
Riferimenti
Per ulteriori informazioni, visitare il seguente sito Web di Microsoft Developer Network (MSDN) (informazioni in lingua inglese):
Microsoft Office Development with Visual Studio
http://msdn2.microsoft.com/en-us/library/aa188489(office.10).aspx
Per ulteriori informazioni su Excel e Visual Basic, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito:
219151 Automazione di Microsoft Excel da Visual Basic
xl2003 automating automation automate createobject
Proprietà

ID articolo: 301982 - Ultima revisione: 12/06/2015 03:28:00 - Revisione: 8.2

Microsoft Visual Basic .NET 2003 Standard Edition, Microsoft Visual Basic .NET 2002 Standard Edition, Microsoft Office Excel 2003, Microsoft Excel 2002 Standard Edition

  • kbnosurvey kbarchive kbhowto kbautomation kbpia KB301982
Feedback