Ồ, 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