Condividi tramite


Procedura dettagliata: modifica dei dati memorizzati nella cache di una cartella di lavoro contenuta in un server

Questa procedura dettagliata illustra come utilizzare la classe ServerDocument per modificare un dataset memorizzato nella cache di una cartella di lavoro di Microsoft Office Excel senza avviare Excel. Vengono inoltre fornite istruzioni dettagliate sull'utilizzo degli esempi di codice contenuti in Procedura: modificare i dati memorizzati nella cache di una cartella di lavoro di un server.

Si applica a: le informazioni fornite in questo argomento sono valide per i progetti a livello di documento per Excel 2007 ed Excel 2010. Per ulteriori informazioni, vedere Funzionalità disponibili in base ai tipi di progetto e applicazioni di Office.

Vengono illustrate le attività seguenti:

  • Definizione di un dataset contenente dati ottenuti dal database AdventureWorksLT.

  • Creazione di istanze del dataset in un progetto Cartella di lavoro di Excel e in un progetto di applicazione console.

  • Creazione di un oggetto ListObject associato al dataset contenuto nella cartella di lavoro e popolazione di tale oggetto ListObject con dati all'apertura della cartella di lavoro.

  • Aggiunta del dataset contenuto nella cartella di lavoro nella cache di dati

  • Modifica di una colonna di dati del dataset memorizzato nella cache mediante l'esecuzione di codice nell'applicazione console, senza avviare Excel.

Anche se questa procedura dettagliata presuppone che si esegua il codice nel computer di sviluppo, il codice illustrato da questa procedura dettagliata può essere utilizzato in un server in cui non è stato installato Excel.

Nota

Il computer potrebbe mostrare nomi o percorsi diversi per alcuni elementi dell'interfaccia utente di Visual Studio nelle istruzioni seguenti. L'edizione di Visual Studio in uso e le impostazioni utilizzate determinano questi elementi. Per ulteriori informazioni, vedere Gestione delle impostazioni.

Prerequisiti

Per completare la procedura dettagliata, è necessario disporre dei componenti seguenti:

-

Una versione di Visual Studio 2010 che include gli strumenti per sviluppatori di Microsoft Office. Per ulteriori informazioni, vedere [Configurazione di un computer per sviluppare soluzioni Office](bb398242\(v=vs.100\).md).

Creazione di un progetto Libreria di classi che definisce un dataset

Per utilizzare lo stesso dataset sia in un progetto Cartella di lavoro di Excel sia in un'applicazione console è necessario definire il dataset in un assembly a parte a cui entrambi questi progetti fanno riferimento. Per questa procedura dettagliata, definire il dataset in un progetto Libreria di classi.

Per creare il progetto Libreria di classi

  1. Avviare Visual Studio.

  2. Scegliere Nuovo dal menu File, quindi fare clic su Progetto.

  3. Nel riquadro dei modelli espandere Visual C# o Visual Basic, quindi scegliere Windows.

  4. Nell'elenco dei modelli di progetto selezionare Libreria di classi.

  5. Nella casella Nome digitare AdventureWorksDataSet.

  6. Fare clic su Sfoglia, passare alla cartella %UserProfile%\Documenti (per Windows XP e versioni precedenti e per Windows Vista) e quindi fare clic su Seleziona cartella.

  7. Assicurarsi che nella finestra di dialogo Nuovo progetto la casella di controllo Crea directory per soluzione non sia selezionata.

  8. Scegliere OK.

    Visual Studio aggiunge il progetto AdventureWorksDataSet in Esplora soluzioni e apre il file di codice Class1.cs o Class1.vb.

  9. In Esplora soluzioni, fare clic con il pulsante destro del mouse su Class1.cs o Class1.vb e quindi fare clic su Elimina. Per la presente procedura dettagliata, infatti, questo file non è necessario.

Definizione di un dataset nel progetto Libreria di classi

Definire un dataset tipizzato contenente dati ottenuti dal database AdventureWorksLT per SQL Server 2005. Più avanti in questa procedura, verrà fatto riferimento a questo dataset da un progetto cartella di lavoro di Excel e da un progetto di applicazione console.

