Xuất bảng tính Excel sang tệp văn bản có chiều rộng cố định?


24

Excel có chức năng nhập các tệp văn bản có chiều rộng cố định trong đó trình bày một hộp thoại cho phép bạn chọn nơi bắt đầu và kết thúc của các trường mà nó đặt vào các cột.

Liệu nó cũng có chức năng trong đó, với một bảng tính hiện có, bạn có thể xuất thành tệp văn bản có chiều rộng cố định?

Nếu vậy, làm thế nào để tôi truy cập này? Tôi đã thử sử dụng Save As và chọn File Text nhưng dường như chỉ lưu dưới dạng Tab được phân định bằng tab mà không giúp tôi.

Đây là Excel 2003 nếu có vấn đề.

Câu trả lời:


24

Tôi nghĩ rằng gần nhất bạn có thể nhận được từ chức năng Excel gốc là Save As | Văn bản được định dạng (Phân cách không gian) (* .prn) . Nó sẽ tự động xác định chiều rộng và chèn khoảng trắng vào pad theo chiều rộng đó nếu cần.

Ngoài ra, bạn cần phải có một macro hoặc bổ trợ khác sẽ cho phép bạn làm được nhiều hơn.


3
Chỉ cần thêm một chút rõ ràng - nó sẽ "tự động" xác định độ rộng dựa trên chiều rộng bạn chỉ định cho các cột của mình. Mặc dù thông thường các phép đo gần đúng với ems (theo như tôi nhớ), khi xuất ra prn chiều rộng cố định, chúng được lấy theo nghĩa đen và làm tròn xuống để đưa ra các giá trị nguyên được sử dụng cho số lượng ký tự trong một cột của tệp prn. Không gian được thêm vào để đệm, bên trái hoặc bên phải tùy thuộc vào căn chỉnh trong các ô (do đó, theo số mặc định sẽ được đệm bên trái để buộc chúng bên phải, văn bản bên phải để buộc bên trái, nhưng nếu bạn đã thay đổi căn chỉnh thì chúng sẽ được thay đổi khác nhau)
AdamV

Điều này không làm những gì tôi đang tìm kiếm. Cảm ơn!
RationalGeek

1
Xin lưu ý: Văn bản được định dạng (.prn) được giới hạn ở 240 ký tự trên mỗi dòng trong Excel support.microsoft.com/kb/249885
iokevins

Để sử dụng macro được chỉ ra bởi iokevins, bạn phải xóa "& dấu phân cách" khỏi hai vị trí nơi CellText được xác định. Mặt khác, nó sẽ thêm một không gian bổ sung cho mỗi ô, việc lưu như một prn không làm được.
farrenthorpe

14

Nếu bạn có Office Professional, bạn có thể mở tệp Excel của mình trong Access và sau đó Xuất từ ​​Access. Access sẽ cho phép bạn chỉ định bố cục chiều rộng cố định cho tệp đã xuất của mình và cung cấp cho bạn các điều khiển cực kỳ chi tiết để chỉ định các độ rộng đó.


Mặc dù Access có thể làm điều đó, nhưng Excel cũng sẽ được yêu cầu.
AdamV

7
Cảm ơn về downvote, nhưng tôi nghĩ điều đáng nói là Access có phiên bản đầy đủ của tính năng này. Excel không cho phép bạn chỉ định độ rộng cột trực tiếp, Access thì có. Có, bạn có thể có được độ rộng cột bên phải trong Excel bằng cách xử lý xung quanh với độ rộng cột trong bảng tính, nhưng điều đó thật khó khăn và vì ai đó phải tạo các tệp có chiều rộng cố định một cách thường xuyên, nó không đáng thời gian. Nếu bạn có quyền truy cập (điều mà nhiều người làm), có một cách tốt hơn nhiều.
davidcl

Xuất sắc; cảm ơn bạn vì sự thay thế này: o)
iokevins

5

Ồ, tôi sẽ tự hỏi câu hỏi này nhưng nó đã được hỏi rồi. Tất cả đầu ra clipboard của Excel được tabphân định theo mặc định. Điều này gây khó chịu cho đầu ra văn bản thuần "thực" khi bạn có phông chữ có chiều rộng cố định nhưng không nhất thiết phải hỗ trợ dấu phân cách tab.

Dù sao, tôi đã tìm thấy và sửa đổi một Macro Excel nhỏ sẽ sao chép vùng hiện được chọn dưới dạng bảng ASCII có chiều rộng cố định đơn giản - như vậy:

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

Đây là mã Macro. Để sử dụng nó, hãy đảm bảo bạn bật tab Nhà phát triển trong Tùy chọn Excel nếu bạn đang sử dụng Excel 2007 trở lên.

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

Đầu tiên, định dạng dữ liệu của bạn là Courier New (hoặc một số phông chữ có chiều rộng cố định khác). Sau đó lưu dưới dạng .prn và bạn sẽ có được chiều rộng cố định thực sự.


Nó hiệu quả tuyệt vời đối với tôi. Tôi cũng thích định dạng mọi thứ dưới dạng văn bản trước khi tôi làm điều này. Bằng cách đó, tất cả dữ liệu được căn trái khi lưu.
Gary Brunton

2

Mở rộng câu trả lời của Jeff Atwood, vì nó sẽ không cho phép tôi nhận xét ở đó:

Tôi đã sửa đổi macro của mình để đặt chiều rộng cột thành ô rộng nhất trong cột đó và để mỗi cột có chiều rộng riêng. Macro của anh ta chỉ tìm thấy ô rộng nhất trong hàng đầu tiên và sau đó đặt chiều rộng của tất cả các cột cho nó.

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

Đây là một kẻ giết người đối với tôi. Nó có một vài lựa chọn là tốt.

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


Mặc dù liên kết này có thể trả lời câu hỏi, tốt hơn là bao gồm các phần thiết yếu của câu trả lời ở đây và cung cấp liên kết để tham khảo. Câu trả lời chỉ liên kết có thể trở nên không hợp lệ nếu trang được liên kết thay đổi.
Ramhound

2
@Ramhound - Nói chung, tôi đồng ý. Nhưng trong trường hợp này, không có gì tôi có thể sao chép ở đây. Trang web đó là nơi bạn dán dữ liệu đầu vào của mình và bạn nhận được đầu ra "định dạng Excel". Nếu liên kết trở nên không hợp lệ, thì dịch vụ sẽ biến mất.
sancho.s Tái lập Monica

Dịch vụ đã được chuyển: senseful.github.io/web-tools/text-table và nguồn có sẵn: github.com/senseful/web-tools
ngm

Mà một lần nữa đã chuyển sang: senseful.github.io/text-table
Chris

0

Nó hoạt động với Access out of the box: https://support.office.com/en-ie/article/export-data-to-a-text-file-f72dfc38-a8a0-4c5b-8c2c-bf2950814140#bmsteps với điều này cách tôi quản lý nó khá dễ dàng và nhanh chóng - tốt hơn so với Excel. Trong trường hợp của tôi, đó là một chuyển đổi của bảng.


Có vẻ như bạn đã đăng câu trả lời của mình cho câu hỏi sai ;-) Câu hỏi này hỏi về Excel, trong khi câu trả lời của bạn là nói về Access. Ngoài ra cho các câu trả lời trong tương lai: Cung cấp liên kết để tham khảo là hữu ích, nhưng bạn cũng phải bao gồm các thông tin cần thiết trong bài viết.
robinCTS
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.