Est-il possible de convertir par lots des csv en xls en utilisant une macro?
J'ai une grande quantité de csv
les fichiers que j'ai besoin de .xls
format. Est-il possible d'exécuter une conversion en lots avec une macro ou mieux de le faire avec une autre langue?
J'ai utilisé ce code http://www.ozgrid.com/forum/showthread.php?t=71409&p=369573#post369573 pour faire référence à mon répertoire, mais je ne suis pas sûr de la commande pour ouvrir chaque fichier et de les enregistrer. Voici ce que j'ai:
Sub batchconvertcsvxls()
Dim wb As Workbook
Dim CSVCount As Integer
Dim myVar As String
myVar = FileList("C:\Documents and Settings\alistairw\My Documents\csvxlstest")
For i = LBound(myVar) To UBound(myVar)
With wb
Application.Workbooks.OpenText 'How do I reference the myvar string ?
wb.SaveAs '....
End With
Next
End Sub
Function FileList(fldr As String, Optional fltr As String = "*.*") As Variant
Dim sTemp As String, sHldr As String
If Right$(fldr, 1) <> "\" Then fldr = fldr & "\"
sTemp = Dir(fldr & fltr)
If sTemp = "" Then
FileList = Split("No files found", "|") 'ensures an array is returned
Exit Function
End If
Do
sHldr = Dir
If sHldr = "" Then Exit Do
sTemp = sTemp & "|" & sHldr
Loop
FileList = Split(sTemp, "|")
End Function
Edit: Les fichiers sont .txt des fichiers formatés au format csv
Un lien intéressant : softinterface.com/... Si vous effectuez une recherche Google il y a d'autres logiciels qui le font déjà. Toutefois, si vous faites cela comme un exercice alors ignorer le lien 🙂
OriginalL'auteur Alistair Weir | 2012-05-29
Vous devez vous connecter pour publier un commentaire.
Dans beaucoup moins de lignes de code, cela devrait vous obtenez ce que vous voulez. Toutefois, je dirai ceci peut ne pas être le moyen le plus rapide pour y arriver, parce que vous êtes à l'ouverture, l'enregistrement et la fermeture du classeur à chaque fois. Je cherche un moyen plus rapide, mais j'ai oublié la méthode sur le dessus de ma tête.
** Mise à JOUR **
vous avez besoin de la bonne fileformat énumération pour une .fichier xls. Je pense que c'est 50, mais vous pouvez vérifier ici Fichier Excel De Type Énumération, si elle ne l'est pas.
C'est tout bon. Il suffit de changer toute référence à l' .csv ci-dessus .txt.
également ajouter cette ligne avant de "Boucle" strFile = Dir
OriginalL'auteur Scott Holtzman
En combinant le code donné par Scott Holtzman et "ExcelFreak', la conversion fonctionne très bien. Le code final ressemble à quelque chose comme ceci:
L'ouverture de la conversion .fichier xls lance un avertissement à chaque fois:
"Le fichier que vous essayez d'ouvrir, 'nom du fichier', est dans un format différent de celui spécifié par l'extension de fichier. Vérifiez que le fichier n'est pas corrompu et provient d'une source fiable avant de l'ouverture du fichier. Voulez-vous ouvrir le fichier maintenant?"
En cliquant sur Oui, puis ouvre la .fichier xls.
Est-il un moyen de se débarrasser de ce message d'avertissement? Excel lance un avertissement à chaque fois que l' .xls fichier est ouvert.
Vous pouvez également utiliser
wb.SaveAs Replace(wb.FullName, ".csv", ".xlsx"), 51 'UPDATE:
qui va enregistrer sous Excel 2007 format et de se débarrasser de l'avertissement lorsque vous ouvrez le fichier.OriginalL'auteur Rishab Jain
Le Code de Scott Holtzman presque fait pour moi. J'ai dû faire deux changements pour le faire fonctionner:
Il a oublié d'ajouter la ligne qui fait notre boucle de continuer avec le fichier suivant. La dernière ligne avant la Boucle doit lire
strFile = Dir
Les Classeurs.Méthode ouverte de ne pas lire mes fichiers CSV comme prévu (l'ensemble de la ligne a fini par être de texte dans la première cellule). Quand j'ai ajouté le paramètre
Local:=True
il a travaillé:Set wb = Workbooks.Open(Filename:=strDir & strFile, Local:=True)
OriginalL'auteur ExcelFreak
Cela fonctionne correctement au moins sur Excel 2013. À l'aide de FileFormat:=xlExcel8 paramètre au lieu de le type de balise de 50 crée des fichiers qui s'ouvrent sans sécurité nags.
Sous CSV_to_XLS()
Dim wb Comme Classeur
Dim strFile Comme une Chaîne de caractères, strDir Comme une Chaîne de caractères
strDir = "C:\temp\"
strFile = Dir(strDir & "*.csv")
Faire Tout strFile <> ""
Boucle
End Sub
OriginalL'auteur RaaonGB
C'était une bonne question et j'ai trouvé sur internet plusieurs réponses. Juste faire de petits changements (je ne pouvais pas modifier les codes déjà publié), je pouvais faire bouger les choses un peu mieux:
OriginalL'auteur Bartolomeo Rodas