Ole Excel 2007 avec 2003

Signaler
Messages postés
4
Date d'inscription
mardi 12 juin 2012
Statut
Membre
Dernière intervention
15 juin 2012
-
Messages postés
4
Date d'inscription
mardi 12 juin 2012
Statut
Membre
Dernière intervention
15 juin 2012
-
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


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.

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 ?
Messages postés
4
Date d'inscription
mardi 12 juin 2012
Statut
Membre
Dernière intervention
15 juin 2012

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
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236
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
Messages postés
4
Date d'inscription
mardi 12 juin 2012
Statut
Membre
Dernière intervention
15 juin 2012

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...
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236
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

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.
Messages postés
4
Date d'inscription
mardi 12 juin 2012
Statut
Membre
Dernière intervention
15 juin 2012

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