6
votes

Lire des feuilles de calcul Excel avec Delphes

J'ai besoin de lire et d'écrire à des feuilles de calcul Excel en utilisant Delphi 2010. Rien de fantaisie. Il suffit de lire et d'écrire des valeurs de cellules spécifiques et de gammes sur différentes feuilles. Doit fonctionner sans avoir d'Excel installé et supportez Excel 2007.

Certaines choses que j'ai regardées:

  • J'ai essayé d'utiliser Ado , qui Fonctionne bien pour la sélection de tout dans une feuille entière, mais je n'ai pas eu beaucoup de chance de lire des cellules ou des gammes spécifiques.

  • Nativeexcel semblait prometteuse, mais cela ne semble pas être en développement actif, et ils ne répondent pas aux e-mails.

  • Axolot a quelques produits. Le produit principal semble être très fonctionnel, mais est cher. Ils ont une version Lite, mais cela ne prend pas en charge Delphi 2010.

    Toute recommandation? Gratuit serait génial, mais je suis ouvert à une solution commerciale tant qu'elle est fiable et bien soutenue.


2 commentaires

N'excel pas doit être installé pour pouvoir utiliser ADO?


@Lieven: Nope, juste ado.


10 Réponses :


1
votes

Ne vous inquiétez pas avec la version XLSMINI (LITE) d'Axolot. Je n'ai pas encore acheté l'une d'entre elles, mais j'ai posé des questions sur l'appui Excel 2007 au début de 2008 et la LARS m'a dit que XLSmini était basée sur XLSREADWRITIII et que les deux seraient mis à jour avec l'assistance Excel 2007 en même temps. Xlsreadwriteii a eu une assistance Excel 2007 depuis avril 2008; Xlsmini ne l'a toujours pas.


1 commentaires

Je suis content de le demander. De leur description, j'ai eu l'idée qu'il avait le même support que xlsreadwriteiii. J'attends de les entendre.



7
votes

TMS flexcel - Je sais que cela ressemble à un composant de reporting pour Excel (ce qu'il fait très bien et est un outil très pratique pour avoir dans votre boîte à outils), mais il comprend également des composants pour la lecture et l'affichage des fichiers Excel. J'ai été très impressionné par la façon dont Adrian Gallero semble connaître l'API Excel, y compris Excel 2007.

http://www.tmssoftware.com/site/flexcel.asp < / p>

Pas gratuit bien sûr, mais à 75 euros, je pense que c'est bien de valeur.


2 commentaires

Très agréable. Malheureusement, Flexcel n'apprécie pas actuellement Excel 2007.


C'est au début des premières étapes, mais TMS est enfin en train de préparer leur prochain communiqué avec le support XSLX. TMSSoftware.com/site/blog.asp?post=214



7
votes

J'ai eu de très bonne chance avec ADO, à condition que la feuille Excel soit une disposition de ligne / colonne assez simple.

La clé avec l'utilisation de ADO, j'ai trouvé, traite la feuille Excel comme une base de données. Si vos feuilles Excel sont principalement des dispositions de rangée droite et de colonne, traitez simplement les lignes comme des enregistrements de base de données et les colonnes en tant que champs. Naviguez d'abord à la ligne souhaitée en recherchant une valeur de colonne particulière (champ) (de préférence quelque chose d'unique), puis lisez la cellule souhaitée dans cette ligne en faisant référence au champ Nom de la colonne.

Si vos feuilles Excel sont plus libres, alors ce sera plus difficile.


3 commentaires

Les feuilles de calcul n'ont pas de disposition cohérente. Même dans ce cas, si j'essaie de lire des cellules spécifiques ou une gamme, ouvrez une feuille de calcul Excel 2007 ou parfois même le regarder drôle, j'aurais une exception: "Impossible de trouver Insemble installable ISAM".


Cela pourrait être un problème avec votre chaîne de connexion. Si vous souhaitez poursuivre l'option ADO, publiez ici la chaîne de connexion ici. Je suis loin d'un expert, mais si je ne suis pas capable de repérer quelque chose, peut-être que quelqu'un d'autre ici sera.


ConnectionsStrings.com m'a découvert d'une chaîne de raccordement lié plusieurs fois.



1
votes

Avec une bonne chance, j'ai utilisé Axolot depuis quelques années maintenant. Le forum de soutien n'est pas vraiment débordant de messages, mais peut-être que c'est parce que cela fonctionne si bien?


1 commentaires

Qu'en est-il d'avertissement de Craig que Xlsmini n'est pas à jour?



3
votes

N'écrivez pas Nativeexcel. Je l'ai utilisé depuis quelques années avec d'excellents résultats. C'est rapide et polyvalent. Je l'utilise pour produire une feuille de calcul multi-pages bien formatée avec des vitres congelées, des formules dans des cellules et des données de la base de données d'une cliente à utiliser pour entrer, puis de me renvoyer. Mes clients étaient vraiment ravis quand ils ont eu la première tableur de moi parce que cela a considérablement réduit leur charge de travail et elle était assez intuitive pour eux d'utiliser.

Je ne sais pas pourquoi ils ne vous ont pas répondu parce que j'ai mis à jour leur colis au moins deux fois au cours des deux dernières années. Lorsque ma licence expire, j'ai vraiment l'intention de renouveler.


3 commentaires

Ce n'est pas juste moi. Quelqu'un demandait à ce sujet dans le groupe tiers de l'Embarcadero. Je suis heureux de leur donner un essai si elles sont toujours une préoccupation, mais je me méfie si elles ne répondent pas aux courriers électroniques de clients potentiels ou existants. Je vais essayer de nouveau.


