17 votes

Enregistrement d'un fichier Excel au format .txt sans guillemets

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 enter image description here

18voto

nicholas Points 1363

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 :

Excel Screenshot

Devient :

Text Screenshot

12voto

Siddharth Rout Points 63935

Ce code fait ce que vous voulez.

LOGIQUE

  1. Sauvegarder le fichier comme un fichier délimité par des tabulations dans le répertoire temporaire de l'utilisateur.
  2. Lire le fichier texte en une seule fois
  3. 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

enter image description here

Après la sauvegarde

enter image description here

9voto

Eric Gross Points 156

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.

2voto

asdf30 Points 21

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

2voto

timclancy Points 106

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X