J'ai une feuille Excel qui contient des données dans la colonne A. Il y a beaucoup de caractères spéciaux dans les cellules. Lorsque j'enregistre la feuille au format .txt, j'obtiens des guillemets inversés au début de chaque ligne. J'ai essayé d'enregistrer le fichier au format .txt à la fois manuellement et par macro. Comment les supprimer ? Je ne suis pas en mesure de supprimer le site citations. Joindre une image
Réponses
Trop de publicités?Je vois que cette question a déjà reçu une réponse, mais je voulais proposer une alternative au cas où quelqu'un d'autre trouverait cela plus tard.
En fonction du délimiteur requis, il est possible de procéder ainsi sans écrire de code . La question originale ne donne pas de détails sur le type de sortie souhaité, mais voici une alternative :
Type de fichier PRN
L'option la plus simple consiste à enregistrer le fichier en tant que "Texte formaté (délimité par des espaces)". La ligne de code VBA ressemblerait à ceci :
ActiveWorkbook.SaveAs FileName:=myFileName, FileFormat:=xlTextPrinter, CreateBackup:=False
Dans Excel 2007, l'extension de fichier .prn est ajoutée à la fin du nom de fichier, mais elle peut être remplacée par .txt en renommant manuellement le fichier.
Dans Excel 2010, vous pouvez spécifier l'extension de fichier de votre choix dans la boîte de dialogue Enregistrer sous.
Une chose importante à noter : le nombre de délimiteurs utilisés dans le fichier texte est lié à la largeur de la colonne Excel.
Observez :
Devient :
Ce code fait ce que vous voulez.
LOGIQUE
- Sauvegarder le fichier comme un fichier délimité par des tabulations dans le répertoire temporaire de l'utilisateur.
- Lire le fichier texte en une seule fois
- Remplacer
""
avec des blancs et écrire dans le nouveau fichier en même temps.
CODE
Private Declare Function GetTempPath Lib "kernel32" Alias "GetTempPathA" _
(ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long
Private Const MAX_PATH As Long = 260
'~~> Change this where and how you want to save the file
Const FlName = "C:\Users\Siddharth Rout\Desktop\MyWorkbook.txt"
Sub Sample()
Dim tmpFile As String
Dim MyData As String, strData() As String
Dim entireline As String
Dim filesize As Integer
'~~> Create a Temp File
tmpFile = TempPath & Format(Now, "ddmmyyyyhhmmss") & ".txt"
ActiveWorkbook.SaveAs Filename:=tmpFile _
, FileFormat:=xlText, CreateBackup:=False
'~~> Read the entire file in 1 Go!
Open tmpFile For Binary As #1
MyData = Space$(LOF(1))
Get #1, , MyData
Close #1
strData() = Split(MyData, vbCrLf)
'~~> Get a free file handle
filesize = FreeFile()
'~~> Open your file
Open FlName For Output As #filesize
For i = LBound(strData) To UBound(strData)
entireline = Replace(strData(i), """", "")
'~~> Export Text
Print #filesize, entireline
Next i
Close #filesize
MsgBox "Done"
End Sub
Function TempPath() As String
TempPath = String$(MAX_PATH, Chr$(0))
GetTempPath MAX_PATH, TempPath
TempPath = Replace(TempPath, Chr$(0), "")
End Function
SNAPSHOTS
Manuel de travail réel
Après la sauvegarde
Ummm, que penses-tu de ça.
Copiez vos cellules.
Ouvrez le Bloc-notes.
Pâte.
Ne cherchez pas de guillemets, pas de guillemets inversés, et conservez les caractères spéciaux, ce qui est ce que l'OP a demandé. Il est également délimité par des retours chariot, comme sur l'image ci-jointe, ce que le PO n'a pas mentionné comme une mauvaise chose (ou une bonne chose).
Je ne sais pas vraiment pourquoi une réponse simple, qui donne les résultats souhaités me donne une note négative.
Je viens de passer la plus grande partie de l'après-midi sur ce
Il existe deux façons courantes d'écrire dans un fichier, la première étant une instruction "write" d'accès direct au fichier. Celle-ci ajoute les guillemets.
La seconde est "ActiveWorkbook.SaveAs" ou "ActiveWorksheet.SaveAs", qui ont toutes deux le très mauvais effet secondaire de changer le nom de fichier du classeur actif.
La solution proposée ici est un hybride de quelques solutions que j'ai trouvées en ligne. En gros, elle fait ceci 1) Copier les cellules sélectionnées dans une nouvelle feuille de calcul. 2) Parcourir chaque cellule une par une et "imprimer" dans le fichier ouvert 3) Supprimer la feuille de calcul temporaire.
La fonction travaille sur les cellules sélectionnées et prend une chaîne pour un nom de fichier ou demande un nom de fichier.
Function SaveFile(myFolder As String) As String
tempSheetName = "fileWrite_temp"
SaveFile = "False"
Dim FilePath As String
Dim CellData As String
Dim LastCol As Long
Dim LastRow As Long
Set myRange = Selection
'myRange.Select
Selection.Copy
'Ask user for folder to save text file to.
If myFolder = "prompt" Then
myFolder = Application.GetSaveAsFilename(fileFilter:="XML Files (*.xml), *.xml, All Files (*), *")
End If
If myFolder = "False" Then
End
End If
Open myFolder For Output As #2
'This temporarily adds a sheet named "Test."
Sheets.Add.Name = tempSheetName
Sheets(tempSheetName).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
LastCol = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Column
LastRow = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row
For i = 1 To LastRow
For j = 1 To LastCol
CellData = CellData + Trim(ActiveCell(i, j).Value) + " "
Next j
Print #2, CellData; " "
CellData = ""
Next i
Close #2
'Remove temporary sheet.
Application.ScreenUpdating = False
Application.DisplayAlerts = False
ActiveWindow.SelectedSheets.Delete
Application.DisplayAlerts = True
Application.ScreenUpdating = True
'Indicate save action.
MsgBox "Text File Saved to: " & vbNewLine & myFolder
SaveFile = myFolder
Fin de la fonction
El réponse de cette question a fourni la réponse à cette question de manière beaucoup plus simple.
Write est une instruction spéciale conçue pour générer des données lisibles par machine. qui sont ensuite consommés avec Input.
Utilisez Print pour éviter de manipuler les données.
Merci à l'utilisateur GSerg
- Réponses précédentes
- Plus de réponses