Récemment acheté natifexcel et je dois dire que je suis s'il vous plaît avec la facilité d'utilisation et la fonctionnalité


Natifxml prend des coups de pied et vivant: ça marche bien avec Delphi Xe!



2
votes

Qu'est-ce qui aide vraiment, c'est si vous avez une sorte de contrôle sur la mise en page du fichier Excel.

J'ai construit une structure de test de l'unité et de l'acceptation entière dans laquelle les données et les contrôles de test sont tous contenus dans une feuille de calcul Excel.

J'ai fait tout à travers ADO. Vous pouvez limiter votre requête ADO SQL à une feuille entière, une plage nommée ou une gamme de la matière. À mon avis et à mon expérience, cette méthode est très puissante.

Deux choses qui m'ont fait des problèmes: 1. En fonction de la manière dont vos feuilles sont nommées, ADO pourrait ou ne pas les voir (à nouveau, si vous avez le contrôle de la mise en page, super!) 2. Faites attention au type de données ADO renvoie lorsque vous lisez les données I.E. Cela pourrait montrer des chiffres comme des chaînes. En effet, ADO essaie, IIRC, de deviner le type de données basé sur les premières lignes.

Disclaimer: Je n'ai jamais utilisé aucun des outils mentionnés ci-dessus. ADO a fait le tour pour moi et je me sens plus en contrôle depuis que j'ai écrit le code de mon cadre (sauvegarder la partie ADO évidemment ...).


2 commentaires

Je ne contrôle pas la mise en page des feuilles de calcul. Si j'essaie d'obtenir une plage arbitraire ou d'ouvrir une feuille de calcul de 2007, je reçois systématiquement une exception: "Impossible de trouver l'ISAM installable".


Avez-vous obtenu le travail avec un classeur simple et simple Excel? Si oui, il pourrait y avoir un problème avec cet ouvrage de 2007 en particulier. Si non, veuillez d'abord essayer un fichier Excel standard. Faites 100% sûr que votre chaîne de connexion est correctement formatée, un seul espace supplémentaire pourrait être le problème ...



0
votes

Je conseillerais d'aller chercher une option où vous n'avez pas besoin d'Excel installé sur la machine. Une fois, j'ai utilisé un composant qui pourrait facilement remplir certaines données dans une feuille sans avoir besoin d'Excel installé. Je ferais également la majeure partie du travail Excel dans la feuille Excel elle-même. Et utilisez simplement les composants pour remplir certaines données sur la feuille.

mon 2cts.


1 commentaires

C'est l'une des exigences de ma question.



2
votes

Bruce, j'ai utilisé le composant Axolot XLsReadwriteIII pour passer 10 ans maintenant. Cela a été très bon et leurs forums de soutien (tandis que Lite sur le contenu) semblent être assez bien contrôlés. La version xlsreadwriteIIII2 est aveuglante et prend en charge toutes sortes de choses comme des graphiques et des graphiques, des gammes nommées, d'ajouter des formules à la volée, de la mise en forme de cellules (y compris des bordures et des bordures, des cellules de fusion, une alignement verticale et horizontale, un dimensionnement de la colonne de largeur automatique, et ainsi de suite).

Je n'ai pas mis à niveau vers la dernière version (nous utilisons toujours xlsreadwriteii22) car nous pouvons toujours utiliser les fichiers de format Excel XP, et je n'ai pas utilisé le XLSmini du tout. Je peux dire vraiment de bonnes choses sur le produit complet, cependant; En fait, je viens de l'utiliser pour un couple d'exportation de base de données la semaine dernière.

Si vous décidez d'aller cette route, j'ai un tas de notes sur la façon de faire différentes choses qui pourraient être utiles; Si vous les voulez, déposez-moi une note. J'ai aussi une application Delphi 2007 qui montre simplement comment faire différentes formatage et alignements; En fait, j'ai reproduit un rapport existant et assez complexe à Excel avec tous les formats, frontières, etc. que je serais heureux de vous laisser avoir aussi.

Disclaimer: Je n'ai aucun lien avec Axolot ou l'un de leurs employés. Je suis juste un client très heureux qui a appris le produit dans un emploi précédent et j'ai été suffisamment impressionné pour l'acheter lorsque j'ai commencé mon actuel.


1 commentaires

Cela répond à ma question sur leur histoire de soutien. Malheureusement, XLSReadwriteIII est chère et je n'ai pas besoin de toutes les fonctionnalités. J'attends de les entendre à propos d'une version Delphi 2010 de Xlsmini qui prend en charge Excel 2007. Toujours pas bon marché, mais si cela me permet de faire le travail ...



3
votes

Je recommanderais Smimport / Smexport de http://www.scalabium.com

Mike a toujours été vraiment utile et rapide à répondre.


0 commentaires

1
votes

Vous pouvez utiliser une chaîne de connexion ADO comme http://www.connectionstrings.com/excel que d'inclure les options (dans la troisième onglet de la chaîne de connexion ADO): xxx pré>

à des fins de sécurité Microsoft prévenir les modifications (avec imex = 1) http://support.microsoft.com/kb/904953/fr Échantillon SQL (N'oubliez pas les supports): P>

YourADOConnection.Execute('SELECT * INTO aSheet IN "'+ExtractFilePath(ParamStr(0))+'Exported.xls" "Excel 8.0;" FROM YourTable');


0 commentaires