Il dataset è un dataset tipizzato che rappresenta i dati contenuti nella tabella Product del database AdventureWorksLT. Per ulteriori informazioni sui dataset tipizzati, vedere Utilizzo di dataset in Visual Studio.

Per definire un dataset tipizzato nel progetto Libreria di classi

  1. Fare clic sul progetto AdventureWorksDataSet in Esplora soluzioni.

  2. Scegliere Aggiungi nuova origine dati dal menu Dati.

    Verrà avviata la Configurazione guidata origine dati.

  3. Fare clic su Database, quindi scegliere Avanti.

  4. Se già si dispone di una connessione al database AdventureWorksLT, scegliere questa connessione e fare clic su Avanti.

    In caso contrario, fare clic su Nuova connessione e utilizzare la finestra di dialogo Aggiungi connessione per creare la nuova connessione. Per ulteriori informazioni, vedere Procedura: connettersi ai dati di un database.

  5. Scegliere Avanti nella pagina Salva stringa di connessione nel file di configurazione dell'applicazione.

  6. Nella pagina Seleziona oggetti di database, espandere Tabelle e selezionare Product (SalesLT).

  7. Scegliere Fine.

    Il file AdventureWorksLTDataSet.xsd viene aggiunto al progetto AdventureWorksDataSet. Questo file definisce gli elementi seguenti:

    • Un dataset tipizzato denominato AdventureWorksLTDataSet. Questo dataset rappresenta il contenuto della tabella Product contenuta nel database AdventureWorksLT.

    • Un TableAdapter denominato ProductTableAdapter. Questo TableAdapter può essere utilizzato per leggere e scrivere dati in AdventureWorksLTDataSet. Per ulteriori informazioni, vedere Cenni preliminari sugli oggetti TableAdapter.

    Più avanti nella presente procedura questi oggetti verranno utilizzati entrambi.

  8. In Esplora soluzioni fare clic con il pulsante destro del mouse su AdventureWorksDataSet, quindi scegliere Compila.

    Verificare che il progetto venga compilato senza errori.

Creazione di un progetto Cartella di lavoro di Excel

Creare un progetto Cartella di lavoro di Excel da utilizzare come interfaccia per i dati. Più avanti in questa procedura si creerà un ListObject che visualizza i dati e si aggiungerà un'istanza del dataset alla cache di dati della cartella di lavoro.

Per creare il progetto Cartella di lavoro di Excel

  1. In Esplora soluzioni fare clic con il pulsante destro del mouse sulla soluzione AdventureWorksDataSet, scegliere Aggiungi e quindi fare clic su Nuovo progetto.

  2. Nel riquadro dei modelli espandere Visual C# o Visual Basic, quindi espandere Office.

  3. Nel nodo Office espanso, selezionare il nodo 2007 o 2010.

  4. Nell'elenco dei modelli di progetto selezionare il progetto cartella di lavoro di Excel.

  5. Nella casella Nome, digitare AdventureWorksReport. Non modificare il percorso.

  6. Scegliere OK.

    Verrà avviata la Creazione guidata progetto Visual Studio Tools per Office.

  7. Verificare che l'opzione Crea nuovo documento sia selezionata e fare clic su OK.

    Visual Studio apre la cartella di lavoro AdventureWorksReport nella finestra di progettazione e aggiunge il progetto AdventureWorksReport in Esplora soluzioni.

Aggiunta del dataset a origini dati contenute nel progetto Cartella di lavoro di Excel

Prima che sia possibile visualizzare il dataset contenuto nella cartella di lavoro di Excel, è necessario aggiungere il dataset alle origini dati contenute nel progetto Cartella di lavoro di Excel.

