Procédure pas à pas : modifier les données mises en cache dans un classeur sur un serveur

Cette procédure pas à pas montre comment modifier un jeu de données mis en cache dans un classeur Microsoft Bureau Excel sans démarrer Excel à l’aide de la ServerDocument classe.

S’applique à : les informations contenues dans cette rubrique s’appliquent aux projets au niveau du document pour Excel. Pour plus d’informations, consultez Fonctionnalités disponibles par application Office lication et le type de projet.

Remarque

Vous souhaitez développer des solutions qui étendent l’expérience de Bureau sur plusieurs plateformes ? Consultez le nouveau modèle de compléments Bureau. Bureau compléments ont une petite empreinte par rapport aux compléments et solutions VSTO, et vous pouvez les créer à l’aide de presque n’importe quelle technologie de programmation web, telle que HTML5, JavaScript, CSS3 et XML.

Cette procédure pas à pas décrit les tâches suivantes :

  • Définition d’un jeu de données qui contient des données de la base de données AdventureWorksLT.

  • Création d’instances du jeu de données dans un projet de classeur Excel et un projet d’application console.

  • Création d’un ListObject jeu de données lié au jeu de données dans le classeur et remplissage des ListObject données lors de l’ouverture du classeur.

  • Ajout du jeu de données dans le classeur au cache de données.

  • Modification d’une colonne de données dans le jeu de données mis en cache en exécutant du code dans l’application console, sans démarrer Excel.

    Bien que cette procédure pas à pas suppose que vous exécutez le code sur votre ordinateur de développement, le code illustré par cette procédure pas à pas peut être utilisé sur un serveur sur lequel Excel n’est pas installé.

Remarque

Il est possible que pour certains des éléments de l'interface utilisateur de Visual Studio, votre ordinateur affiche des noms ou des emplacements différents de ceux indiqués dans les instructions suivantes. L'édition de Visual Studio dont vous disposez et les paramètres que vous utilisez déterminent ces éléments. Pour plus d’informations, consultez Personnaliser l’IDE Visual Studio.

Prérequis

Vous devez disposer des éléments suivants pour exécuter cette procédure pas à pas :

Créer un projet de bibliothèque de classes qui définit un jeu de données

Pour utiliser le même jeu de données dans un projet de classeur Excel et une application console, vous devez définir le jeu de données dans un assembly distinct référencé par ces deux projets. Pour cette procédure pas à pas, définissez le jeu de données dans un projet de bibliothèque de classes.

Pour créer le projet de bibliothèque de classes

  1. Démarrez Visual Studio.

  2. Dans le menu Fichier , pointez sur Nouveau, puis cliquez sur Projet.

  3. Dans le volet modèles, développez Visual C# ou Visual Basic, puis cliquez sur Windows.

  4. Dans la liste des modèles de projet, sélectionnez Bibliothèque de classes.

  5. Dans la zone Nom , tapez AdventureWorksDataSet.

  6. Cliquez sur Parcourir, accédez à votre dossier %UserProfile%\Mes documents (pour Windows XP et versions antérieures) ou %UserProfile%\Documents (pour Windows Vista), puis cliquez sur Sélectionner un dossier.

  7. Dans la boîte de dialogue Nouveau projet, vérifiez que la zone Créer un répertoire pour la solution case activée n’est pas sélectionnée.

  8. Cliquez sur OK.

    Visual Studio ajoute le projet AdventureWorksDataSet à Explorateur de solutions et ouvre le fichier de code Class1.cs ou Class1.vb.

  9. Dans Explorateur de solutions, cliquez avec le bouton droit sur Class1.cs ou Class1.vb, puis cliquez sur Supprimer. Vous n’avez pas besoin de ce fichier pour cette procédure pas à pas.

Définir un jeu de données dans le projet de bibliothèque de classes

Définissez un jeu de données typé qui contient des données de la base de données AdventureWorksLT pour SQL Server 2005. Plus loin dans cette procédure pas à pas, vous allez référencer ce jeu de données à partir d’un projet de classeur Excel et d’un projet d’application console.

Le jeu de données est un jeu de données typé qui représente les données de la table Product de la base de données AdventureWorksLT. Pour plus d’informations sur les jeux de données typés, consultez Outils de jeu de données dans Visual Studio.

