Trasferimento di dati in una cartella di lavoro di Excel utilizzando Visual Basic .NET

Traduzione articoli Traduzione articoli
Identificativo articolo: 306022 - Visualizza i prodotti a cui si riferisce l?articolo.
Per la una versione di Microsoft Visual C# .NET di questo articolo, vedere 306023.
Espandi tutto | Chiudi tutto

In questa pagina

Sommario

In questo articolo vengono descritti diversi metodi per il trasferimento dei dati a Excel 2002 da un programma Visual Basic .NET. Vengono inoltre illustrati i vantaggi e gli svantaggi di ciascun metodo in modo che Ŕ possibile selezionare la soluzione pi¨ adatta alla situazione.

Cenni preliminari

La tecnica utilizzata pi¨ di frequente per trasferire dati in una cartella di lavoro di Excel Ŕ l'automazione . Con l'automazione, Ŕ possibile chiamare metodi e proprietÓ che sono specifiche di attivitÓ di Excel. Automazione offre la maggiore flessibilitÓ per specificare la posizione dei dati nella cartella di lavoro e di formattare la cartella di lavoro e apportare varie impostazioni in fase di esecuzione.

Con l'automazione, Ŕ possibile utilizzare diverse tecniche per trasferire i dati:
  • Trasferire dati cella per cella.
  • Trasferire i dati in una matrice in un intervallo di celle.
  • Trasferire i dati di un recordset ADO a un intervallo di celle utilizzando il metodo CopyFromRecordset .
  • Creare un oggetto di QueryTable in un foglio di lavoro di Excel che contiene il risultato di una query su un'origine dati ODBC o OLEDB.
  • Trasferire dati negli Appunti e quindi incollare il contenuto degli Appunti in un foglio di lavoro di Excel.
╚ inoltre possibile utilizzare diversi metodi che non richiedono necessariamente l'automazione trasferire dati in Excel. Se si esegue un programma lato server, questo pu˛ essere un buon approccio per eseguire la maggior parte dell'elaborazione di dati dal client.

I seguenti metodi possono essere utilizzati per trasferire i dati senza automazione:
  • Trasferire i dati di un file di testo delimitato da tabulazioni o da virgole che Excel possa essere analizzato nelle celle in un foglio di lavoro.
  • Trasferimento dei dati in un foglio di lavoro mediante ADO.NET.
  • Trasferimento di dati XML in Excel (solo versione 2002) per fornire dati formattati e disposti in righe e colonne.

Tecniche

Utilizzare l'automazione per trasferire dati cella per cella

Con l'automazione, Ŕ possibile trasferire dati in un foglio di lavoro di una cella alla volta, come illustrato di seguito.
        Dim oExcel As Object
        Dim oBook As Object
        Dim oSheet As Object

        'Start a new workbook in Excel.
        oExcel = CreateObject("Excel.Application")
        oBook = oExcel.Workbooks.Add

        'Add data to cells of the first worksheet in the new workbook.
        oSheet = oBook.Worksheets(1)
        oSheet.Range("A1").Value = "Last Name"
        oSheet.Range("B1").Value = "First Name"
        oSheet.Range("A1:B1").Font.Bold = True
        oSheet.Range("A2").Value = "Doe"
        oSheet.Range("B2").Value = "John"

        'Save the Workbook and quit Excel.
        oBook.SaveAs(sSampleFolder & "Book1.xls")
        oSheet = Nothing
        oBook = Nothing
        oExcel.Quit()
        oExcel = Nothing
        GC.Collect()
				
