Exporter une feuille de calcul Excel vers un fichier texte à largeur fixe?

Excel a la fonctionnalité d'importer des fichiers texte à largeur fixe où il présente une boîte de dialogue qui vous permet de choisir où les champs commence et se termine par les colonnes.

Existe-t-il également des fonctionnalités où, compte tenu d'une feuille de calcul existante, vous pouvez exporter vers un fichier texte à largeur fixe?

Si oui, comment puis-je accéder à cela? J'ai essayé d'utiliser Save As et de choisir Text File, mais il semble sauvegarder uniquement comme délimité par un onglet qui ne m'aide pas.

C'est Excel 2003 si cela compte.

    Je pense que le plus proche que vous puissiez obtenir de la fonctionnalité native d'Excel est Save As | Texte formaté (espace délimité) (* .prn) . Il déterminera automatiquement les largeurs et insérera les espaces sur une largeur si nécessaire.

    Au-delà, vous devez disposer d'une macro ou d'un autre complément qui vous permettra de faire plus.

    Si vous avez Office Professional, vous pouvez ouvrir votre fichier Excel dans Access, puis exporter depuis Access. L'accès vous permettra de spécifier une disposition à largeur fixe pour votre fichier exporté et vous donne des commandes extrêmement granulaires pour spécifier ces largeurs.

    Wow, j'allais poser cette question moi-même, mais on l'a déjà demandé. La sortie du presse-papier Excel est délimitée par onglet par défaut. C'est un peu gênant pour la sortie "vraie" de 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 comme une simple table ASCII de colonnes à largeur fixe – de la manière suivante:

     187712 201 37 0,18   
     2525 580 149 0,25   
     136829 137 43 0,31   
    

    Voici le code Macro. Pour l'utiliser, assurez-vous d' activer 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 

    D'abord, formatez vos données en tant que Courier New (ou une autre police à largeur fixe). Ensuite, enregistrez sous .prn et vous obtiendrez une largeur fixe vraie.

    S'étendant sur la réponse de Jeff Atwood, puisqu'il ne me laisserait pas commenter:

    J'ai modifié sa macro pour définir la largeur de la colonne dans la colonne la plus large de cette colonne et avoir chaque colonne sa propre largeur. Sa macro n'a trouvé que la cellule la plus large de la première rangée, puis définit 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 

    C'est un tueur pour moi. Il a aussi quelques options.

    http://www.sensefulsolutions.com/2010/10/format-text-as-table.html