Per aggiungere il dataset alle origini dati contenute nel progetto Cartella di lavoro di Excel

  1. In Esplora soluzioni, fare doppio clic su Sheet1.cs o Sheet1.vb sotto il progetto AdventureWorksReport.

    La cartella di lavoro verrà aperta nella finestra di progettazione.

  2. Scegliere Aggiungi nuova origine dati dal menu Dati.

    Verrà avviata la Configurazione guidata origine dati.

  3. Fare clic su Oggetto e quindi su Avanti.

  4. Nella pagina Seleziona l'oggetto da associare fare clic su Aggiungi riferimento.

  5. Nella scheda Progetti, fare clic su AdventureWorksDataSet e quindi su OK.

  6. Sotto lo spazio dei nomi AdventureWorksDataSet dell'assembly AdventureWorksDataSet, fare clic su AdventureWorksLTDataSet e quindi su Fine.

    Verrà aperta la finestra Origini dati. Inoltre, AdventureWorksLTDataSet verrà aggiunto all'elenco di origini dati.

Creazione di un oggetto ListObject associato a un'istanza del dataset

Per visualizzare il dataset contenuto nella cartella di lavoro, creare un oggetto ListObject associato a un'istanza del dataset. Per ulteriori informazioni sull'associazione dei controlli ai dati, vedere Associazione di dati ai controlli nelle soluzioni Office.

Per creare un oggetto ListObject associato a un'istanza del dataset

  1. Nella finestra Origini dati espandere il nodo AdventureWorksLTDataSet sotto AdventureWorksDataSet.

  2. Selezionare il nodo Product, fare clic sulla freccia a discesa visualizzata e selezionare ListObject nell'elenco a discesa.

    Se la freccia a discesa non viene visualizzata, verificare che la cartella di lavoro sia aperta nella finestra di progettazione.

  3. Trascinare la tabella Product nella cella A1.

    Un controllo ListObject denominato productListObject viene creato nel foglio di lavoro a partire dalla cella A1. Contemporaneamente, al progetto vengono aggiunti un oggetto dataset denominato adventureWorksLTDataSet e un BindingSource denominato productBindingSource. Il controllo ListObject viene associato all'oggetto BindingSource, che a sua volta è associato all'oggetto dataset.

Aggiunta del dataset nella cache di dati

Per consentire al codice esterno al progetto Cartella di lavoro di Excel di accedere al dataset contenuto nella cartella di lavoro, è necessario aggiungere il dataset nella cache di dati. Per ulteriori informazioni sulla cache di dati, vedere Dati memorizzati nella cache nelle personalizzazioni a livello di documento e Memorizzazione di dati nella cache.

Per aggiungere il dataset nella cache di dati

  1. Nella finestra di progettazione, fare clic su adventureWorksLTDataSet.

  2. Nella finestra Proprietà, impostare la proprietà Modifiers su Public.

  3. Impostare la proprietà CacheInDocument su True.

Inizializzazione del dataset contenuto nella cartella di lavoro

Prima che sia possibile recuperare i dati dal dataset memorizzato nella cache tramite l'applicazione console, è necessario popolare con dati il dataset memorizzato nella cache.

