Mengekspor spreadsheet Excel ke file teks lebar tetap?

24

Excel memiliki fungsionalitas untuk mengimpor file teks lebar tetap di mana ia menyajikan dialog yang memungkinkan Anda memilih di mana awal dan akhir bidang yang dimasukkan ke dalam kolom.

Apakah ini juga memiliki fungsi di mana, mengingat spreadsheet yang ada, Anda dapat mengekspor ke file teks lebar-tetap?

Jika demikian, bagaimana cara mengakses ini? Saya telah mencoba menggunakan Simpan Sebagai dan memilih File Teks tetapi tampaknya hanya menyimpan sebagai Tab-dibatasi yang tidak membantu saya.

Ini adalah Excel 2003 jika itu penting.

RasionalGeek
sumber

Jawaban:

24

Saya pikir yang paling dekat yang bisa Anda dapatkan dari fungsionalitas Excel asli adalah Save As | Teks Terformat (Dibatasi Ruang) (* .prn) . Ini akan secara otomatis menentukan lebar dan menyisipkan spasi untuk pad dengan lebar yang diperlukan.

Selain itu, Anda perlu memiliki makro atau tambahan lainnya yang memungkinkan Anda melakukan lebih banyak.

squillman
sumber
3
Hanya untuk menambah kejelasan - ini akan "secara otomatis" menentukan lebar berdasarkan lebar yang Anda tentukan untuk kolom Anda. Sementara biasanya pengukuran mendekati ems (sejauh yang saya ingat), ketika mengekspor ke lebar tetap prn mereka diambil secara harfiah dan dibulatkan ke bawah untuk memberikan nilai integer yang digunakan untuk jumlah karakter dalam kolom file prn. Spasi ditambahkan untuk padding, ke kiri atau kanan tergantung pada perataan dalam sel (jadi dengan angka default, akan diisi di sebelah kiri untuk memaksa mereka ke kanan, teks di sebelah kanan untuk memaksa ke kiri, tetapi jika Anda telah mengubah keberpihakan, mereka akan menjadi berbeda)
AdamV
Ini melakukan apa yang saya cari. Terima kasih!
RationalGeek
1
Harap perhatikan: Teks yang diformat (.prn) terbatas hingga 240 karakter per baris di Excel support.microsoft.com/kb/249885
iokevins
Untuk menggunakan makro yang ditunjuk oleh iokevins, Anda harus menghapus "& pembatas" dari dua tempat di mana CellText didefinisikan. Jika tidak, itu akan menambah ruang tambahan untuk setiap sel, yang tidak disimpan sebagai prn.
farrenthorpe
14

Jika Anda memiliki Office Professional, Anda bisa membuka file Excel di Access, dan lalu Ekspor dari Access. Akses akan memungkinkan Anda menentukan tata letak lebar tetap untuk file yang diekspor, dan memberi Anda kontrol yang sangat terperinci untuk menentukan lebar tersebut.

davidcl
sumber
Sementara Access mungkin melakukannya, Excel juga akan meminta apa yang diminta.
AdamV
7
Terima kasih untuk downvote, tapi saya pikir layak menyebutkan bahwa Access memiliki versi lengkap dari fitur ini. Excel tidak membiarkan Anda menentukan lebar kolom secara langsung, Access tidak. Ya, Anda bisa mendapatkan lebar kolom yang tepat di Excel dengan melakukan kesalahan dengan lebar kolom di lembar kerja, tapi itu menyebalkan dan sebagai seseorang yang harus membuat file lebar tetap secara teratur, itu tidak sebanding dengan waktu. Jika Anda memiliki Akses (yang dilakukan banyak orang) ada cara yang lebih baik.
davidcl
Luar biasa; terima kasih atas alternatif ini: o)
iokevins
5

Wow, saya sendiri akan mengajukan pertanyaan ini tetapi sudah ditanyakan. Semua output clipboard Excel tabdibatasi secara default. Ini agak menyebalkan untuk output teks biasa "nyata" ketika Anda memiliki font lebar tetap tetapi tidak perlu dukungan pembatas tab.

Lagi pula, saya menemukan dan memodifikasi Excel Macro kecil yang akan menyalin wilayah yang saat ini dipilih sebagai tabel ASCII kolom lebar tetap sederhana - seperti:

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

Ini kode makronya. Untuk menggunakannya, pastikan Anda mengaktifkan tab Pengembang di Opsi Excel jika Anda menggunakan Excel 2007 atau yang lebih baru.

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
Jeff Atwood
sumber
4

Pertama, format data Anda sebagai Courier New (atau font dengan lebar tetap lainnya). Kemudian simpan sebagai .prn dan Anda akan mendapatkan lebar tetap yang benar.

dkusleika
sumber
Ini bekerja baik untuk saya. Saya juga suka memformat semuanya sebagai teks sebelum saya melakukan ini. Dengan begitu semua data dibiarkan lurus saat disimpan.
Gary Brunton
2

Memperluas jawaban Jeff Atwood, karena itu tidak akan membiarkan saya berkomentar di sana:

Saya memodifikasi makro untuk mengatur lebar kolom ke sel terlebar di kolom itu dan memiliki masing-masing kolom lebarnya sendiri. Makronya hanya menemukan sel terlebar di baris pertama dan kemudian mengatur lebar semua kolom ke sana.

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
Peter
sumber
0

Ini pembunuh bagiku. Ini memiliki beberapa opsi juga.

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

sancho.s Reinstate Monica
sumber
Meskipun tautan ini dapat menjawab pertanyaan, lebih baik untuk memasukkan bagian-bagian penting dari jawaban di sini dan memberikan tautan untuk referensi. Jawaban hanya tautan dapat menjadi tidak valid jika halaman tertaut berubah.
Ramhound
2
@Ramhound - Secara umum, saya setuju. Tapi dalam kasus ini, tidak ada yang bisa saya salin di sini. Situs web itu adalah tempat di mana Anda menempelkan data input Anda dan Anda mendapatkan output "Excel-format". Jika tautannya menjadi tidak valid, maka layanannya hilang.
sancho.s Reinstate Monica
Layanan telah pindah: senseful.github.io/web-tools/text-table , dan sumber tersedia: github.com/senseful/web-tools
ngm
Yang lagi-lagi telah pindah ke: senseful.github.io/text-table
Chris
0

Ini berfungsi dengan Akses di luar kotak: https://support.office.com/en-ie/article/export-data-to-a-text-file-f72dfc38-a8a0-4c5b-8c2c-bf2950814140#bmsteps dengan ini cara saya mengelolanya cukup mudah dan cepat - lebih baik daripada dengan Excel. Dalam kasus saya itu adalah konversi tabel.

Alex
sumber
Sepertinya Anda telah memposting jawaban Anda pada pertanyaan yang salah ;-) Pertanyaan ini menanyakan tentang Excel, sementara jawaban Anda berbicara tentang Access. Juga untuk jawaban di masa mendatang: Memberikan tautan untuk referensi berguna, tetapi Anda juga harus memasukkan informasi penting dalam posting.
robinCTS