고정 폭 텍스트 파일로 Excel 스프레드 시트를 내보내시겠습니까?


24

Excel에는 고정 너비 텍스트 파일을 가져와 열에 넣을 필드의 시작과 끝 위치를 선택할 수있는 대화 상자가 표시되는 기능이 있습니다.

기존 스프레드 시트에서 고정 너비 텍스트 파일로 내보낼 수있는 기능도 있습니까?

그렇다면 어떻게 액세스합니까? 다른 이름으로 저장을 사용하고 텍스트 파일을 선택하려고 시도했지만 도움이되지 않는 탭 구분으로 만 저장하는 것 같습니다.

중요한 경우 Excel 2003입니다.

답변:


24

기본 Excel 기능에서 얻을 수있는 가장 가까운 것은 다른 이름 으로 저장 | 서식있는 텍스트 (공백으로 구분) (*. prn) . 너비를 자동으로 결정하고 필요에 따라 해당 너비에 맞출 공간을 삽입합니다.

그 외에도 더 많은 작업을 수행 할 수있는 매크로 또는 기타 추가 기능이 필요합니다.


3
명확성을 추가하기 위해 열에 지정한 너비를 기준으로 너비를 "자동으로"결정합니다. 일반적으로 측정 값은 ems에 가깝지만 (내가 기억하는 한) 고정 너비 prn으로 내보낼 때 prn 파일의 열에있는 문자 수에 사용되는 정수 값을 제공하기 위해 문자 그대로 가져와 내림됩니다. 셀의 정렬에 따라 왼쪽 또는 오른쪽에 패딩을위한 공백이 추가됩니다 (따라서 기본적으로 숫자는 왼쪽에 채워져 오른쪽으로, 오른쪽에 텍스트는 왼쪽에 강제로 적용되지만 정렬을 변경 한 경우에는 정렬됩니다) 다른)
AdamV

이것은 내가 찾던 것을합니다. 감사!
RationalGeek

1
참고 : 텍스트 (.PRN) 서식은 엑셀에서 라인 당 240 자로 제한됩니다 support.microsoft.com/kb/249885
iokevins

iokevins가 가리키는 매크로를 사용하려면 CellText가 정의 된 두 위치에서 "& 구분 기호"를 제거해야합니다. 그렇지 않으면 각 셀에 추가 공간을 추가하여 prn으로 저장하지 않습니다.
farrenthorpe

14

Office Professional이있는 경우 Access에서 Excel 파일을 연 다음 Access에서 내보내기를 수행 할 수 있습니다. Access를 사용하면 내 보낸 파일에 고정 너비 레이아웃을 지정할 수 있으며 해당 너비를 지정하기위한 매우 세밀한 컨트롤을 제공합니다.


Access는 그렇게 할 수 있지만 Excel은 요청한 것입니다.
AdamV

7
downvote에 감사하지만 Access에이 기능의 정식 버전이 있다고 언급 할 가치가 있다고 생각했습니다. Excel에서는 열 너비를 직접 지정할 수 없으며 Access에서는 열 너비를 직접 지정할 수 있습니다. 예, 워크 시트의 열 너비를 조정하여 Excel에서 올바른 열 너비를 얻을 수는 있지만 고통스럽고 정기적으로 고정 너비 파일을 만들어야하는 사람에게는 시간 가치가 없습니다. Access (많은 사람들이하는)가 있다면 훨씬 더 좋은 방법이 있습니다.
davidcl

우수한; 이 대안에 감사드립니다 : o)
iokevins

5

와우, 나는이 질문을 직접 할 예정이지만 이미 요청되었습니다. 모든 Excel 클립 보드 출력은 tab기본적으로 구분됩니다. 이것은 고정 폭 글꼴을 가지고 있지만 반드시 탭 구분 기호를 지원할 필요는 없을 때 "실제"일반 텍스트 출력에 귀찮습니다.

어쨌든, 현재 선택한 영역을 간단한 고정 너비 열 ASCII 테이블로 복사하는 작은 Excel 매크로를 찾아서 수정했습니다.

187712 201 37 0.18   
2525580149 0.25   
136829137 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

4

먼저 데이터를 Courier New (또는 다른 고정 너비 글꼴)로 형식화하십시오. 그런 다음 .prn으로 저장하면 고정 너비가 고정됩니다.


이것은 나를 위해 잘 작동했습니다. 또한이 작업을 수행하기 전에 모든 것을 텍스트로 형식화하고 싶습니다. 이렇게하면 모든 데이터가 저장 될 때 정렬 된 상태로 유지됩니다.
Gary Brunton

2

Jeff Atwood의 답변을 확장하면 설명 할 수 없기 때문에 :

열 너비를 해당 열에서 가장 넓은 셀로 설정하고 각 열에 자체 너비를 갖도록 매크로를 수정했습니다. 그의 매크로는 첫 번째 행에서 가장 넓은 셀만 찾은 다음 모든 열의 너비를 설정했습니다.

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

이것은 나를위한 살인자입니다. 몇 가지 옵션도 있습니다.

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


이 링크가 질문에 대한 답변을 제공 할 수 있지만 여기에 답변의 필수 부분을 포함시키고 참조 용 링크를 제공하는 것이 좋습니다. 링크 된 페이지가 변경되면 링크 전용 답변이 유효하지 않을 수 있습니다.
Ramhound

2
@Ramhound-일반적으로 동의합니다. 그러나이 경우에는 여기서 복사 할 수있는 것이 없습니다. 해당 웹 사이트는 입력 데이터를 붙여 넣고 "Excel 형식의"출력을 얻는 곳입니다. 링크가 유효하지 않으면 서비스가 중단 된 것입니다.
sancho.s 복원 모니카

:이 서비스는 이동 senseful.github.io/web-tools/text-table 및 소스를 사용할 수 있습니다 : github.com/senseful/web-tools
NGM


0

: 그것은 액세스 상자 밖으로 작동 https://support.office.com/en-ie/article/export-data-to-a-text-file-f72dfc38-a8a0-4c5b-8c2c-bf2950814140#bmsteps 이와 Excel보다 훨씬 쉽고 빠릅니다. 제 경우에는 테이블 변환이었습니다.


잘못된 질문에 대한 귀하의 답변을 게시하신 것 같습니다 ;-)이 질문은 귀하의 답변이 Access에 대해 말하는 동안 Excel에 관한 것입니다. 또한 향후 답변 : 참조 링크를 제공하는 것이 유용하지만 게시물에 필수 정보포함 해야합니다 .
robinCTS 2016 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.