Exemple Simple de VSTO Excel à l'aide d'une feuille de calcul en tant que source de données
Je pense que je suis en cours d'exécution dans un cas de "la meilleure des réponses sont les plus difficiles à trouver", et je n'ai pas rencontré de toutes les recherches qui donnent ce à moi d'une manière simple. C'est pour Excel 2010 et VS 2010 à l'intérieur d'un VSTO (C#).
J'ai une feuille de calcul Excel qui contient 4 colonnes de données que je voudrais utiliser comme source pour un DataGridView. Quelqu'un peut-veuillez fournir le code C# extraits (1) l'obtention de données à partir d'une feuille de calcul et le remplissage d'un objet personnalisé avec elle? (2) la liaison de l'objet (comme un IEnumerable liste) pour un Datagridview et (3) certains fragments de code pour la mise à jour et de supprimer des fonctionnalités qui serait inhérent à la grille et le retour à la source de la feuille de calcul.
Je sais que je demande beaucoup de choses ici, mais une grande partie de la VSTO l'information semble être dis-jointes et pas toujours facile à trouver. Merci!
Je peux voir comment cela n'est pas clair dans ma question: je suis en train de travailler sur un Classeur Excel que mon projet. Donc, je suis en train de lire les données dans Excel lui-même. Je suppose que j'ai besoin d'un ListObject exemple à un certain point, mais je ne suis pas positif.
Sur le plan conceptuel VSTO seulement vous permet d'accéder au modèle objet d'Excel à partir de l'exécution du code managé dans le processus Excel. Donc, vous devrez orienter votre recherche pour le modèle objet d'Excel plutôt que de VSTO - la plupart des exemples sont en VBA, mais facile à porter sur le C#. Vous avez raison, un ListObject est probablement la meilleure façon d'aller.
OriginalL'auteur Unknown Coder | 2013-06-04
Vous devez vous connecter pour publier un commentaire.
Edit: Génial, je viens de remarqué que j'ai manqué une grande partie de votre question, obtenir des mises à jour et les suppressions de retour à la feuille de calcul. Je n'ai absolument aucune idée si c'est possible, mais je crois que c'est ma solution sans valeur. Je vais le laisser ici de toute façon, peut-être que ça peut aider d'une quelconque manière.
Pourquoi avez-vous besoin de VSTO? Autant que je sache VSTO est utilisé pour les compléments d'Office. Mais puisque vous voulez afficher les données dans un DataGridView, je suppose que vous avez une application WinForms qui devraient juste accès à un classeur. Dans ce cas, vous pouvez simplement ouvrir le classeur à l'aide d'Office de l'Interopérabilité. Il suffit d'ajouter une référence à Microsoft.Bureau de.Interop.Excel à votre projet et ajouter un
using Microsoft.Office.Interop.Excel;
déclaration.MSDN documentation de référence pour Excel Interop peut être trouvé ici: http://msdn.microsoft.com/en-us/library/ms262200%28v=office.14%29.aspx
Je vais vous donner la partie Excel, peut-être quelqu'un d'autre peut faire le reste.
Tout d'abord, ouvrez Excel et le classeur:
Puis obtenir en quelque sorte la feuille de calcul. Vous avez plusieurs possibilités:
Alors d'obtenir la plage correcte. Vous ne précisez pas la façon dont vous savez où le besoin de données est, donc je vais supposer qu'il est dans les colonnes fixes.
Obtenir les valeurs:
Que deux dimensions de l'objet tableau peut ensuite être utilisé comme une source de données pour votre DataGridView. Je n'ai pas utilisé WinForms pendant des années, donc je ne sais pas si vous pouvez le lier directement ou besoin d'abord d'obtenir les données dans un format spécifique.
Enfin fermer Excel:
Correctement fermer Excel après l'utilisation de l'Interopérabilité est une tâche elle-même parce que vous avez à faire assurez-vous que toutes les références à des objets COM qui ont été publiés. La façon la plus simple que j'ai trouvé à faire c'est de faire tout le travail à l'exception de l'ouverture et de la fermeture d'Excel et de le classeur (donc mon premier et dernier bloc de code) dans une autre méthode. Cela garantit que tous les objets COM utilisé dans cette méthode sont hors de portée lorsque
Quit
est appelé.OriginalL'auteur cremor
Mise à JOUR:
J'ai remplacé ma méthode précédente avec le code le plus récent pour accélérer la démarche.
System.Array
est très efficace et plus rapide à lire et lier les données à l'excel. Vous pouvez télécharger la démo de ce lien.J'ai développé VSTO application dans le Classeur Excel 2003. Il n'y a pas de grandes différences en termes de syntaxe,de sorte que vous pouvez l'utiliser en 2007 /2010 sans efforts.
Je ne sais pas quel événement que vous allez utiliser pour ouvrir la fenêtre d'affichage de données, donc je suis en supposant que vous utilisez.
Je vais utiliser Statique classeur objet déclaré dans Showdata.cs. Voici le code pour votre
Thisworkbook.cs
J'ai ajouté un Lien sur la feuille et il fera apparaître la fenêtre avec un datagridview.
//permet de supposer son 4 et 5 renvoyé par la méthode
chaîne strRange = "A1";
chaîne andRange = "D5";
Voici le formulaire qui permet à l'utilisateur d'afficher et de modifier des valeurs. J'ai ajouté méthode d'extensions et Chr() pour convertir numériques respectives, les alphabets qui viendra à portée de main.
OriginalL'auteur Sangram Nandkhile
c'est l'un des plus laids les codes que j'ai écrit, mais il fonctionnera comme une preuve de concept 🙂
J'ai créé un exemple de classeur comme ça
Fichier Excel contient exactement 50 lignes, ce qui explique la plage codés en dur sélecteurs.
Après avoir écrit cette partie de code reste est facile, il suffit de créer un formulaire, ajoutez un dataviewgrid, créer une source de données pour
MyExcelData
, créer une instance deMyExcelData
commevar data = new MyExcelData(pathToExcelFile);
et le lier à la grille.Code est moche, et a beaucoup d'hypothèses, mais il met en oeuvre vos exigences. Si vous ouvrez excel et programme, vous pouvez voir les mises à jour sur la grille sont répercutées sur excel après la cellule d'édition. ligne supprimée est également supprimé à partir d'excel. depuis je ne sais pas si vous avez des clés primaires de votre excel ou pas, j'ai utilisé la ligne de l'indice de ID.
BTW, je suis vraiment mauvais quand il s'agit de VSTO. donc si vous connaissez un meilleur moyen de l'ouvrir, modifier, enregistrer, veuillez m'en informer.
PS: j'aimerais utiliser des objets légers, mais il ajoute des complications inutiles.
OriginalL'auteur edokan
Donc dans le Sheet1_Startup événement
Vous auriez besoin pour passer à la cellule suivante puis
Pourrait utiliser cette.Gamme["A1", "A5"] - Mais alors vous êtes dans une liste. Je ne sais pas comment l'obtenir pour DS.. Désolé
Veuillez vérifier ma réponse à découvrir la manière de lire et d'écrire toute la gamme à la place de la lecture et de l'écriture de chaque cellule, un par un.
OriginalL'auteur juanvan