2009-03-18 7 views
4

J'ai une grande quantité de données à insérer dans une feuille de calcul d'un classeur Excel existant. Le classeur Excel contiendra d'autres feuilles de calcul contenant des calculs et un tableau croisé dynamique. Les données peuvent contenir jusqu'à 60 000 lignes et plus de 30 colonnes. Cette solution doit fonctionner à la fois pour Excel 2003 et Excel 2007.Charger par programme le fichier CSV dans la feuille de calcul Excel (Delphi 7)

L'utilisation de l'objet Excel OLE est trop lente. Nous essayons donc de charger les données à partir d'un fichier CSV. Nous avons mis au point une méthode pour charger les données en plaçant les données dans le presse-papiers, puis en les collant dans la feuille de calcul. Je pense que c'est un peu un kludge. Existe-t-il un autre moyen de charger un fichier CSV dans une feuille de calcul par programme? Ou peut-être une solution différente?


Mise à jour: Nous avons été claqués avec une autre tâche avant que nous puissions étudier complètement les réponses. Nous devrions pouvoir y revenir dans quelques semaines. Je serai sûr de mettre à jour à nouveau quand nous reviendrons à cette tâche.

Merci pour toutes les réponses à ce jour!

Répondre

0

vous pouvez charger le csv dans listview ou usin fournisseur OLEDB pour le charger sur DBGrid, puis l'exporter au format de fichier xls en utilisant le composant TMxExport de Max Composants:

Max Components

+0

Malheureusement, cela semble écraser le classeur Excel. Nous aurons un tableau croisé dynamique ainsi que d'autres formules dans un fichier existant. – mreith

1

Toute chance que vous pouvez laisser tomber le exigence pour cela de travailler avec Office 2003? J'aurais recommandé le Open XML Format SDK. Il vous permet de lier des assemblys de code géré à des feuilles de calcul qui peuvent gérer des événements tels qu'Open ou Close, lire et écrire sur des cellules dans le document, entre autres choses. Vous pouvez également l'utiliser pour manipuler des documents XSLX à partir d'une application. Tout à fait lisse, en fait.

Comme cela ne fonctionnera pas pour vous, qu'en est-il de l'écriture d'une macro qui extrait le fichier CSV lors du chargement de la feuille de calcul?

+0

Les exigences concernent Office 2003 et les versions ultérieures. Cela aurait résolu un certain nombre d'autres problèmes que nous avons également. La macro pourrait être une possibilité; Je vais devoir voir si nous pouvons fonctionner sous la sécurité macro réduite. – mreith

0

Avez-vous essayé de lier le fichier csv directement dans la feuille de calcul.

Aller aux données -> Importer des données externes -> Importer des données changer le type de fichier « Fichiers texte »

Vous pouvez ensuite actualiser la feuille de calcul lorsque la csv est mise à jour.

NOTE: Je n'ai pas fait cela avec le volume de données que vous avez indiqué, si YMMV

+0

C'est quelque chose que nous allons essayer. Je pense que le CSV devrait être présent avec le cahier de travail. Je ne suis pas sûr que ce soit quelque chose que nous puissions faire, mais cela vaut la peine d'être examiné. – mreith

0

En fait, il y a une manière qui est assez rapide, assez vieux technologie (nowdays), mais est probablement le plus rapide.

Il est ADO ou pour les versions antérieures DAO (note non ADO.NET)

Vous pouvez lire un fichier CSV à l'aide ADO et le moteur JET pour obtenir les données dans un jeu d'enregistrements ADO, puis une plage Excel objet a CopyFromRecordSet méthode qui va copier (très rapide) à partir du jeu d'enregistrements ADO (ou DAO).

http://msdn.microsoft.com/en-us/library/aa165427(office.10).aspx

+0

C'est quelque chose que nous allons certainement vérifier. – mreith

2

XLSReadWrite est un composant qui peut lire et écrire des fichiers Excel de Delphi. Il est rapide et prend en charge Excel 2003 et 2007. Vous pouvez créer de nouveaux fichiers Excel ainsi qu'ouvrir ceux existants et les ajouter/modifier.

Vous n'avez pas non plus besoin d'installer Excel pour pouvoir l'utiliser.

Voir http://www.axolot.com/components/xlsrwii20.htm

+0

C'est certainement quelque chose que nous allons examiner. Merci. – mreith

-1

Vous pouvez essayer d'utiliser Tab Separated Values ​​au lieu de CSV - que vous suffit de coller ce dans Excel :)

+0

Nous faisons déjà quelque chose de très similaire maintenant. Il semble un peu un kludge de coller du texte dans Excel à partir du presse-papiers. S'il n'y a pas d'autres choix viables, nous pouvons le faire. – mreith

+0

La question porte sur CSV, donc les valeurs séparées par des tabulations ne sont pas pertinentes. Il demande également de le faire dans le code, donc une suggestion pour le coller à partir du presse-papiers est également inutile. Votre réponse est comme dire à quelqu'un qui demande comment résoudre un problème avec son PC pour acheter un Mac à la place. Ce n'est pas significatif ou utile pour résoudre le problème. –

Questions connexes