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 :
Une édition de Visual Studio qui inclut les outils de développement Microsoft Office. Pour plus d’informations, consultez Configurer un ordinateur pour développer des solutions Bureau.
Excel 2010 .
Accès à une instance en cours d’exécution de Microsoft SQL Server ou de Microsoft SQL Server Express avec l’exemple de base de données AdventureWorksLT attaché à celui-ci. Vous pouvez télécharger la base de données AdventureWorksLT à partir du dépôt GitHub d’exemples SQL Server. Pour plus d’informations sur l’attachement d’une base de données, consultez les rubriques suivantes :
Pour attacher une base de données à l’aide de SQL Server Management Studio ou DE SQL Server Management Studio Express, consultez Comment : attacher une base de données (SQL Server Management Studio).
Pour attacher une base de données à l’aide de la ligne de commande, consultez Comment : attacher un fichier de base de données à SQL Server Express.
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
Démarrez Visual Studio.
Dans le menu Fichier , pointez sur Nouveau, puis cliquez sur Projet.
Dans le volet modèles, développez Visual C# ou Visual Basic, puis cliquez sur Windows.
Dans la liste des modèles de projet, sélectionnez Bibliothèque de classes.
Dans la zone Nom , tapez AdventureWorksDataSet.
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.
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.
Cliquez sur OK.
Visual Studio ajoute le projet AdventureWorksDataSet à Explorateur de solutions et ouvre le fichier de code Class1.cs ou Class1.vb.
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
Dans Explorateur de solutions, cliquez sur le projet AdventureWorksDataSet.
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>.
Choisissez Ajouter une nouvelle source de données pour démarrer l' Assistant Configuration de source de données.
Cliquez sur Base de données, puis sur Suivant.
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.
Dans la page Enregistrer la chaîne de connexion dans le fichier de configuration de l’application , cliquez sur Suivant.
Dans la page Choisir vos objets de base de données, développez Tables et sélectionnez Product (SalesLT).
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 leAdventureWorksLTDataSet
. Pour plus d’informations, consultez la vue d’ensemble de TableAdapter.Vous utiliserez ces deux objets ultérieurement dans cette procédure pas à pas.
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
Dans Explorateur de solutions, cliquez avec le bouton droit sur la solution AdventureWorksDataSet, pointez sur Ajouter, puis cliquez sur Nouveau projet.
Dans le volet modèles, développez Visual C# ou Visual Basic, puis développez Bureau.
Sous le nœud Bureau développé, sélectionnez le nœud 2010.
Dans la liste des modèles de projet, sélectionnez le projet classeur Excel.
Dans la zone Nom , tapez AdventureWorksReport. Ne modifiez pas l’emplacement.
Cliquez sur OK.
L' Assistant Projet Visual Studio Tools pour Office s'ouvre.
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
Dans Explorateur de solutions, double-cliquez sur Sheet1.cs ou Sheet1.vb sous le projet AdventureWorksReport.
Le classeur s’ouvre dans le concepteur.
Dans le menu Données , cliquez sur Ajouter une nouvelle source de données.
L’Assistant Configuration de source de données s’ouvre.
Cliquez sur Objet, puis sur Suivant.
Dans la page Sélectionner l’objet à lier , cliquez sur Ajouter une référence.
Sous l’onglet Projets , cliquez sur AdventureWorksDataSet , puis sur OK.
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
Dans la fenêtre Sources de données, développez le nœud AdventureWorksLTDataSet sous AdventureWorksDataSet.
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.
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
Dans le concepteur, cliquez sur adventureWorksLTDataSet.
Dans la fenêtre Propriétés , définissez la propriété Modificateurs sur Public.
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
Dans Explorateur de solutions, cliquez avec le bouton droit sur le fichier Sheet1.cs ou Sheet1.vb, puis cliquez sur Afficher le code.
Remplacez le gestionnaire d'événements
Sheet1_Startup
par le code suivant. Ce code utilise une instance de laProductTableAdapter
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
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 .
Enregistrez le classeur. Ne modifiez pas le nom de fichier ou l’emplacement du classeur.
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
Dans Explorateur de solutions, cliquez avec le bouton droit sur la solution AdventureWorksDataSet, pointez sur Ajouter, puis cliquez sur Nouveau projet.
Dans le volet Types de projets, développez Visual C# ou Visual Basic, puis cliquez sur Windows.
Dans le volet Modèles, sélectionnez Application console.
Dans la zone Nom , tapez DataWriter. Ne modifiez pas l’emplacement.
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
Dans Explorateur de solutions, cliquez avec le bouton droit sur le projet DataWriter, puis cliquez sur Ajouter une référence.
Sous l’onglet .NET , sélectionnez Microsoft.VisualStudio.Tools.Applications.
Cliquez sur OK.
Dans Explorateur de solutions, cliquez avec le bouton droit sur le projet DataWriter, puis cliquez sur Ajouter une référence.
Sous l’onglet Projets , sélectionnez AdventureWorksDataSet, puis cliquez sur OK.
Ouvrez le fichier Program.cs ou Module1.vb dans l’Éditeur de code.
Ajoutez les instructions suivantes à l’aide (pour C#) ou Imports (pour Visual Basic) en haut du fichier de code.
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;
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(); }
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
Fermez le classeur AdventureWorksReport dans le concepteur Visual Studio, s’il est toujours ouvert.
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)
Vérifiez que la valeur de la colonne ListPrice pour la première ligne du fichier ListObject est maintenant 1574.65.
Fermez le classeur.