Pour définir un jeu de données typé dans le projet de bibliothèque de classes

  1. Dans Explorateur de solutions, cliquez sur le projet AdventureWorksDataSet.

  2. Si la fenêtre Sources de données n’est pas visible, affichez-la dans la barre de menus, en choisissant Afficher>d’autres sources de données Windows>.

  3. Choisissez Ajouter une nouvelle source de données pour démarrer l' Assistant Configuration de source de données.

  4. Cliquez sur Base de données, puis sur Suivant.

  5. Si vous disposez d’une connexion existante à la base de données AdventureWorksLT, choisissez cette connexion, puis cliquez sur Suivant.

    Sinon, cliquez sur Nouvelle connexionet utilisez la boîte de dialogue Ajouter une connexion pour créer la connexion. Pour plus d’informations, consultez Ajouter de nouvelles connexions.

  6. Dans la page Enregistrer la chaîne de connexion dans le fichier de configuration de l’application , cliquez sur Suivant.

  7. Dans la page Choisir vos objets de base de données, développez Tables et sélectionnez Product (SalesLT).

  8. Cliquez sur Terminer.

    Le fichier AdventureWorksLTDataSet.xsd est ajouté au projet AdventureWorksDataSet . Ce fichier définit les éléments suivants :

    • Un dataset typé nommé AdventureWorksLTDataSet. Ce jeu de données représente le contenu de la table Product dans la base de données AdventureWorksLT.

    • TableAdapter nommé ProductTableAdapter. Ce TableAdapter peut être utilisé pour lire et écrire des données dans le AdventureWorksLTDataSet. Pour plus d’informations, consultez la vue d’ensemble de TableAdapter.

      Vous utiliserez ces deux objets ultérieurement dans cette procédure pas à pas.

  9. Dans Explorateur de solutions, cliquez avec le bouton droit sur AdventureWorksDataSet, puis cliquez sur Générer.

    Vérifiez que le projet se génère sans erreur.

Créer un projet de classeur Excel

Créez un projet de classeur Excel pour l’interface des données. Plus loin dans cette procédure pas à pas, vous allez créer un ListObject élément qui affiche les données, et vous allez ajouter une instance du jeu de données au cache de données dans le classeur.

Pour créer le projet de classeur Excel

  1. Dans Explorateur de solutions, cliquez avec le bouton droit sur la solution AdventureWorksDataSet, pointez sur Ajouter, puis cliquez sur Nouveau projet.

  2. Dans le volet modèles, développez Visual C# ou Visual Basic, puis développez Bureau.

  3. Sous le nœud Bureau développé, sélectionnez le nœud 2010.

  4. Dans la liste des modèles de projet, sélectionnez le projet classeur Excel.

  5. Dans la zone Nom , tapez AdventureWorksReport. Ne modifiez pas l’emplacement.

  6. Cliquez sur OK.

    L' Assistant Projet Visual Studio Tools pour Office s'ouvre.

  7. Vérifiez que créer un document est sélectionné, puis cliquez sur OK.

    Visual Studio ouvre le classeur AdventureWorksReport dans le concepteur et ajoute le projet AdventureWorksReport à Explorateur de solutions.

Ajouter le jeu de données aux sources de données dans le projet de classeur Excel

Avant de pouvoir afficher le jeu de données dans le classeur Excel, vous devez d’abord ajouter le jeu de données aux sources de données dans le projet de classeur Excel.

Pour ajouter le jeu de données aux sources de données dans le projet de classeur Excel

  1. Dans Explorateur de solutions, double-cliquez sur Sheet1.cs ou Sheet1.vb sous le projet AdventureWorksReport.

    Le classeur s’ouvre dans le concepteur.

  2. Dans le menu Données , cliquez sur Ajouter une nouvelle source de données.

    L’Assistant Configuration de source de données s’ouvre.

  3. Cliquez sur Objet, puis sur Suivant.

  4. Dans la page Sélectionner l’objet à lier , cliquez sur Ajouter une référence.

  5. Sous l’onglet Projets , cliquez sur AdventureWorksDataSet , puis sur OK.

  6. Sous l’espace de noms AdventureWorksDataSet de l’assembly AdventureWorksDataSet , cliquez sur AdventureWorksLTDataSet , puis sur Terminer.

    La fenêtre Sources de données s’ouvre et AdventureWorksLTDataSet est ajoutée à la liste des sources de données.