Per inizializzare il dataset contenuto nella cartella di lavoro

  1. In Esplora soluzioni, fare clic con il pulsante destro del mouse sul file Sheet1.cs o Sheet1.vb e scegliere Visualizza codice.

  2. Sostituire il gestore eventi Sheet1_Startup con il codice riportato di seguito. Questo codice utilizza un'istanza della classe ProductTableAdapter definita nel progetto AdventureWorksDataSet per riempire con dati il dataset memorizzato nella cache, se attualmente è vuoto.

    Private ProductTableAdapter As New  _
        AdventureWorksDataSet.AdventureWorksLTDataSetTableAdapters.ProductTableAdapter()
    
    Private Sub Sheet1_Startup(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Startup
        If Me.NeedsFill("AdventureWorksLTDataSet") Then
            Me.ProductTableAdapter.Fill(Me.AdventureWorksLTDataSet.Product)
        End If
    End Sub
    
    private AdventureWorksDataSet.AdventureWorksLTDataSetTableAdapters.ProductTableAdapter productTableAdapter =
        new AdventureWorksDataSet.AdventureWorksLTDataSetTableAdapters.ProductTableAdapter();
    
    private void Sheet1_Startup(object sender, System.EventArgs e)
    {
        if (this.NeedsFill("adventureWorksLTDataSet"))
        {
            this.productTableAdapter.Fill(this.adventureWorksLTDataSet.Product);
        }
    }
    

Verifica

Compilare ed eseguire il progetto Cartella di lavoro di Excel per assicurarsi che sia la compilazione sia l'esecuzione vengano completate senza errori. Questa operazione comporta inoltre il riempimento del dataset memorizzato nella cache nonché il salvataggio dei dati nella cartella di lavoro.

Per compilare ed eseguire il progetto

  1. In Esplora soluzioni, fare clic con il pulsante destro del mouse sul progetto AdventureWorksReport, scegliere Debug e quindi fare clic su Avvia nuova istanza.

    Il progetto verrà compilato e la cartella di lavoro verrà aperta in Excel. Verificare quanto segue:

    • ListObject è stato riempito con i dati.

    • Verificare che il valore indicato nella colonna ListPrice della prima riga di ListObject sia 1431.5. Più avanti nella procedura dettagliata verrà utilizzata un'applicazione console per modificare i valori contenuti nella colonna ListPrice.

  2. Salvare la cartella di lavoro. Non modificare il nome o il percorso del file della cartella di lavoro.

  3. Chiudere Excel.

Creazione di un progetto di applicazione console.

Creare un progetto di applicazione console da utilizzare per modificare i dati contenuti nel dataset memorizzato nella cache della cartella di lavoro.

Per creare un progetto di applicazione console

  1. In Esplora soluzioni fare clic con il pulsante destro del mouse sulla soluzione AdventureWorksDataSet, scegliere Aggiungi e quindi fare clic su Nuovo progetto.

  2. Nel riquadro Tipi progetto espandere Visual C# o Visual Basic e quindi fare clic su Windows.

  3. Nel riquadro Modelli selezionare Applicazione console.

  4. Nella casella Nome digitare DataWriter. Non modificare il percorso.

  5. Scegliere OK.

    Visual Studio aggiunge il progetto DataWriter in Esplora soluzioni e apre il file di codice Program.cs o Module1.vb.

Modifica dei dati contenuti nel dataset memorizzato nella cache tramite l'applicazione console

Utilizzare la classe ServerDocument nell'applicazione console per leggere i dati in un oggetto AdventureWorksLTDataSet locale. Quindi, dopo aver modificato tali dati, salvarli di nuovo nel dataset memorizzato nella cache.

Per modificare i dati contenuti nel dataset memorizzato nella cache

  1. In Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto DataWriter, quindi scegliere Aggiungi riferimento.

  2. Nella scheda .NET selezionare Microsoft.VisualStudio.Tools.Applications.ServerDocument (se il progetto DataWriter è destinato a .NET Framework 4) o Microsoft.VisualStudio.Tools.Applications.ServerDocument.v10.0 (se il progetto DataWriter è destinato a .NET Framework 3.5).

  3. Scegliere OK.

  4. In Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto DataWriter, quindi scegliere Aggiungi riferimento.

  5. Nella scheda Progetti, selezionare AdventureWorksDataSet e fare clic su OK.

  6. Aprire il file Program.cs o Module1.vb nell'editor di codice.

  7. Aggiungere l'istruzione using (per C#) o Imports (per Visual Basic) seguente all'inizio del file di codice.

    Imports Microsoft.VisualStudio.Tools.Applications
    
    using Microsoft.VisualStudio.Tools.Applications;
    
  8. Aggiungere al metodo Main il seguente codice. Questo codice dichiara gli oggetti seguenti:

    • Un'istanza di tipo AdventureWorksLTDataSet definita nel progetto AdventureWorksDataSet.

    • Il percorso della cartella di lavoro AdventureWorksReport contenuta nella cartella di compilazione del progetto AdventureWorksReport.

    • Un oggetto ServerDocument da utilizzare per accedere alla cache di dati nella cartella di lavoro.

      Nota

      Il codice seguente presuppone che si utilizzi una cartella di lavoro con estensione xlsx. Se la cartella di lavoro contenuta nel progetto presenta un'estensione di file diversa, modificare il percorso di conseguenza.

    Dim productDataSet As New AdventureWorksDataSet.AdventureWorksLTDataSet()
    Dim workbookPath As String = System.Environment.GetFolderPath( _
        Environment.SpecialFolder.MyDocuments) & _
        "\AdventureWorksReport\bin\Debug\AdventureWorksReport.xlsx"
    Dim serverDocument1 As ServerDocument = Nothing
    
    AdventureWorksDataSet.AdventureWorksLTDataSet productDataSet =
        new AdventureWorksDataSet.AdventureWorksLTDataSet();
    string workbookPath = System.Environment.GetFolderPath(
        Environment.SpecialFolder.MyDocuments) +
        @"\AdventureWorksReport\bin\Debug\AdventureWorksReport.xlsx";
    ServerDocument serverDocument1 = null;
    
  9. Aggiungere il codice seguente nel metodo Main dopo il codice aggiunto nel passaggio precedente. Mediante il codice vengono effettuate le seguenti attività:

    • La proprietà CachedData della classe ServerDocument viene utilizzata per accedere al dataset memorizzato nella cache della cartella di lavoro.

    • I dati vengono letti dal dataset memorizzato nella cache e inseriti nel dataset locale.

    • Il valore ListPrice di ogni prodotto contenuto nella tabella Product del dataset viene modificato.

    • Le modifiche apportate al dataset memorizzato nella cache della cartella di lavoro vengono salvate.

    Try
        serverDocument1 = New ServerDocument(workbookPath)
        Dim dataHostItem1 As CachedDataHostItem = _
            serverDocument1.CachedData.HostItems("AdventureWorksReport.Sheet1")
        Dim dataItem1 As CachedDataItem = dataHostItem1.CachedData("AdventureWorksLTDataSet")
    
        If dataItem1 IsNot Nothing Then
            Console.WriteLine("Before reading data from the cache dataset, the local dataset has " & _
                "{0} rows.", productDataSet.Product.Rows.Count.ToString())
    
            ' Read the cached data from the worksheet dataset into the local dataset.
            Dim schemaReader As New System.IO.StringReader(dataItem1.Schema)
            Dim xmlReader As New System.IO.StringReader(dataItem1.Xml)
            productDataSet.ReadXmlSchema(schemaReader)
            productDataSet.ReadXml(xmlReader)
    
            Console.WriteLine("After reading data from the cache dataset, the local dataset has " & _
                "{0} rows.", productDataSet.Product.Rows.Count.ToString())
    
            ' Modify the prices of each product in the local dataset.
            Dim row As AdventureWorksDataSet.AdventureWorksLTDataSet.ProductRow
            For Each row In productDataSet.Product.Rows
                If row.ProductCategoryID < 20 Then
                    row.ListPrice = row.ListPrice + row.ListPrice * 0.1
                Else
                    row.ListPrice = row.ListPrice - row.ListPrice * 0.1
                End If
            Next row
    
            ' Write the modified local dataset to the worksheet dataset using the DiffGram format.
            Dim stringIn As New System.Text.StringBuilder()
            Dim stringOut As New System.IO.StringWriter(stringIn)
            productDataSet.WriteXml(stringOut, System.Data.XmlWriteMode.DiffGram)
            dataItem1.Xml = stringIn.ToString()
    
            serverDocument1.Save()
            Console.WriteLine("The product prices have been modified.")
        Else
            Console.WriteLine("The data object is not found in the data cache.")
        End If
    Catch ex As System.IO.FileNotFoundException
        Console.WriteLine("The specified workbook does not exist.")
    Catch ex As System.Xml.XmlException
        Console.WriteLine("The data object has invalid XML information.")
    Finally
        If Not (serverDocument1 Is Nothing) Then
            serverDocument1.Close()
        End If
        Console.WriteLine(vbLf & vbLf & "Press Enter to close the application.")
        Console.ReadLine()
    End Try
    
    try
    {
        serverDocument1 = new ServerDocument(workbookPath);
        CachedDataHostItem dataHostItem1 =
            serverDocument1.CachedData.HostItems["AdventureWorksReport.Sheet1"];
        CachedDataItem dataItem1 = dataHostItem1.CachedData["adventureWorksLTDataSet"];
    
        if (dataItem1 != null)
        {
            Console.WriteLine("Before reading data from the cache dataset, the local dataset has " +
                "{0} rows.", productDataSet.Product.Rows.Count.ToString());
    
            // Read the cached data from the worksheet dataset into the local dataset.
            System.IO.StringReader schemaReader = new System.IO.StringReader(dataItem1.Schema);
            System.IO.StringReader xmlReader = new System.IO.StringReader(dataItem1.Xml);
            productDataSet.ReadXmlSchema(schemaReader);
            productDataSet.ReadXml(xmlReader);
    
            Console.WriteLine("After reading data from the cache dataset, the local dataset has " +
                "{0} rows.", productDataSet.Product.Rows.Count.ToString());
    
            // Modify the prices of each product in the local dataset.
            foreach (AdventureWorksDataSet.AdventureWorksLTDataSet.ProductRow row in 
                     productDataSet.Product.Rows)
            {
                if (row.ProductCategoryID < 20)
                {
                    row.ListPrice = row.ListPrice + (row.ListPrice * (Decimal).10);
                }
                else
                {
                    row.ListPrice = row.ListPrice - (row.ListPrice * (Decimal).10);
                }
            }
    
            // Write the modified local dataset to the worksheet dataset using the DiffGram format.
            System.Text.StringBuilder stringIn = new System.Text.StringBuilder();
            System.IO.StringWriter stringOut = new System.IO.StringWriter(stringIn);
            productDataSet.WriteXml(stringOut, System.Data.XmlWriteMode.DiffGram);
            dataItem1.Xml = stringIn.ToString();
    
            serverDocument1.Save();
            Console.WriteLine("The product prices have been modified.");
        }
        else
        {
            Console.WriteLine("The data object is not found in the data cache.");
        }
    }
    catch (System.IO.FileNotFoundException)
    {
        Console.WriteLine("The specified workbook does not exist.");
    }
    catch (System.Xml.XmlException)
    {
        Console.WriteLine("The data object has invalid XML information.");
    }
    finally
    {
        if (serverDocument1 != null)
        {
            serverDocument1.Close();
        }
    
        Console.WriteLine("\n\nPress Enter to close the application.");
        Console.ReadLine();
    }
    
  10. In Esplora soluzioni, fare clic con il pulsante destro del mouse sul progetto DataWriter, scegliere Debug e quindi fare clic su Avvia nuova istanza.

    L'applicazione console visualizzerà alcuni messaggi mentre legge il contenuto del dataset memorizzato nella cache e lo inserisce nel dataset locale, modificherà i prezzi dei prodotti contenuti nel dataset locale e salverà i nuovi valori nel dataset memorizzato nella cache. Premere INVIO per chiudere l'applicazione.

Test della cartella di lavoro

Quando si apre la cartella di lavoro, ListObject visualizza le modifiche apportate alla colonna di dati ListPrice del dataset memorizzato nella cache.

Per eseguire il test della cartella di lavoro

  1. Se è ancora aperta, chiudere la cartella di lavoro AdventureWorksReport nella finestra di progettazione di Visual Studio.

  2. Aprire la cartella di lavoro AdventureWorksReport contenuta nella cartella di compilazione del progetto AdventureWorksReport. Per impostazione predefinita, la cartella di compilazione si trova in uno dei percorsi seguenti:

    • %UserProfile%\Documenti\AdventureWorksReport\bin\Debug (per Windows XP e versioni precedenti)

    • %UserProfile%\Documenti\AdventureWorksReport\bin\Debug (per Windows Vista)

  3. Verificare che il valore indicato nella colonna ListPrice della prima riga di ListObject sia 1574.65.

  4. Chiudere la cartella di lavoro.

Passaggi successivi

Gli argomenti elencati di seguito offrono ulteriori informazioni sull'utilizzo di dati memorizzati nella cache:

Vedere anche

Attività

Procedura: inserire dati in una cartella di lavoro sul server

Procedura: recuperare i dati memorizzati nella cache di una cartella di lavoro di un server

Procedura dettagliata: inserimento di dati in una cartella di lavoro contenuta in un server

Procedura: inserire dati nei documenti senza scriverli sul disco

Concetti

Connessione ai dati nelle applicazioni Windows Form