Excel elektronik tablosunu sabit genişlikte metin dosyasına dışa aktarma?


24

Excel, sabit genişlikte metin dosyalarını içe aktarma işlevine sahiptir; burada alanların başlangıcı ve bitişlerinin sütunlara yerleştirileceği yeri seçmenizi sağlayan bir iletişim kutusu sunar.

O da mevcut bir elektronik verilen özelliğe sahip mıdır yapabilirsiniz dışa sabit genişlikli metin dosyasına?

Öyleyse, buna nasıl erişebilirim? Farklı Kaydet'i kullanmayı ve Metin Dosyası'nı seçmeyi denedim, ancak bu yalnızca bana yardımcı olmayan Sekmeyle ayrılmış olarak kaydedilmiş görünüyor.

Bu önemlidir, Excel 2003'tür.

Yanıtlar:


24

Yerel Excel işlevsellikten en yakın alabileceğinizi düşünüyorum. Farklı Kaydet | Biçimlendirilmiş Metin (Boşlukla Sınırlı) (* .prn) . Genişlikleri otomatik olarak belirler ve gerektiğinde bu genişliğe döşemek için boşluk ekler.

Bunun ötesinde, daha fazlasını yapmanıza izin verecek bir makro veya başka bir eklentiye sahip olmanız gerekir.


3
Sadece biraz netlik eklemek için - sütunlarınız için belirttiğiniz genişliğe göre genişlikleri "otomatik olarak" belirler. Normalde ölçümler ems'ye yaklaşırken (hatırladığım kadarıyla), sabit genişlik prn'ye dışa aktarırken, prn dosyasının bir sütunundaki karakter sayısı için kullanılan tamsayı değerlerini vermek için tam anlamıyla alınır ve aşağı yuvarlanır. Hücrelerdeki hizalamaya bağlı olarak, sola veya sağa doldurmak için boşluklar eklenir (bu nedenle varsayılan sayılar sağa zorlamak için solda doldurulur, sola zorlamak için sağdaki metin, ancak hizalamaları değiştirdiyseniz bunlar farklı)
AdamV

Bu aradığım şeyi yapıyor. Teşekkürler!
RationalGeek

1
Not: Lütfen metni (.prn) Biçimlendirilmiş Excel satır başına 240 karakterle sınırlıdır support.microsoft.com/kb/249885
iokevins

İokevins tarafından gösterilen makroyu kullanmak için, CellText'in tanımlandığı iki yerden "& sınırlayıcı" yı kaldırmanız gerekir. Aksi takdirde, her bir hücre için prn yapmayan tasarruf yapan ek bir boşluk ekleyecektir.
farrenthorpe 12:15

14

Office Professional'ınız varsa, Excel dosyanızı Access'te ve ardından Access'ten Ver'i açabilirsiniz. Access, dışa aktarılan dosyanız için sabit genişlikli bir düzen belirlemenize izin verir ve bu genişlikleri belirlemek için size son derece ayrıntılı kontroller verir.


Access bunu yapabilirken, bunun için istenen Excel olacaktır.
AdamV

7
Oy verdiğiniz için teşekkürler, ancak Access'in bu özelliğin tam bir sürümüne sahip olduğunu söylemeye değeceğini düşündüm. Excel, sütun genişliklerini doğrudan belirlemenize izin vermez, Access yapar. Evet, çalışma sayfasındaki sütun genişlikleriyle uğraşarak Excel'de doğru sütun genişliklerini alabilirsiniz, ancak bu bir acıdır ve düzenli aralıklarla sabit genişlikli dosyalar oluşturmak zorunda olan biri olarak zamana değmez. Access'iniz varsa (ki bu birçok kişinin yaptığı) çok daha iyi bir yol var.
davidcl

Mükemmel; bu alternatif için teşekkür ederim: o)
iokevins

5

Vay, bu soruyu kendim soracaktım ama zaten sorulmuştu. Tüm Excel pano çıktısı tabvarsayılan olarak sınırlandırılmıştır. Sabit genişlikli bir fontunuz olduğunda ancak mutlaka sekme sınırlayıcı desteği olmadığında, "gerçek" düz metin çıktısı için can sıkıcı bir durumdur.

Her neyse, seçili bölgeyi ASCII tablosu gibi sabit genişlikli sütunlar olarak kopyalayacak küçük bir Excel Makrosu buldum ve değiştirdim:

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

İşte Makro kodu. Kullanmak için, Excel 2007 veya sonraki bir sürümünü kullanıyorsanız , Geliştirici sekmesini Excel Seçenekleri'nde etkinleştirdiğinizden emin olun .

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

Öncelikle, verilerinizi Courier New (veya başka bir sabit genişlik fontu) olarak biçimlendirin. Sonra .prn olarak kaydedin ve gerçek sabit genişlik elde edersiniz.


Bu benim için harika çalıştı. Ayrıca bunu yapmadan önce her şeyi metin olarak biçimlendirmeyi seviyorum. Bu şekilde, tüm veriler kaydedildiğinde hizalı kalır.
Gary Brunton

2

Jeff Atwood'un cevabını genişletiyor, çünkü orada yorum yapmama izin vermiyordu:

Makroyu, sütun genişliğini bu sütundaki en geniş hücreye ayarlamak ve her sütunun kendi genişliğine sahip olması için değiştirdim. Makrosu yalnızca ilk satırdaki en geniş hücreyi buldu ve sonra tüm sütunların genişliğini ona ayarladı.

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

Bu benim için bir katil. Aynı zamanda birkaç seçenek var.

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


Bu bağlantı soruyu cevaplayabilse de, cevabın temel kısımlarını buraya eklemek ve referans için bağlantıyı sağlamak daha iyidir. Bağlantılı sayfa değişirse, yalnızca bağlantı yanıtları geçersiz olabilir.
Ramhound

2
@Ramhound - Genel olarak katılıyorum. Fakat bu durumda, burada kopyalayacağım hiçbir şey yok. Bu web sitesi giriş verilerinizi yapıştırdığınız ve "Excel formatlı" çıktılar aldığınız bir yer. Bağlantı geçersiz olursa, servis gider.
sancho.s Reinstate Monica,


Yine hangisine taşındı: senseful.github.io/text-table
Chris

0

: O Erişim kutusunun dışarı ile çalışır https://support.office.com/en-ie/article/export-data-to-a-text-file-f72dfc38-a8a0-4c5b-8c2c-bf2950814140#bmsteps bununla yolu oldukça kolay ve hızlı bir şekilde yönetiyordum - Excel'den daha iyi. Benim durumumda tablonun bir dönüşüm oldu.


Yanıtınızı yanlış soruya göndermişsiniz gibi görünüyor ;-) Yanıtınız Access hakkında konuşurken, bu soru Excel hakkında soru soruyor. Ayrıca gelecekteki cevaplar için: Referans için bağlantı sağlamak faydalıdır, ancak önemli bilgileri postaya da eklemelisiniz .
robinCTS
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.