trasferimento dei dati cella per cella pu˛ essere un approccio accettabile se non Ŕ quantitÓ di dati per il trasferimento. Avere la flessibilitÓ necessaria per inserire dati in un punto qualsiasi della cartella di lavoro e formattare le celle in modo condizionale in fase di esecuzione. Tuttavia, questo approccio non Ŕ consigliato in presenza di numerosi dati da trasferire in Excel un cartella di lavoro. Ogni oggetto Range che vengano acquisiti in fase di esecuzione genera una richiesta di interfaccia. Trasferimento dei dati in questo modo pu˛ pertanto essere lento.
Inoltre, Microsoft Windows 95, Microsoft Windows 98 e Windows Millennium Edition (Me) essere un limite di 64 KB nelle richieste di interfaccia. Se si dispone di 64 KB o pi¨ delle richieste di interfaccia, il server di automazione (Excel) potrebbe smettere di rispondere oppure Ŕ possibile messaggio di errore indicante memoria insufficiente. Per ulteriori informazioni, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito riportato:
216400Automazione COM tra processi blocco applicazione client in Windows 95/98
Anche in questo caso, il trasferimento dei dati cella per cella Ŕ accettabile solo per piccole quantitÓ di dati. Se Ŕ necessario trasferire grandi insiemi di dati in Excel, Ŕ consigliabile utilizzare uno degli altri approcci descritti in questo articolo per trasferire i dati in massa.

Per ulteriori informazioni e per un esempio di come automatizzare Excel con Visual Basic. NET, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito riportato:
301982Come automatizzare Microsoft Excel da Visual Basic .NET

Utilizzare l'automazione per trasferire una matrice di dati un intervallo in un foglio di lavoro

Una matrice di dati pu˛ essere trasferita a un intervallo di celle nello stesso momento, come illustrato di seguito.
        Dim oExcel As Object
        Dim oBook As Object
        Dim oSheet As Object

        'Start a new workbook in Excel.
        oExcel = CreateObject("Excel.Application")
        oBook = oExcel.Workbooks.Add

        'Create an array with 3 columns and 100 rows.
        Dim DataArray(99, 2) As Object
        Dim r As Integer
        For r = 0 To 99
            DataArray(r, 0) = "ORD" & Format(r + 1, "0000")
            DataArray(r, 1) = Rnd() * 1000
            DataArray(r, 2) = DataArray(r, 1) * 0.07
        Next

        'Add headers to the worksheet on row 1.
        oSheet = oBook.Worksheets(1)
        oSheet.Range("A1").Value = "Order ID"
        oSheet.Range("B1").Value = "Amount"
        oSheet.Range("C1").Value = "Tax"

        'Transfer the array to the worksheet starting at cell A2.
        oSheet.Range("A2").Resize(100, 3).Value = DataArray

        'Save the Workbook and quit Excel.
        oBook.SaveAs(sSampleFolder & "Book2.xls")
        oSheet = Nothing
        oBook = Nothing
        oExcel.Quit()
        oExcel = Nothing
        GC.Collect()
				
se si trasferiscono i dati utilizzando una matrice anzichÚ cella per cella, Ŕ possibile migliorare notevolmente le prestazioni con una grande quantitÓ di dati. Considerare questa riga dal codice precedente, che trasferisce i dati in 300 celle del foglio di lavoro.
        oSheet.Range("A2").Resize(100, 3).Value = DataArray
				
Questa riga rappresenta due richieste di interfaccia: uno per l'oggetto Range restituisce il metodo Range e l'altro per l'oggetto Range restituito dal metodo Resize . Il, invece, trasferimento dei dati cella per cella sono necessarie richieste per 300 interfacce per oggetti Range . Quando possibile, opportuno sfruttare trasferimento dei dati di massa e ridurre il numero di richieste di interfaccia apportate.

Utilizzo di automazione per trasferire un recordset ADO in un intervallo di foglio di lavoro

I modelli di oggetto per Excel 2000 ed Excel 2002 forniscono il metodo CopyFromRecordset per il trasferimento di un recordset ADO in un intervallo in un foglio di lavoro. Il codice riportato di seguito viene illustrato come automatizzare Excel per il trasferimento del contenuto della tabella Orders nel database di esempio Northwind mediante il metodo CopyFromRecordset .
        'Create a Recordset from all the records in the Orders table.
        Dim sNWind As String
        Dim conn As New ADODB.Connection()
        Dim rs As ADODB.Recordset
        conn.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _
            sNorthwind & ";")
        conn.CursorLocation = ADODB.CursorLocationEnum.adUseClient
        rs = conn.Execute("Orders", , ADODB.CommandTypeEnum.adCmdTable)

        'Create a new workbook in Excel.
        Dim oExcel As Object
        Dim oBook As Object
        Dim oSheet As Object
        oExcel = CreateObject("Excel.Application")
        oBook = oExcel.Workbooks.Add
        oSheet = oBook.Worksheets(1)

        'Transfer the field names to Row 1 of the worksheet:
        'Note: CopyFromRecordset copies only the data and not the field
        '      names, so you can transfer the fieldnames by traversing the
        '      fields collection.
        Dim n As Int32
        For n = 1 To rs.Fields.Count
            oSheet.Cells(1, n).Value = rs.Fields(n - 1).Name
        Next

        'Transfer the data to Excel.
        oSheet.Range("A2").CopyFromRecordset(rs)

        'Save the workbook and quit Excel.
        oBook.SaveAs(sSampleFolder & "Book3.xls")
        oSheet = Nothing
        oBook = Nothing
        oExcel.Quit()
        oExcel = Nothing
        GC.Collect()

        'Close the connection
        rs.Close()
        conn.Close()
				
