Esportare un foglio di calcolo Excel in un file di testo a larghezza fissa?


24

Excel ha la funzionalità di importare file di testo a larghezza fissa in cui presenta una finestra di dialogo che ti consente di scegliere dove sono l'inizio e la fine dei campi che inserisce nelle colonne.

Ha anche funzionalità in cui, dato un foglio di calcolo esistente, è possibile esportare in un file di testo a larghezza fissa?

In tal caso, come accedo a questo? Ho provato a usare Salva con nome e scegliendo File di testo ma sembra salvarlo solo come delimitato da tabulazioni, il che non mi aiuta.

Questo è Excel 2003 se è importante.

Risposte:


24

Penso che il più vicino che puoi ottenere dalla funzionalità nativa di Excel sia Salva con nome | Testo formattato (spazio delimitato) (* .prn) . Determinerà automaticamente le larghezze e inserirà gli spazi da riempire a quella larghezza, se necessario.

Oltre a ciò è necessario disporre di una macro o altro componente aggiuntivo che ti permetterà di fare di più.


3
Solo per aggiungere un po 'di chiarezza - determinerà "automaticamente" le larghezze in base alla larghezza specificata per le colonne. Mentre normalmente le misure si avvicinano a ems (per quanto ricordo), quando si esportano a larghezza fissa prn sono prese letteralmente e arrotondate per dare valori interi usati per il numero di caratteri in una colonna del file prn. Gli spazi vengono aggiunti per il riempimento, a sinistra oa destra a seconda dell'allineamento nelle celle (quindi per impostazione predefinita i numeri verranno riempiti a sinistra per forzarli a destra, il testo a destra per forzare a sinistra, ma se hai modificato gli allineamenti saranno diverso)
AdamV,

Questo fa quello che stavo cercando. Grazie!
RationalGeek,

1
Nota: il testo formattato (.prn) è limitato a 240 caratteri per riga in Excel support.microsoft.com/kb/249885
iokevins

Per utilizzare la macro indicata da iokevins, è necessario rimuovere "& delimitatore" dai due punti in cui è definito CellText. Altrimenti, aggiungerà uno spazio aggiuntivo per ogni cella, che il salvataggio come prn non fa.
Farrenthorpe,

14

Se si dispone di Office Professional, è possibile aprire il file Excel in Access e quindi Esporta da Access. Access ti consentirà di specificare un layout a larghezza fissa per il tuo file esportato e ti darà controlli estremamente granulari per specificare quelle larghezze.


Mentre Access potrebbe farlo, così farà Excel, che è quello che è stato richiesto.
AdamV,

7
Grazie per il downvote, ma ho pensato che valesse la pena ricordare che Access ha una versione completa di questa funzione. Excel non ti consente di specificare direttamente le larghezze di colonna, lo fa Access. Sì, puoi ottenere le giuste larghezze di colonna in Excel curiosando con le larghezze di colonna nel foglio di lavoro, ma è una seccatura e come qualcuno che deve creare file a larghezza fissa su base regolare non vale la pena. Se hai accesso (come fanno molte persone) c'è un modo molto migliore.
David

Eccellente; grazie per questa alternativa: o)
iokevins,

5

Caspita, stavo per fare questa domanda da solo ma era già stata posta. Tutto l'output degli Appunti di Excel è tabdelimitato per impostazione predefinita. Questo è un po 'fastidioso per l'output di testo "reale" quando hai un carattere a larghezza fissa ma non necessariamente il supporto del delimitatore di tabulazione.

Comunque, ho trovato e modificato una piccola macro di Excel che copierà la regione attualmente selezionata come una semplice tabella ASCII a colonne a larghezza fissa - in questo modo:

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

Ecco il codice macro. Per usarlo, assicurati di abilitare la scheda Sviluppatore in Opzioni di Excel se stai utilizzando Excel 2007 o versioni successive.

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

4

Innanzitutto, formatta i tuoi dati come Courier New (o qualche altro carattere a larghezza fissa). Quindi salva come .prn e otterrai una larghezza fissa reale.


Questo ha funzionato alla grande per me. Mi piace anche formattare tutto come testo prima di farlo. In questo modo tutti i dati vengono allineati a sinistra quando vengono salvati.
Gary Brunton,

2

Espandendo la risposta di Jeff Atwood, dal momento che non mi lasciava commentare lì:

Ho modificato la sua macro per impostare la larghezza della colonna sulla cella più larga in quella colonna e per avere ogni colonna la propria larghezza. La sua macro ha trovato solo la cella più ampia nella prima riga e quindi ha impostato la larghezza di tutte le colonne su di essa.

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

0

Questo è un assassino per me. Ha anche alcune opzioni.

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


Sebbene questo collegamento possa rispondere alla domanda, è meglio includere qui le parti essenziali della risposta e fornire il collegamento come riferimento. Le risposte di solo collegamento possono diventare non valide se la pagina collegata cambia.
Ramhound,

2
@Ramhound - In generale, sono d'accordo. Ma in questo caso, non c'è niente che io possa copiare qui. Quel sito Web è un luogo in cui si incollano i dati di input e si ottiene un output "in formato Excel". Se il collegamento diventa non valido, il servizio non è più disponibile.
sancho.s Ripristina Monica il

Il servizio è stato spostato: senseful.github.io/web-tools/text-table e la fonte è disponibile: github.com/senseful/web-tools
ngm

Che di nuovo è passato a: senseful.github.io/text-table
Chris,

0

Funziona con Access out of the box: https://support.office.com/en-ie/article/export-data-to-a-text-file-f72dfc38-a8a0-4c5b-8c2c-bf2950814140#bmsteps con questo il modo in cui l'ho gestito abbastanza facilmente e velocemente - meglio che con Excel. Nel mio caso è stata una conversione della tabella.


Sembra che tu abbia pubblicato la tua risposta su una domanda sbagliata ;-) Questa domanda si pone su Excel, mentre la tua risposta parla di Access. Anche per risposte future: è utile fornire il link di riferimento, ma è necessario includere anche le informazioni essenziali nel post.
robinCTS,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.