将 Excel 电子表格导出到固定宽度的文本文件?

Rat*_*eek 25 export microsoft-excel-2003 fixed-width

Excel 具有导入固定宽度文本文件的功能,它会在其中显示一个对话框,让您选择字段的开头和结尾放在列中的位置。

它是否也具有在给定现有电子表格的情况下可以导出到固定宽度文本文件的功能?

如果是这样,我如何访问它?我试过使用另存为并选择文本文件,但它似乎只保存为制表符分隔,这对我没有帮助。

如果重要的话,这是 Excel 2003。

squ*_*man 24

我认为您可以从本机 Excel 功能中获得的最接近的是另存为 | 格式化文本(空格分隔)(*.prn)。它将自动确定宽度并根据需要插入空格以填充到该宽度。

除此之外,您还需要一个宏或其他加载项来让您执行更多操作。

  • 只是为了增加一些清晰度 - 它会根据您为列指定的宽度“自动”确定宽度。虽然通常测量值近似于 em(据我记得),但当导出到固定宽度 prn 时,它们按字面意思进行并向下取整以给出用于 prn 文件列中字符数的整数值。根据单元格中的对齐方式,向左或向右添加空格以进行填充(因此默认情况下,数字将填充在左侧以强制它们向右,右侧的文本强制向左,但如果您更改了对齐方式,它们将是不同的) (3认同)

dav*_*dcl 16

如果您有 Office Professional,则可以在 Access 中打开 Excel 文件,然后从 Access 导出。Access 将允许您为导出的文件指定固定宽度的布局,并为您提供用于指定这些宽度的极其精细的控制。

  • 感谢您的反对,但我认为值得一提的是 Access 具有此功能的完整版本。Excel 不允许您直接指定列宽,而 Access 可以。是的,您可以通过修改工作表中的列宽来在 Excel 中获得正确的列宽,但这很痛苦,而且作为必须定期创建固定宽度文件的人,不值得花时间。如果您有 Access(很多人都这样做),那么还有更好的方法。 (8认同)

Jef*_*ood 5

哇,我本来想自己问这个问题,但已经有人问过了。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
Run Code Online (Sandbox Code Playgroud)