Nota CopyFromRecordset funziona solo con oggetti ADO Recordset . Un DataSet creato mediante ADO.NET non pu˛ essere utilizzato con il metodo CopyFromRecordset . Diversi esempi nelle sezioni che seguono viene illustrato come trasferire dati in Excel con ADO.NET.

Utilizzare l'automazione per creare di un oggetto QueryTable in un foglio di lavoro

Un oggetto QueryTable rappresenta una tabella creata dai dati restituiti da un'origine dati esterna. Mentre si automatizza Excel, Ŕ possibile creare un oggetto QueryTable fornendo una stringa di connessione a un OLEDB o un'origine dati ODBC e una stringa SQL. Excel genera il recordset e il recordset devono essere inseriti il foglio di lavoro nella posizione specificata. Utilizzo di oggetti QueryTable offre i vantaggi seguenti rispetto al metodo CopyFromRecordset :
  • La creazione del recordset e relativo selezione host nel foglio di lavoro sono gestiti da Excel.
  • ╚ possibile salvare la query con l'oggetto QueryTable in modo che pu˛ essere aggiornato in seguito per ottenere un recordset aggiornato.
  • Quando un nuovo QueryTable viene aggiunto al foglio di lavoro, Ŕ possibile specificare che i dati giÓ esistenti nelle celle del foglio di lavoro da spostare per adattarle ai nuovi dati (vedere la proprietÓ RefreshStyle per informazioni dettagliate).
Il codice riportato di seguito viene illustrato come automatizzare Excel 2000 o 2002 per creare un nuovo QueryTable in un foglio di lavoro di Excel con i dati del database di esempio Northwind.
        'Create a new workbook in Excel.
        Dim oExcel As Object
        Dim oBook As Object
        Dim oSheet As Object
        oExcel = CreateObject("Excel.Application")
        oBook = oExcel.Workbooks.Add
        oSheet = oBook.Worksheets(1)

        'Create the QueryTable object.
        Dim oQryTable As Object
        oQryTable = oSheet.QueryTables.Add( _
        "OLEDB;Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _
            sNorthwind & ";", oSheet.Range("A1"), _
            "Select * from Orders")
        oQryTable.RefreshStyle = 2 ' xlInsertEntireRows = 2
        oQryTable.Refresh(False)

        'Save the workbook and quit Excel.
        oBook.SaveAs(sSampleFolder & "Book4.xls")
        oQryTable = Nothing
        oSheet = Nothing
        oBook = Nothing
        oExcel.Quit()
        oExcel = Nothing
				

Utilizzare gli Appunti

╚ possibile utilizzare gli Appunti per trasferire dati in un foglio di lavoro. Per incollare i dati in pi¨ celle in un foglio di lavoro, Ŕ possibile copiare una stringa in cui le colonne sono delimitate da tabulazioni e righe delimitate da ritorni a capo. Il codice di riportato di seguito illustra come Visual Basic .NET utilizza gli Appunti per trasferire dati in Excel.
        'Copy a string to the Clipboard.
        Dim sData As String
        sData = "FirstName" & vbTab & "LastName" & vbTab & "Birthdate" & vbCr _
            & "Bill" & vbTab & "Brown" & vbTab & "2/5/85" & vbCr _
            & "Joe" & vbTab & "Thomas" & vbTab & "1/1/91"
        System.Windows.Forms.Clipboard.SetDataObject(sData)

        'Create a workbook in Excel.
        Dim oExcel As Object
        Dim oBook As Object
        oExcel = CreateObject("Excel.Application")
        oBook = oExcel.Workbooks.Add

        'Paste the data.
        oBook.Worksheets(1).Range("A1").Select()
        oBook.Worksheets(1).Paste()

        'Save the workbook and quit Excel.
        oBook.SaveAs(sSampleFolder & "Book5.xls")
        oBook = Nothing
        oExcel.Quit()
        oExcel = Nothing
        GC.Collect()
				

