BoyCloser
Messages postés4Date d'inscriptionmardi 12 juin 2012StatutMembreDernière intervention15 juin 2012
-
12 juin 2012 à 17:55
BoyCloser
Messages postés4Date d'inscriptionmardi 12 juin 2012StatutMembreDernière intervention15 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:
BoyCloser
Messages postés4Date d'inscriptionmardi 12 juin 2012StatutMembreDernière intervention15 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.
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018211 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
Vous n’avez pas trouvé la réponse que vous recherchez ?
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018211 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
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.
BoyCloser
Messages postés4Date d'inscriptionmardi 12 juin 2012StatutMembreDernière intervention15 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