Créer un ListObject lié à une instance du jeu de données

Pour afficher le jeu de données dans le classeur, créez un ListObject jeu de données lié à une instance du jeu de données. Pour plus d’informations sur la liaison de contrôles à des données, consultez Lier des données à des contrôles dans Bureau solutions.

Pour créer un ListObject lié à une instance du jeu de données

  1. Dans la fenêtre Sources de données, développez le nœud AdventureWorksLTDataSet sous AdventureWorksDataSet.

  2. Sélectionnez le nœud Produit , cliquez sur la flèche déroulante qui s’affiche, puis sélectionnez ListObject dans la liste déroulante.

    Si la flèche déroulante n’apparaît pas, vérifiez que le classeur est ouvert dans le concepteur.

  3. Faites glisser le tableau Product vers la cellule A1.

    Un ListObject contrôle nommé productListObject est créé dans la feuille de calcul, en commençant par la cellule A1. En même temps, un objet dataset nommé adventureWorksLTDataSet et un BindingSource nommé productBindingSource sont ajoutés au projet. Le ListObject est lié au BindingSource, qui est lui-même lié à l’objet dataset.

Ajouter le jeu de données au cache de données

Pour activer le code en dehors du projet de classeur Excel pour accéder au jeu de données dans le classeur, vous devez ajouter le jeu de données au cache de données. Pour plus d’informations sur le cache de données, consultez Les données mises en cache dans les personnalisations au niveau du document et les données de cache.

Pour ajouter le jeu de données au cache de données

  1. Dans le concepteur, cliquez sur adventureWorksLTDataSet.

  2. Dans la fenêtre Propriétés , définissez la propriété Modificateurs sur Public.

  3. Définissez la propriété CacheInDocument sur True.

Initialiser le jeu de données dans le classeur

Avant de pouvoir récupérer les données à partir du jeu de données mis en cache à l’aide de l’application console, vous devez d’abord remplir le jeu de données mis en cache avec des données.

Pour initialiser le jeu de données dans le classeur

  1. Dans Explorateur de solutions, cliquez avec le bouton droit sur le fichier Sheet1.cs ou Sheet1.vb, puis cliquez sur Afficher le code.

  2. Remplacez le gestionnaire d'événements Sheet1_Startup par le code suivant. Ce code utilise une instance de la ProductTableAdapter classe définie dans le projet AdventureWorksDataSet pour remplir le jeu de données mis en cache avec des données, s’il est actuellement vide.

    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);
        }
    }
    

Point de contrôle

Générez et exécutez le projet de classeur Excel pour vous assurer qu’il compile et s’exécute sans erreur. Cette opération remplit également le jeu de données mis en cache et enregistre les données dans le classeur.

Pour générer et exécuter le projet

  1. Dans Explorateur de solutions, cliquez avec le bouton droit sur le projet AdventureWorksReport, choisissez Déboguer, puis cliquez sur Démarrer une nouvelle instance.

    Le projet est généré et le classeur s’ouvre dans Excel. Vérifiez les éléments suivants :

    • Remplissages ListObject avec des données.

    • La valeur de la colonne ListPrice pour la première ligne du ListObject fichier est 1431.5. Plus loin dans cette procédure pas à pas, vous allez utiliser une application console pour modifier les valeurs de la colonne ListPrice .

  2. Enregistrez le classeur. Ne modifiez pas le nom de fichier ou l’emplacement du classeur.

  3. Fermez Excel.

Créer un projet d’application console

Créez un projet d’application console à utiliser pour modifier les données dans le jeu de données mis en cache dans le classeur.

Pour créer le projet d’application console

  1. Dans Explorateur de solutions, cliquez avec le bouton droit sur la solution AdventureWorksDataSet, pointez sur Ajouter, puis cliquez sur Nouveau projet.

  2. Dans le volet Types de projets, développez Visual C# ou Visual Basic, puis cliquez sur Windows.

  3. Dans le volet Modèles, sélectionnez Application console.

  4. Dans la zone Nom , tapez DataWriter. Ne modifiez pas l’emplacement.

  5. Cliquez sur OK.

    Visual Studio ajoute le projet DataWriter à Explorateur de solutions et ouvre le fichier de code Program.cs ou Module1.vb.