Creare un file di testo delimitato Excel consente di analizzare in righe e colonne

Excel aprire il file delimitato da tabulazioni o di file delimitato da virgole e analizzare correttamente i dati nelle celle. ╚ possibile utilizzare questa funzionalitÓ quando si desidera trasferire una grande quantitÓ di dati a un foglio di lavoro durante l'utilizzo dell'automazione, gli interventi. Potrebbe trattarsi di un buon approccio per un programma client / server, poichÚ il file di testo pu˛ essere generato sul lato server. ╚ quindi possibile aprire il file di testo dal client, utilizzando l'automazione in cui Ŕ appropriato.

Il codice riportato di seguito viene illustrato come generare un file di testo delimitato da tabulazioni da dati letti con ADO.NET.
        'Connect to the data source.
        Dim objConn As New System.Data.OleDb.OleDbConnection( _
            "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & sNorthwind & ";")
        objConn.Open()

        'Execute a command to retrieve all records from the Employees table.
        Dim objCmd As New System.Data.OleDb.OleDbCommand( _
            "Select * From Employees", objConn)
        Dim objReader As System.Data.OleDb.OleDbDataReader
        objReader = objCmd.ExecuteReader()

        'Read the records in the dataset and write select fields to the 
        'output file.
        FileOpen(1, sSampleFolder & "Book6.txt", OpenMode.Output)
        Dim i As Integer, s As String
        While objReader.Read()
            'Loop through first 6 fields and concatenate
            'each field, separated by a tab, into s variable.
            s = ""
            For i = 0 To 5
                If Not objReader.IsDBNull(i) Then
                    If i = 0 Then 'field 1 is EmployeeId
                        s = s & objReader.GetInt32(i).ToString
                    ElseIf i = 5 Then 'field 6 is BirthDate
                        s = s & objReader.GetDateTime(i)
                    Else 'field is a text field
                        s = s & objReader.GetString(i)
                    End If
                End If
                s = s & Microsoft.VisualBasic.ControlChars.Tab
            Next
            PrintLine(1, s)
        End While
        FileClose(1)

        'Close the reader and the connection.
        objReader.Close()
        objConn.Close()
				
automazione non Ŕ stato utilizzato nel codice precedente. Tuttavia, Ŕ possibile utilizzare minimo di automazione per aprire il file di testo e salvare il file di Excel formato cartella di lavoro, come illustrato di seguito.
        'Create a new instance of Excel.
        Dim oExcel As Object
        oExcel = CreateObject("Excel.Application")

        'Open the text file and save it in the Excel workbook format.
        oExcel.Workbooks.OpenText(sSampleFolder & "Book6.txt", _
            , , , -4142, , True) 'xlTextQualifierNone=-4142

        oExcel.ActiveWorkbook.SaveAs(sSampleFolder & "Book6.xls", _
            -4143) 'xlWorkbookNormal = -4143

        'Quit Excel.
        oExcel.Quit()
        oExcel = Nothing
        GC.Collect()
				

Trasferire dati in un foglio di lavoro mediante ADO.NET

╚ possibile utilizzare il provider OLE DB Microsoft Jet per aggiungere record a una tabella in una cartella di lavoro di Excel esistente. Una "tabella" in Excel Ŕ semplicemente un intervallo di celle, che pu˛ presentare un nome definito. In genere, la prima riga dell'intervallo contiene le intestazioni (o i nomi dei campi) e tutte le righe successive dell'intervallo contengono i record.

Il codice riportato di seguito aggiunge due nuovi record a una tabella in Book7.xls. La tabella Ŕ in questo caso Ŕ Sheet1.
       'Establish a connection to the data source.
        Dim sConnectionString As String
        sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
            "Data Source=" & sSampleFolder & _
            "Book7.xls;Extended Properties=Excel 8.0;"
        Dim objConn As New System.Data.OleDb.OleDbConnection(sConnectionString)
        objConn.Open()

        'Add two records to the table.
        Dim objCmd As New System.Data.OleDb.OleDbCommand()
        objCmd.Connection = objConn
        objCmd.CommandText = "Insert into [Sheet1$] (FirstName, LastName)" & _
            " values ('Bill', 'Brown')"
        objCmd.ExecuteNonQuery()
        objCmd.CommandText = "Insert into [Sheet1$] (FirstName, LastName)" & _
            " values ('Joe', 'Thomas')"
        objCmd.ExecuteNonQuery()

        'Close the connection.
        objConn.Close()
				
quando si aggiungono record mediante ADO.NET come illustrato, la formattazione della cartella di lavoro viene mantenuta. Ogni record aggiunto a una riga acquisisce il formato della riga precedente. Ad esempio, nuovi campi che vengono aggiunti alla colonna B vengono formattati con allineamento a destra poichÚ cella B1 Ŕ allineato a destra.

Si noti che quando un record viene aggiunto a una o pi¨ celle nel foglio di lavoro, sovrascrive i dati che le celle contenute in precedenza. In altre parole, righe nel foglio di lavoro non vengono "spostate verso il basso" quando vengono aggiunti nuovi record. Tenere questo presente quando si progetta il layout dei dati dei fogli di lavoro se si intende l'inserimento di nuovi record mediante ADO.NET.

Per ulteriori informazioni sull'utilizzo di ADO.NET, fare clic sui numeri degli articoli della Microsoft Knowledge Base riportato di seguito:
301075Come connettersi a un database ed eseguire un comando utilizzando ADO.NET e Visual Basic .NET
301216Come popolare un oggetto DataSet da un database utilizzando Visual Basic .NET
301248Come aggiornare un database da un oggetto DataSet utilizzando Visual Basic .NET
Per ulteriori informazioni su come utilizzare il provider OLE DB per Jet con origini dati Excel, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito riportato:
278973ExcelADO di seguito viene illustrato come utilizzare ADO per leggere e scrivere dati nelle cartelle di lavoro di Excel
257819L'utilizzo di ADO con dati di Excel da Visual Basic o VBA

Trasferire i dati XML (solo per Excel 2002)

Excel 2002 pu˛ aprire qualsiasi file XML ben formato. File XML possono essere aperti direttamente dal comando Apri dal menu file , oppure a livello di programmazione utilizzando l'Apri o OpenXML metodi dell'insieme Workbooks . Se si creano un file XML per l'utilizzo in Excel, Ŕ inoltre possibile creare fogli di stile per formattare i dati.

Per ulteriori informazioni sull'utilizzo di XML con Excel 2002, fare clic sui numeri degli articoli della Microsoft Knowledge Base riportato di seguito:
307021Trasferimento di dati XML a Microsoft Excel 2002 utilizzando Visual Basic .NET
288215Microsoft Excel 2002 e XML

Creare il progetto di Visual Basic .NET di esempio completo

  1. Creare una nuova cartella per contenere cartelle di lavoro Excel che nell'esempio verrÓ per la creazione e quindi assegnare un nome alla cartella C:\Exceldata\.
  2. Attenersi alla seguente procedura per creare una nuova cartella di lavoro per l'esempio scrivere:
    1. Avviare una nuova cartella di lavoro in Excel.
    2. Sul Foglio1 della nuova cartella di lavoro, Ŕ necessario digitare nome nella cella A1 e il Cognome nella cella A2.
    3. Salvare il file come C:\Exceldata\Book7.xls.
  3. Avviare Visual Studio NET.. Dal menu file , fare clic su Nuovo e quindi fare clic su progetto . In Progetti di Visual Basic , selezionare Applicazione Windows . Per impostazione predefinita, verrÓ creato Form1.
  4. Aggiungere un riferimento alla libreria oggetti di 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 10.0 e quindi fare clic su Seleziona .

      Nota Se non Ŕ stato giÓ fatto, si consiglia di scaricare e quindi installare l'assembly di interoperabilitÓ primario Microsoft Office XP (in inglese). Per ulteriori informazioni sull'assembly di interoperabilitÓ primari di Office XP, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito riportato:
      328912Microsoft Office XP assembly di interoperabilitÓ primari (PIA) sono disponibili per download
    3. Nella scheda COM , individuare la Libreria Microsoft ActiveX Data Objects 2.7 e quindi fare clic su Seleziona .
    4. Fare clic su OK nella finestra di dialogo Aggiungi riferimento per accettare le selezioni. Se viene visualizzato un messaggio di generare wrapper per le librerie selezionate, scegliere .
  5. Aggiungere un controllo Casella combinata e un controllo pulsante a Form1.
  6. Aggiungere il seguente codice per Form1. sSampleFolder const
        Const sSampleFolder = "C:\ExcelData\"
        Const sNorthwind = "C:\Program Files\Microsoft Office\Office10\Samples\Northwind.mdb"
    
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) _
          Handles MyBase.Load
            ComboBox1.DropDownStyle = ComboBoxStyle.DropDownList
            Dim aList As String() = _
                {"Use Automation to Transfer Data Cell by Cell ", _
                 "Use Automation to Transfer an Array of Data to a Range on a Worksheet ", _
                 "Use Automation to Transfer an ADO Recordset to a Worksheet Range ", _
                 "Use Automation to Create a QueryTable on a Worksheet", _
                 "Use the Clipboard", _
                 "Create a Delimited Text File that Excel Can Parse into Rows and Columns", _
                 "Transfer Data to a Worksheet Using ADO.NET "}
            ComboBox1.Items.AddRange(aList)
            ComboBox1.SelectedIndex = 0
            Button1.Text = "Go!"
        End Sub
    
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
          Handles Button1.Click
            Select Case ComboBox1.SelectedIndex
                Case 0 : Automation_CellByCell()
                Case 1 : Automation_UseArray()
                Case 2 : Automation_ADORecordset()
                Case 3 : Automation_QueryTable()
                Case 4 : Use_Clipboard()
                Case 5 : Create_TextFile()
                Case 6 : Use_ADONET()
            End Select
            GC.Collect()
        End Sub
    
        Private Function Automation_CellByCell()
            Dim oExcel As Object
            Dim oBook As Object
            Dim oSheet As Object
    
            'Start a new workbook in Excel.
            oExcel = CreateObject("Excel.Application")
            oBook = oExcel.Workbooks.Add
    
            'Add data to cells of the first worksheet in the new workbook.
            oSheet = oBook.Worksheets(1)
            oSheet.Range("A1").Value = "Last Name"
            oSheet.Range("B1").Value = "First Name"
            oSheet.Range("A1:B1").Font.Bold = True
            oSheet.Range("A2").Value = "Doe"
            oSheet.Range("B2").Value = "John"
    
            'Save the workbook and quit Excel.
            oBook.SaveAs(sSampleFolder & "Book1.xls")
            oSheet = Nothing
            oBook = Nothing
            oExcel.Quit()
            oExcel = Nothing
            GC.Collect()
        End Function
    
        Private Function Automation_UseArray()
            Dim oExcel As Object
            Dim oBook As Object
            Dim oSheet As Object
    
            'Start a new workbook in Excel.
            oExcel = CreateObject("Excel.Application")
            oBook = oExcel.Workbooks.Add
    
            'Create an array with 3 columns and 100 rows.
            Dim DataArray(99, 2) As Object
            Dim r As Integer
            For r = 0 To 99
                DataArray(r, 0) = "ORD" & Format(r + 1, "0000")
                DataArray(r, 1) = Rnd() * 1000
                DataArray(r, 2) = DataArray(r, 1) * 0.07
            Next
    
            'Add headers to the worksheet on row 1.
            oSheet = oBook.Worksheets(1)
            oSheet.Range("A1").Value = "Order ID"
            oSheet.Range("B1").Value = "Amount"
            oSheet.Range("C1").Value = "Tax"
    
            'Transfer the array to the worksheet starting at cell A2.
            oSheet.Range("A2").Resize(100, 3).Value = DataArray
    
            'Save the workbook and quit Excel.
            oBook.SaveAs(sSampleFolder & "Book2.xls")
            oSheet = Nothing
            oBook = Nothing
            oExcel.Quit()
            oExcel = Nothing
            GC.Collect()
        End Function
    
        Private Function Automation_ADORecordset()
            'Create a Recordset from all the records in the Orders table.
            Dim sNWind As String
            Dim conn As New ADODB.Connection()
            Dim rs As ADODB.Recordset
            conn.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _
                sNorthwind & ";")
            conn.CursorLocation = ADODB.CursorLocationEnum.adUseClient
            rs = conn.Execute("Orders", , ADODB.CommandTypeEnum.adCmdTable)
    
            'Create a new workbook in Excel.
            Dim oExcel As Object
            Dim oBook As Object
            Dim oSheet As Object
            oExcel = CreateObject("Excel.Application")
            oBook = oExcel.Workbooks.Add
            oSheet = oBook.Worksheets(1)
    
            'Transfer the field names to Row 1 of the worksheet:
            'Note: CopyFromRecordset copies only the data and not the field
            '      names, so you can transfer the fieldnames by traversing the
            '      fields collection.
            Dim n As Int32
            For n = 1 To rs.Fields.Count
                oSheet.Cells(1, n).Value = rs.Fields(n - 1).Name
            Next
    
            'Transfer the data to Excel.
            oSheet.Range("A2").CopyFromRecordset(rs)
    
            'Save the workbook and quit Excel.
            oBook.SaveAs(sSampleFolder & "Book3.xls")
            oSheet = Nothing
            oBook = Nothing
            oExcel.Quit()
            oExcel = Nothing
            GC.Collect()
    
            'Close the connection.
            rs.Close()
            conn.Close()
        End Function
    
        Private Function Automation_QueryTable()
            'Create a new workbook in Excel.
            Dim oExcel As Object
            Dim oBook As Object
            Dim oSheet As Object
            oExcel = CreateObject("Excel.Application")
            oBook = oExcel.Workbooks.Add
            oSheet = oBook.Worksheets(1)
    
            'Create the QueryTable object.
            Dim oQryTable As Object
            oQryTable = oSheet.QueryTables.Add( _
            "OLEDB;Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _
                sNorthwind & ";", oSheet.Range("A1"), _
                "Select * from Orders")
            oQryTable.RefreshStyle = 2 ' xlInsertEntireRows = 2
            oQryTable.Refresh(False)
    
            'Save the workbook and quit Excel.
            oBook.SaveAs(sSampleFolder & "Book4.xls")
            oQryTable = Nothing
            oSheet = Nothing
            oBook = Nothing
            oExcel.Quit()
    
    
            oExcel = Nothing
    
        End Function
    
        Private Function Use_Clipboard()
            'Copy a string to the clipboard.
            Dim sData As String
            sData = "FirstName" & vbTab & "LastName" & vbTab & "Birthdate" & vbCr _
                & "Bill" & vbTab & "Brown" & vbTab & "2/5/85" & vbCr _
                & "Joe" & vbTab & "Thomas" & vbTab & "1/1/91"
            System.Windows.Forms.Clipboard.SetDataObject(sData)
    
            'Create a new workbook in Excel.
            Dim oExcel As Object
            Dim oBook As Object
            oExcel = CreateObject("Excel.Application")
            oBook = oExcel.Workbooks.Add
    
            'Paste the data.
            oBook.Worksheets(1).Range("A1").Select()
            oBook.Worksheets(1).Paste()
    
            'Save the workbook and quit Excel.
            oBook.SaveAs(sSampleFolder & "Book5.xls")
            oBook = Nothing
            oExcel.Quit()
            oExcel = Nothing
            GC.Collect()
        End Function
    
        Private Function Create_TextFile()
            'Connect to the data source.
            Dim objConn As New System.Data.OleDb.OleDbConnection( _
                "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & sNorthwind & ";")
            objConn.Open()
    
            'Run a command to retrieve all records from the Employees table.
            Dim objCmd As New System.Data.OleDb.OleDbCommand( _
                "Select * From Employees", objConn)
            Dim objReader As System.Data.OleDb.OleDbDataReader
            objReader = objCmd.ExecuteReader()
    
            'Read the records in the dataset and write select fields to the 
            'output file.
            FileOpen(1, sSampleFolder & "Book6.txt", OpenMode.Output)
            Dim i As Integer, s As String
            While objReader.Read()
                'Loop through first 6 fields and concatenate
                'each field, separated by a tab, into s variable.
                s = ""
                For i = 0 To 5
                    If Not objReader.IsDBNull(i) Then
                        If i = 0 Then 'field 1 is EmployeeId
                            s = s & objReader.GetInt32(i).ToString
                        ElseIf i = 5 Then 'field 6 is BirthDate
                            s = s & objReader.GetDateTime(i)
                        Else 'field is a text field
                            s = s & objReader.GetString(i)
                        End If
                    End If
                    s = s & Microsoft.VisualBasic.ControlChars.Tab
                Next
                PrintLine(1, s)
            End While
            FileClose(1)
    
            'Close the reader and the connection.
            objReader.Close()
            objConn.Close()
    
            'Create a new instance of Excel.
            Dim oExcel As Object
            oExcel = CreateObject("Excel.Application")
    
            'Open the text file and save it in the Excel workbook format.
            oExcel.Workbooks.OpenText(sSampleFolder & "Book6.txt", _
                , , , -4142, , True) 'xlTextQualifierNone=-4142
    
            oExcel.ActiveWorkbook.SaveAs(sSampleFolder & "Book6.xls", _
                -4143) 'xlWorkbookNormal = -4143
    
            'Quit Excel.
            oExcel.Quit()
            oExcel = Nothing
            GC.Collect()
        End Function
    
        Private Function Use_ADONET()
    
            'Verify that the workbook to write to does exist.
            Dim sFile As String = sSampleFolder & "Book7.xls"
            If Dir(sFile) = "" Then
                MsgBox("Please create the workbook Book7.xls and try again.")
                Exit Function
            End If
    
            'Establish a connection to the data source.
            Dim sConnectionString As String
            sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                "Data Source=" & sSampleFolder & _
                "Book7.xls;Extended Properties=Excel 8.0;"
            Dim objConn As New System.Data.OleDb.OleDbConnection(sConnectionString)
            objConn.Open()
    
            'Add two records to the table named 'MyTable'.
            Dim objCmd As New System.Data.OleDb.OleDbCommand()
            objCmd.Connection = objConn
            objCmd.CommandText = "Insert into [Sheet1$] (FirstName, LastName)" & _
                " values ('Bill', 'Brown')"
            objCmd.ExecuteNonQuery()
            objCmd.CommandText = "Insert into [Sheet1$] (FirstName, LastName)" & _
                " values ('Joe', 'Thomas')"
            objCmd.ExecuteNonQuery()
    
            'Close the connection.
            objConn.Close()
        End Function
    					
    Nota Se Office non Ŕ stato installato nella cartella predefinita (c:\Programmi\Microsoft Office), modificare la costante di sNorthwind nell'esempio di codice per associare il percorso di installazione di Northwind.mdb.

  7. Aggiungere il codice riportato di seguito all'inizio di Form1.vb.
    Imports Microsoft.Office.Interop
    					
  8. Premere F5 per generare ed eseguire quindi l'esempio.

Riferimenti

Per ulteriori informazioni, visitare il seguente Microsoft Developer sito Web Network (MSDN):
http://msdn2.microsoft.com/en-us/library/aa188489(office.10).aspx
Per ulteriori informazioni, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito riportato:
247412Metodi per trasferire i dati in Excel da Visual Basic

ProprietÓ

Identificativo articolo: 306022 - Ultima modifica: mercoledý 17 gennaio 2007 - Revisione: 6.3
Le informazioni in questo articolo si applicano a:
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • Microsoft ADO.NET (included with the .NET Framework)
Chiavi:á
kbmt kbautomation kbhowtomaster KB306022 KbMtit
Traduzione automatica articoli
Il presente articolo Ŕ stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell?utente. Tuttavia, un articolo tradotto in modo automatico non Ŕ sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, pi¨ o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non Ŕ la sua. Microsoft non Ŕ responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell?utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica.
Clicca qui per visualizzare la versione originale in inglese dell?articolo: 306022
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.

Invia suggerimenti

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com