Excel具有导入固定宽度文本文件的功能,其中它提供了一个对话框,允许您选择字段的开头和结尾放在列中的位置。
它是否也具有功能,在给定现有电子表格的情况下,您可以导出到固定宽度的文本文件?
如果是这样,我该如何访问它?我尝试过使用“另存为”并选择“文本文件”,但它似乎只保存为制表符分隔,但对我没有帮助。
如果重要的话,这是Excel 2003。
Excel具有导入固定宽度文本文件的功能,其中它提供了一个对话框,允许您选择字段的开头和结尾放在列中的位置。
它是否也具有功能,在给定现有电子表格的情况下,您可以导出到固定宽度的文本文件?
如果是这样,我该如何访问它?我尝试过使用“另存为”并选择“文本文件”,但它似乎只保存为制表符分隔,但对我没有帮助。
如果重要的话,这是Excel 2003。
Answers:
我认为从本机Excel功能中获得的最接近的是另存为 格式化文本(空格分隔)(* .prn)。它将自动确定宽度并根据需要插入填充到该宽度的空间。
除此之外,你需要一个宏或其他加载项,让你做更多。
如果您有Office Professional,则可以在Access中打开Excel文件,然后从Access中导出。Access允许您为导出的文件指定固定宽度的布局,并为您提供极其精细的控件来指定这些宽度。
哇,我本来会问这个问题,但已经有人问了。tab默认情况下,所有Excel剪贴板输出都是分隔的。当您具有固定宽度字体但不一定是制表符分隔符支持时,这对于“真实”纯文本输出有点烦人。
无论如何,我找到并修改了一个小的Excel宏,它将当前选中的区域复制为一个简单的固定宽度列ASCII表 - 如下所示:
187712 201 37 0.18 2525 580 149 0.25 136829 137 43 0.31
这是宏代码。要使用它,请确保在使用Excel 2007或更高版本时启用Excel选项中的“开发人员”选项卡。
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
首先,将数据格式化为Courier New(或其他一些固定宽度字体)。然后保存为.prn,你将得到真正的固定宽度。
扩展杰夫阿特伍德的答案,因为它不会让我在那里评论:
我修改了他的宏,将列宽设置为该列中最宽的单元格,并使每列都有自己的宽度。他的宏只找到了第一行中最宽的单元格,然后将所有列的宽度设置为它。
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
这对我来说是个杀手。它也有一些选择。
http://www.sensefulsolutions.com/2010/10/format-text-as-table.html