Modifier des données dans le jeu de données mis en cache à l’aide de l’application console

Utilisez la ServerDocument classe de l’application console pour lire les données dans un objet local AdventureWorksLTDataSet , modifier ces données, puis les enregistrer dans le jeu de données mis en cache.

Pour modifier des données dans le jeu de données mis en cache

  1. Dans Explorateur de solutions, cliquez avec le bouton droit sur le projet DataWriter, puis cliquez sur Ajouter une référence.

  2. Sous l’onglet .NET , sélectionnez Microsoft.VisualStudio.Tools.Applications.

  3. Cliquez sur OK.

  4. Dans Explorateur de solutions, cliquez avec le bouton droit sur le projet DataWriter, puis cliquez sur Ajouter une référence.

  5. Sous l’onglet Projets , sélectionnez AdventureWorksDataSet, puis cliquez sur OK.

  6. Ouvrez le fichier Program.cs ou Module1.vb dans l’Éditeur de code.

  7. Ajoutez les instructions suivantes à l’aide (pour C#) ou Imports (pour Visual Basic) en haut du fichier de code.

    using Microsoft.VisualStudio.Tools.Applications;
    
  8. Ajoutez le code suivant à la méthode Main . Ce code déclare les objets suivants :

    • Instance du AdventureWorksLTDataSet type défini dans le projet AdventureWorksDataSet .

    • Chemin d’accès au classeur AdventureWorksReport dans le dossier de build du projet AdventureWorksReport .

    • Objet ServerDocument à utiliser pour accéder au cache de données dans le classeur.

      Remarque

      Le code suivant suppose que vous utilisez un classeur qui a l’extension de fichier .xlsx . Si le classeur de votre projet a une extension de fichier différente, modifiez le chemin d’accès si nécessaire.

      AdventureWorksDataSet.AdventureWorksLTDataSet productDataSet =
          new AdventureWorksDataSet.AdventureWorksLTDataSet();
      string workbookPath = System.Environment.GetFolderPath(
          Environment.SpecialFolder.MyDocuments) +
          @"\AdventureWorksReport\bin\Debug\AdventureWorksReport.xlsx";
      ServerDocument serverDocument1 = null;
      

  9. Ajoutez le code suivant à la Main méthode, après le code que vous avez ajouté à l’étape précédente. Ce code effectue les tâches suivantes :

    • Il utilise la CachedData propriété de la ServerDocument classe pour accéder au jeu de données mis en cache dans le classeur.

    • Il lit les données du jeu de données mis en cache dans le jeu de données local.

    • Elle modifie la ListPrice valeur de chaque produit dans la table Product du jeu de données.

    • Il enregistre les modifications apportées au jeu de données mis en cache dans le classeur.

      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. Dans Explorateur de solutions, cliquez avec le bouton droit sur le projet DataWriter, pointez sur Déboguer, puis cliquez sur Démarrer une nouvelle instance.

    L’application console affiche les messages pendant qu’elle lit le jeu de données mis en cache dans le jeu de données local, modifie les prix du produit dans le jeu de données local et enregistre les nouvelles valeurs dans le jeu de données mis en cache. Appuyez sur Entrée pour fermer l'application.

Tester le classeur

Lorsque vous ouvrez le classeur, le ListObject classeur affiche maintenant les modifications apportées à la ListPrice colonne de données dans le jeu de données mis en cache.

Pour tester le classeur

  1. Fermez le classeur AdventureWorksReport dans le concepteur Visual Studio, s’il est toujours ouvert.

  2. Ouvrez le classeur AdventureWorksReport qui se trouve dans le dossier de build du projet AdventureWorksReport . Par défaut, le dossier de build se trouve à l’un des emplacements suivants :

    • %UserProfile%\Mes documents\AdventureWorksReport\bin\Debug (pour Windows XP et versions antérieures)

    • %UserProfile%\Documents\AdventureWorksReport\bin\Debug (pour Windows Vista)

  3. Vérifiez que la valeur de la colonne ListPrice pour la première ligne du fichier ListObject est maintenant 1574.65.

  4. Fermez le classeur.