2010-01-25 19:02:42 +0000 2010-01-25 19:02:42 +0000
24
24

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

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

Ha anche una funzionalità dove, dato un foglio di calcolo esistente, si può esportare in un file di testo a larghezza fissa?

Se sì, come posso accedervi? Ho provato a usare Salva con nome e scegliere File di testo, ma sembra salvare solo come tab-delimitato, il che non mi aiuta.

Questo è Excel 2003 se è importante.

Risposte (7)

24
24
24
2010-01-25 19:16:55 +0000

Penso che la funzionalità più vicina a quella nativa di Excel sia Save As | Formatted Text (Space Delimited) (*.prn). Determinerà automaticamente le larghezze e inserirà spazi per imbottire a quella larghezza come necessario.

Oltre a questo è necessario avere una macro o un altro add-in che vi permetta di fare di più.

14
14
14
2010-01-25 20:34:43 +0000

Se avete Office Professional, potete aprire il vostro file Excel in Access e poi esportare da Access. Access vi permetterà di specificare un layout a larghezza fissa per il vostro file esportato, e vi darà controlli estremamente granulari per specificare quelle larghezze.

5
5
5
2010-03-18 01:43:08 +0000

Wow, stavo per fare questa domanda io stesso, ma è stato già chiesto. Tutto l'output degli appunti di Excel è delimitato da tabulazione per impostazione predefinita. Questo è un po’ fastidioso per il “vero” output di testo semplice quando si ha un font 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 di larghezza fissa – così:

187712 201 37 0.18 2525 580 149 0.25 136829 137 43 0.31

Ecco il codice della macro. Per usarlo, assicuratevi di abilitare la scheda Sviluppatore in Opzioni Excel se state usando Excel 2007 o successivo.

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
4
4
2010-01-25 21:12:44 +0000

Per prima cosa, formatta i tuoi dati come Courier New (o qualche altro font a larghezza fissa). Poi salva come .prn e avrai la vera larghezza fissa.

2
2
2
2015-07-02 17:00:34 +0000

Espandendo la risposta di Jeff Atwood, dato che non mi permetteva di commentare lì:

Ho modificato la sua macro per impostare la larghezza della colonna alla cella più larga di quella colonna e per avere ogni colonna la sua larghezza. La sua macro trovava solo la cella più larga nella prima riga e poi impostava la larghezza di tutte le colonne su quella.

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
0
0
2015-05-28 08:21:09 +0000

Questo è un killer per me. Ha anche alcune opzioni. http://www.sensefulsolutions.com/2010/10/format-text-as-table.html

0
0
0
2018-06-13 11:29:12 +0000

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 modo l'ho gestito abbastanza facilmente e velocemente - meglio che con Excel. Nel mio caso si trattava di una conversione della tabella.