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

Wyeksportować arkusz kalkulacyjny Excel do pliku tekstowego o stałej szerokości?

Excel posiada funkcjonalność importowania plików tekstowych o stałej szerokości, gdzie prezentuje okno dialogowe, które pozwala wybrać początek i koniec pól, które są umieszczane w kolumnach.

Czy posiada również funkcjonalność, w której, biorąc pod uwagę istniejący arkusz kalkulacyjny, można eksportować do pliku tekstowego o stałej szerokości?

Jeśli tak, to jak mogę uzyskać do tego dostęp? Próbowałem użyć Save As i wybrać Text File, ale wydaje się, że zapisuje tylko jako Tab-delimited, co mi nie pomaga.

To jest Excel 2003, jeśli to ma znaczenie.

Odpowiedzi (7)

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

Myślę, że najbardziej zbliżona do natywnej funkcjonalności Excela jest opcja Zapisz jako | Tekst sformatowany (Delimitowany spacjami) (™.prn). Automatycznie określi szerokość i wstawi spacje do tej szerokości, jeśli to konieczne.

Poza tym musisz mieć makro lub inny dodatek, który pozwoli Ci zrobić więcej.

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

Jeśli masz pakiet Office Professional, możesz otworzyć plik Excela w programie Access, a następnie wyeksportować go z programu Access. Program Access pozwoli Ci określić układ o stałej szerokości dla eksportowanego pliku i zapewni Ci bardzo szczegółową kontrolę nad tymi szerokościami.

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

Wow, miałem zamiar sam zadać to pytanie, ale już zostało zadane. Wszystkie dane wyjściowe schowka programu Excel są domyślnie ograniczone tabulatorami. Jest to trochę denerwujące dla “prawdziwego” zwykłego tekstu, gdy masz czcionkę o stałej szerokości, ale niekoniecznie obsługę ogranicznika tabulacji.

W każdym razie, znalazłem i zmodyfikowałem małe makro Excela, które skopiuje aktualnie wybrany region jako prostą tabelę ASCII o stałej szerokości kolumn – tak jak poniżej:

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

Oto kod Makra. Aby go użyć, upewnij się, że włączyłeś kartę Deweloper w Opcjach programu Excel, jeśli używasz programu Excel 2007 lub nowszego.

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

Najpierw sformatuj swoje dane jako Courier New (lub jakąś inną czcionkę o stałej szerokości). Następnie zapisz jako .prn i otrzymasz prawdziwą stałą szerokość.

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

Rozszerzając odpowiedź Jeffa Atwooda, ponieważ nie pozwoliłby mi tam komentować:

Zmodyfikowałem jego makro, aby ustawić szerokość kolumny na najszerszą komórkę w tej kolumnie i aby każda kolumna miała swoją własną szerokość. Jego makro znajdowało tylko najszerszą komórkę w pierwszym wierszu, a następnie ustawiało na nią szerokość wszystkich kolumn.

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

To jest dla mnie zabójca. Ma również kilka opcji. http://www.sensefulsolutions.com/2010/10/format-text-as-table.html

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

Działa z Accessem po wyjęciu z pudełka: https://support.office.com/en-ie/article/export-data-to-a-text-file-f72dfc38-a8a0-4c5b-8c2c-bf2950814140#bmsteps z tym sposobem poradziłem sobie dość łatwo i szybko - lepiej niż z Excelem. W moim przypadku chodziło o konwersję tabeli.