Ole Excel 2007 avec 2003

BoyCloser Messages postés 4 Date d'inscription mardi 12 juin 2012 Statut Membre Dernière intervention 15 juin 2012 - 12 juin 2012 à 17:55
BoyCloser Messages postés 4 Date d'inscription mardi 12 juin 2012 Statut Membre Dernière intervention 15 juin 2012 - 15 juin 2012 à 20:26
J'ai un gros problème d'importation de données. Je reçois un fichier *.xlsx (dont je n'ai pas le controle du format), créer avec MS Excel 2007. Les données de ce fichier sont de type «single», mais le format d'affichage des cellules est en «integer» donc sans virgule flottante. Lorsque je me connecte au fichier pour importer les donnees, je reçois des integers, et lorsque j'ouvre le fichier avec excel(2003) et que j'execute mon application sur le fichier j'obtient des «Single» C'est pas très logique celon moi. J'utilise une connection de type:

"Provider= Microsoft.ACE.OLEDB.12.0;" & " Data Source=" & nomFichier & ";Extended Properties=""Excel 12.0;HDR=NO;IMEX=1;ImportMixedTypes=Text"""

La connection Jet 4.0 ne fonctionne pas à cause de ma version d'excel 2003 et du fichier en 2007.

J'ai une requete à la SQL pour importer les donnees.

Moi, j'aimerais obtenir les donnees avec le type SINGLE et sans être obligé d'ouvrir mon fichier avec Excel.

Merci d'avance!

8 réponses

Utilisateur anonyme
12 juin 2012 à 19:20
Bonjour,



Je reçois un fichier *.xlsx (dont je n'ai pas le controle du format), créer avec MS Excel 2007.



Pourquoi ne pas juste les ouvrir dans Excel 2003 avec un peu d'aide juste ici.
0
Utilisateur anonyme
13 juin 2012 à 02:24
Bonjour,

J'ai lu trop vite et je me suis planté.

Et si tu changes le format d'affichage pour le format general ou pour un autre format à virgule flottante avant d'importer avec OLE, tu obtiens quoi ?

Le problème est-il généralisé, ou limité aux nombres entiers ?

Et si tu mets csng(ton nombre) au nombre importé?

Ton nombre importé est-il tronqué ou arrondi ?

Juste au cas où : As-tu vérifié tes déclarations de variables ?
0
BoyCloser Messages postés 4 Date d'inscription mardi 12 juin 2012 Statut Membre Dernière intervention 15 juin 2012
13 juin 2012 à 15:52
Et si tu changes le format d'affichage pour le format general ou pour un autre format à virgule flottante avant d'importer avec OLE, tu obtiens quoi ?
- Lorsque je change le format, j'obtiens des singles sauf que l'importation se fait en plus de 45 secondes(Ce qui n'est pas resonable selon moi). En plus, étant donné que le fichier est en lecture seulement, je dois en faire une copie avant de le manipuler... ce qui entraine plusieurs exceptions à gérer.

Et si tu mets csng(ton nombre) au nombre importé?
- C'est déjà fait, mais ça ne change rien.

Ton nombre importé est-il tronqué ou arrondi ?
- Arrondi.

Juste au cas où : As-tu vérifié tes déclarations de variables ?
- Oui tout est en single.

Merci de m'aider
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
13 juin 2012 à 16:47
Bonjour,
Ton nombre importé est-il tronqué ou arrondi ?
- Arrondi.

Essaye d'importer tout en string et de ne "transtyper" qu'ensuite.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
BoyCloser Messages postés 4 Date d'inscription mardi 12 juin 2012 Statut Membre Dernière intervention 15 juin 2012
13 juin 2012 à 19:24
Essaye d'importer tout en string et de ne "transtyper" qu'ensuite.
- J'ai essayé cette façon de faire, mais ça ne fonctionne pas plus...

je suis ouvert à tout vos idées...
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
13 juin 2012 à 19:39
J'ai essayé cette façon de faire, mais ça ne fonctionne pas plus...

1) Avec quel code ?
2) quels strings obtiens-tu (parmi ceux qui posent problèmes) ? Montre nous en deux ou trois en exemple.

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
Utilisateur anonyme
13 juin 2012 à 19:57
Bonjour,

En fouillant un peu, j'ai trouvé cet article, mais je ne promets rien:


Tapez le texte de l'url ici.

Un problème du même ordre me revient en mémoire. L'assistant de publipostage de Word 2003 avait un problème de restitution de certaines données numériques par exemple des sommes d'argent, quand il utilisait OLEDB pour lire la source de données. Si mes souvenirs sont exacts, une des solutions était de remplacer la virgule comme symbole décimal par le point. Au point où tu es rendu, tu pourrais peut-être essayer cela.
0
BoyCloser Messages postés 4 Date d'inscription mardi 12 juin 2012 Statut Membre Dernière intervention 15 juin 2012
15 juin 2012 à 20:26
Voici une solution, c'est pas très «clean», mais ça fonctionne. Admettons que je contourne le problème un peu. L'avantage d'utiliser «2 connections» est que je réduit le temps d'extraction d'environs 15 secondes en utilisant OLE.

'Création de la connection OLE

Dim excelConnectOLE As OleDbConnection = _
New OleDbConnection(sConString)
Dim excelCommand As OleDbCommand = New OleDbCommand()
excelCommand.Connection = excelConnectOLE
Dim excelAdapter As OleDbDataAdapter = _
New OleDbDataAdapter(excelCommand)

'Préparation de l'ouverture d'Excel en arrière plan
Dim excelApp As Object
excelApp = CreateObject("Excel.Application")
'Désactivation des alertes Excel

excelApp.DisplayAlerts = False
excelApp.visible = False
'Ouverture du fichier dans Excel en arrière plan

excelApp.Workbooks.open(nomFichier)
'Ouverture de la connection OLE

excelConnectOLE.Open()

'******************************************************************
'Ma requête d'importation (Select *) à l'aide de la connection OLE
'******************************************************************
'Fermeture de la connection OLE
excelConnectOLE.Close()
'Fermeture du fichier Excel

excelApp.Workbooks.close()
'Fermeture d'Excel

excelApp.quit()

Si vous trouvez mieux je suis attentif...
Merci à tous
0
Rejoignez-nous