Excel a la fonctionnalité d'importer des fichiers texte de largeur fixe dans lequel il présente une boîte de dialogue vous permettant de choisir l'emplacement du début et de la fin des champs à insérer dans les colonnes.
At-il également une fonctionnalité où, étant donné une feuille de calcul existante, vous pouvez exporter vers un fichier texte à largeur fixe?
Si oui, comment puis-je y accéder? J'ai essayé d'utiliser Enregistrer sous et de choisir le fichier texte, mais il semble que l'enregistrement ne soit séparé que par des tabulations, ce qui ne m'aide pas.
Ceci est Excel 2003 si cela compte.
Je pense que le plus proche de la fonctionnalité native d'Excel est Enregistrer sous | Texte formaté (délimité par des espaces) (* .prn) . Il déterminera automatiquement les largeurs et insérera des espaces pour couvrir cette largeur si nécessaire.
Au-delà de cela, vous devez disposer d'une macro ou d'un autre complément qui vous permettra de faire plus.
Si vous avez Office Professionnel, vous pouvez ouvrir votre fichier Excel dans Access, puis Exporter à partir de Access. Access vous permettra de spécifier une disposition de largeur fixe pour votre fichier exporté et vous donnera des contrôles extrêmement granulaires pour spécifier ces largeurs.
Wow, j'allais poser cette question moi-même, mais c'était déjà demandé. Toutes les sorties du presse-papiers Excel sont tab délimité par défaut. C'est un peu gênant pour une sortie "réelle" en texte brut lorsque vous avez une police de largeur fixe mais pas nécessairement un support de délimiteur de tabulation.
Quoi qu’il en soit, j’ai trouvé et modifié une petite macro Excel qui copiera la région actuellement sélectionnée sous la forme d’un tableau simple à colonnes de largeur fixe ASCII - comme suit:
187712 201 37 0,18 2525 580 149 0,25 136829 137 43 0.31
Voici le code de macro. Pour l'utiliser, assurez-vous que activez l'onglet Développeur dans les Options Excel si vous utilisez Excel 2007 ou une version ultérieure.
Sub CopySelectionToClipboardAsText()
' requires a reference to "Windows Forms 2.0 Object Library"
' add it via Tools / References; if it does not appear in the list
' manually add it as the path C:\Windows\System32\FM20.dll
Dim r As Long, c As Long
Dim selectedrows As Integer, selectedcols As Integer
Dim arr
arr = ActiveSheet.UsedRange
selectedrows = UBound(arr, 1)
selectedcols = UBound(arr, 2)
Dim temp As Integer
Dim cellsize As Integer
cellsize = 0
For c = 1 To selectedcols
temp = Len(CStr(Cells(1, c)))
If temp > cellsize Then
cellsize = temp
End If
Next c
cellsize = cellsize + 1
Dim line As String
Dim output As String
For r = 1 To selectedrows
line = Space(selectedcols * cellsize)
For c = 1 To selectedcols
Mid(line, c * cellsize - cellsize + 1, cellsize) = Cells(r, c)
Next c
output = output + line + Chr(13) + Chr(10)
Next r
Dim MyData As MSForms.DataObject
Set MyData = New DataObject
MyData.SetText output
MyData.PutInClipboard
MsgBox "The current selection was formatted and copied to the clipboard"
End Sub
Commencez par formater vos données en tant que Courier New (ou une autre police de largeur fixe). Puis enregistrez sous .prn et vous obtiendrez une vraie largeur fixe.
En développant la réponse de Jeff Atwood, car elle ne me laisserait pas commenter:
J'ai modifié sa macro pour définir la largeur de la colonne sur la cellule la plus large de cette colonne et donner à chaque colonne sa propre largeur. Sa macro n'a trouvé que la cellule la plus large de la première ligne, puis a défini la largeur de toutes les colonnes.
Sub CopySelectionToClipboardAsText()
' requires a reference to "Windows Forms 2.0 Object Library"
' add it via Tools / References; if it does not appear in the list
' manually add it as the path C:\Windows\System32\FM20.dll
Dim r As Long, c As Long, linesize As Long
Dim selectedrows As Integer, selectedcols As Integer
Dim arr
arr = ActiveSheet.UsedRange
selectedrows = UBound(arr, 1)
selectedcols = UBound(arr, 2)
ReDim CellSizes(1 To selectedcols, 2) As Integer
Dim temp As Integer
Dim cellsize As Integer
linesize = 0
For c = 1 To selectedcols
cellsize = 0
For r = 1 To selectedrows
temp = Len(CStr(Cells(r, c)))
If temp > cellsize Then
cellsize = temp
End If
Next
CellSizes(c, 0) = cellsize + 1
CellSizes(c, 1) = linesize
linesize = linesize + cellsize + 1
Next c
Dim line As String
Dim output As String
For r = 1 To selectedrows
line = Space(linesize)
For c = 1 To selectedcols
Mid(line, CellSizes(c, 1) + 1, CellSizes(c, 0)) = Cells(r, c)
Next c
output = output + line + Chr(13) + Chr(10)
Next r
Dim MyData As MSForms.DataObject
Set MyData = New DataObject
MyData.SetText output
MyData.PutInClipboard
MsgBox "The current selection was formatted and copied to the clipboard"
End Sub
Cela fonctionne avec un accès immédiat: https://support.office.com/en-ie/article/export-data-to-a-text-file-f72dfc38-a8a0- 4c5b-8c2c-bf2950814140 # bmsteps De cette façon, je l'ai manipulé assez facilement et rapidement - mieux qu'avec Excel. Dans mon cas, c'était une conversion de la table.
C'est un tueur pour moi. Il a aussi quelques options.
http://www.sensefulsolutions.com/2010/10/format-text-as-table.html