CSV 파일의 모든 열을 항상 텍스트로 가져 오도록 Excel을 설정하려면 어떻게해야합니까? 각 열의 형식을 개별적으로

나는 그것을 피하려고 노력하지만 때로는 Excel에서 CSV 파일을 열어야합니다. 내가 할 때 숫자가 포함 된 열의 형식을 지정하므로 내 목적에 쓸모가 없습니다. 내가 알 수있는 한, 가져올 때 이것이 발생하는 것을 막는 유일한 방법 은 파일 이름을 바꾸어 확장자가 .csv가 아니고 가져 오기 마법사를 사용하여 각 열의 형식을 개별적으로 지정하는 것입니다. 열이 50-60 인 파일의 경우 비실용적입니다.

인터넷 에서이 자주 묻는 질문에 대한 모든 대답은 파일이 열리면 서식이 지정된 숫자를 다시 변환하는 몇 가지 방법을 제안하기 때문에 (나에게 효과적이지 않습니다-몇 가지 구체적인 경우가 아니라 일반적인 문제를 해결하고 싶습니다) 또는 원하지 않는 각 열의 형식 유형을 수동으로 선택하는 경우 열린 모든 CSV 파일의 모든 열이 항상 텍스트 형식으로 설정되도록 전역 환경 설정 또는 스타일을 설정하는 방법을 찾고 있습니다. 나는 따옴표로 숫자를 “armoring”하는 것에 대해 알고 있지만, 얻는 파일은 그렇게 나오지 않으며 Excel에서 파일을 망치지 않도록 파일을 사전 처리하지 않기를 바랐습니다.

구체적 으로 수행 할 수있는 방법이 있습니까 : 가져 오는 동안 매번 수동으로 각 열을 선택하지 않고 열린 CSV 파일의 모든 열을 텍스트로 항상 형식화합니까?

Excel 2003을 사용하고 있지만 2007 년에 답변을 드리겠습니다.



답변

이것은 작동합니다 :

Sub OpenCsvAsText(ByVal strFilepath As String)

    Dim intFileNo As Integer
    Dim iCol As Long
    Dim nCol As Long
    Dim strLine As String
    Dim varColumnFormat As Variant
    Dim varTemp As Variant

    '// Read first line of file to figure out how many columns there are
    intFileNo = FreeFile()
    Open strFilepath For Input As #intFileNo
    Line Input #intFileNo, strLine
    Close #intFileNo
    varTemp = Split(strLine, ",")
    nCol = UBound(varTemp) + 1

    '// Prepare description of column format
    ReDim varColumnFormat(0 To nCol - 1)
    For iCol = 1 To nCol
        varColumnFormat(iCol - 1) = Array(iCol, xlTextFormat)
        ' What's this? See VBA help for OpenText method (FieldInfo argument).
    Next iCol

    '// Open the file using the specified column formats
    Workbooks.OpenText _
            Filename:=strFilepath, _
            DataType:=xlDelimited, _
            ConsecutiveDelimiter:=False, Comma:=True, _
            FieldInfo:=varColumnFormat

End Sub

용법:

OpenCsvAsText "C:\MyDir\MyFile.txt"

쉼표로 구분 된 파일은 이제 텍스트로 형식화 된 모든 열이있는 Excel 시트로 열립니다.

@Wetmelon의 마법사 솔루션은 잘 작동하지만 많은 파일을 열면 나와 같이 피곤할 때마다 60 열로 스크롤하여 Shift 키를 누른 상태로 클릭하십시오.

편집 @GSerg이 “가 작동하지 않습니다”과 “공간과 선행 0을 먹는다”고 코멘트 아래에 나와 있습니다. 질문에 대한 의견을 인용하면 더 설명이 좋습니다.

알 수없는 이유로 VBA의 모든 열에 대해 형식을 명시 적으로 제공하더라도 파일 확장자가 CSV 인 경우 Excel에서 해당 형식을 무시합니다. 확장명을 변경하자마자 동일한 코드로 올바른 결과를 얻을 수 있습니다.

따라서 위의 코드는 “작동”하지만이 우스운 Excel 동작에 의해 종료됩니다. 어떤 방법으로 잘라 든 확장명을 “.csv”이외의 이름으로 변경해야합니다. 죄송합니다. 그 후, 당신은 집에 무료입니다.


답변

Excel에서 CSV를 여는 방법

좋은 방법

  • Excel → 데이터 → 외부 데이터 가져 오기 →로 모든 열을 Shift선택하고 텍스트를 선택하십시오.

    거꾸로 : 예외없이 모든 값을 텍스트로 올바르게 처리

    단점 : 단순한 더블 클릭 보다 더 많은 단계

나쁜 방법

  • 더블 클릭 또는 Excel의 대화 상자로 열기로 CSV 열기

    단점 : Excel의 내부 CSV 처리기 는 텍스트가 아닌 수식으로 선행 -또는 =부호 가있는 값을 잘못 해석합니다.

    단점 : 0001Excel의 자동 감지 열 형식으로 인해 이진 값에서 선행 0이 손실 됩니다.

좋은 방법 (VBA의 경우)

  • QueryTables 사용 (VBA 대응 Get external data) → 예제 코드

    거꾸로 : 예외없이 모든 값을 텍스트로 올바르게 처리

    단점 : OpenText방법 보다 약간 더 많은 코드

나쁜 길 (VBA의 경우)

  • 사용 Workbooks.OpenText방법 → 예제 코드

    단점 :이 방법은 여전히 ​​모든 결함과 함께 Excel의 내부 CSV 가져 오기 핸들러를 사용하고 있습니다.

    단점 : 또한 확장명이 CSV 인 경우 fieldinfo매개 변수 OpenText는 무시됩니다. 일반적으로이 매개 변수를 사용하면 모든 열 형식을 선택할 수 있지만 확장자가 CSV 인 경우는 아닙니다. 스택 오버플로 에서이 동작에 대해 자세히 읽을 수 있습니다.

    소스 파일을 완전히 제어 할 수있는 경우 소스 확장명을 CSV에서 TXT로 변경 한 다음 CSV로 다시 변경하는 것이 유효한 해결 방법입니다.

추가 방법

  • CSV를 생성하는 소스에 액세스 할 수 있으면 CSV 구문을 변경할 수 있습니다.
    모든 값을 큰 따옴표로 묶고 ="00001"모든 값 앞에 탭을 추가하거나 앞에 붙는 등호를 붙 입니다. 두 가지 방법 모두 Excel에서 값을 텍스트로 처리하도록합니다.

    원본 CSV 컨텐츠
    여기에 이미지 설명을 입력하십시오

    더블 클릭을 통해 열면 Excel의 CSV
    여기에 이미지 설명을 입력하십시오

    Excel에서 줄 2 (큰 따옴표 방법)와 줄 3 (탭 방법)이 변경되지 않는 방법에 유의하십시오.

  • 메모장 에서 CSV를 열고 모든 값을 Excel에 복사하여 붙여 넣습니다. 그런 다음 사용하는 텍스트 나누기 – 데이터
    : 단점 텍스트 열에서 다시 텍스트가 일치하지 않는 결과를 얻을 수에 일반에서 열 형식을 변경. 값 -에 문자 로 둘러싸인 문자 (예 : “= E1-S1”)가 있으면 Excel은 해당 값을 둘 이상의 열로 분할하려고합니다. 해당 셀에있는 값을 덮어 쓸 수 있습니다

    ( 텍스트의 열 동작은 Excel 2007과 2013 사이에서 변경되어 더 이상 작동하지 않음)


CSV를 열고 모든 값을 텍스트로 가져 오는 Excel 추가 기능

CSV 가져 오기 작업을 단순화하기위한 Excel 플러그인입니다.
주요 장점 : 원 클릭 솔루션이며 외부 데이터 가져QueryTables 오기와 동일한 방탄 방법을 사용 합니다.

  • Excel에 새로운 메뉴 명령을 추가하여 CSV 및 TXT 파일을 가져올 수 있습니다. 현재 선택된 셀부터 모든 값을 활성 시트로 가져옵니다.
  • Excel 추가 기능은 Windows 및 Mac의 모든 Office 버전에서 사용할 수 있습니다
  • 전체 애드 인에는 35 줄의 코드 만 있습니다. 궁금한 점이 있으면 주석이 달린 소스 코드를 확인하십시오.
  • 사용 된 CSV 목록 구분 기호 (쉼표 또는 세미콜론)는 로컬 Excel 설정에서 가져옵니다.
  • 인코딩이 UTF-8로 설정되었습니다

설치

  1. 추가 기능을 다운로드하여 추가 기능 폴더에 저장하십시오.%appdata%\Microsoft\AddIns
  2. 열기 Excel 및 추가 기능을 활성화 : File tab → Options → Add-Ins → Go To선택ImportCSV.xla
  3. VBA 매크로 활성화 : File tab → Options → Trust Center → Trust Center Settings → Macro Settings → Enable all macros
  4. Excel을 다시 시작하십시오.

추가 기능이라는 새로운 메뉴 표시 줄 항목이 표시되며이 버튼을 사용하여 번거롭지 않은 가져 오기 대화 상자를 거치지 않고 CSV 파일을 빠르게 열 수 있습니다.

여기에 이미지 설명을 입력하십시오


Windows 탐색기에서 직접 CSV를 여는 PowerShell 스크립트

PowerShell 스크립트를 사용하여 CSV 파일을 열고 자동으로 Excel로 전달할 수 있습니다. 이 스크립트는 Excel의 텍스트 가져 오기 방법을 자동으로 사용하여 항상 값을 텍스트로 처리하고 보너스로 UTF-8 인코딩을 처리합니다.

  1. 새 텍스트 파일을 만들고 아래 스크립트를 붙여 넣습니다. 주석이 달린 버전은 여기 에서 찾을 수 있습니다
$CSVs = @()
$args.ForEach({
    If ((Test-Path $_) -and ($_ -Match "\.csv$|\.txt$")) {
        $CSVs += ,$_
    } 
})

if (-Not $null -eq $CSVs) {

    $excel = New-Object -ComObject excel.application 
    $excel.visible = $true
    $excel.SheetsInNewWorkbook = $CSVs.Count    
    $workbook = $excel.Workbooks.Add()

    for ($i=0; $i -lt $CSVs.Count; $i++){

        $csv = Get-Item $CSVs[$i]
        $worksheet = $workbook.worksheets.Item($i + 1)
        $worksheet.Name = $csv.basename

        $TxtConnector = ("TEXT;" + $csv.fullname)
        $Connector = $worksheet.QueryTables.add($TxtConnector,$worksheet.Range("A1"))
        $query = $worksheet.QueryTables.item($Connector.name)
        $query.TextFilePlatform = 65001
        $query.TextFileTextQualifier = 1
        $query.TextFileOtherDelimiter = $Excel.Application.International(5) 
        $query.TextFileParseType  = 1
        $arrFormats = ,2 * $worksheet.Cells.Columns.Count
        $query.TextFileColumnDataTypes = $arrFormats
        $query.AdjustColumnWidth = 1
        $query.Refresh()
        $query.Delete()
    }
}
  1. 같은 곳에 저장하십시오 C:\my\folder\myScript.ps1. (확장 참고 .ps1)
    • WinR» shell:sendto» 를 통해 sendto 폴더를여십시오Enter
  2. 마우스 오른쪽 버튼으로 클릭»새로 만들기»바로 가기를 통해 새 바로 가기를 생성 한 후이 줄을 붙여 넣습니다. 스크립트를 넣은 경로를 자신 만의 경로로 변경하는 것을 잊지 마십시오. 바로 가기 이름을 지정하십시오 (예 : Excel).

“% SystemRoot % \ system32 \ WindowsPowerShell \ v1.0 \ powershell.exe”-NoProfile -NonInteractive -WindowStyle Hidden-파일 “C : \ my \ folder \ myScript.ps1”

이제 여러 개의 CSV를 선택하고 다음을 통해 Excel에서 열 수 있습니다. Right-click » SendTo » Excel


답변

.xlsx를 먼저 연 다음 데이터 연결을 만들고 .csv를 가져 와서 시도 할 수 있습니다. “쉼표”로 구분 한 다음 모든 열을 “일반”이 아닌 텍스트로 처리하는 옵션을 선택하십시오.

편집 : 아, 나는 질문을 완전히 읽지 못했습니다. 가져 오기 마법사에서 텍스트로 가져올 첫 번째 열 머리글을 선택하고 마지막 열 머리글로 스크롤 한 다음 머리글을 Shift + 클릭하십시오. 그런 다음 “텍스트”방사형 옵션을 선택하십시오.


답변

다음을 수행하면 Wetmelon의 제안이 작동합니다 (.CSV에서도 가능).

  1. 빈 통합 문서 또는 워크 시트로 Excel 열기
  2. 클릭하여 데이터> 텍스트에서 [외부 데이터 가져 오기]
  3. Wetmelon이 설명하는대로 “텍스트 가져 오기 마법사”를 사용하십시오 (쉼표로 구분, 첫 번째 열을 선택하고 SHIFT + CLICK, 마지막 열을 선택하고 모든 것을 텍스트로 설정).

더 많은 단계라는 것을 알고 있지만 적어도 확장명을 변경하지 않고도 CSV를 이런 식으로 열 수 있습니다.


답변

조심해!

수동 방법 사용시 “Excel → 데이터 → 외부 데이터 가져 오기 → 모든 열을 선택하고 텍스트 선택”……

이렇게하면 열이 “첫 번째 행에 데이터가있는”텍스트 (일반적으로 헤더 행)로만 설정됩니다. 이 마법사는 데이터가 아래에 있지만 첫 번째 행에는없는 열을 오른쪽으로 더 멀리 표시하지 않습니다. 예를 들면 다음과 같습니다.

Row1Col1, Row1Col2, Row1Col3

Row2Col1, Row2Col2, Row2Col3, Row2Col4

가져 오기 마법사에 Col 4가 표시되지 않으므로 가져 오기 전에 일반에서 텍스트 형식으로 변경할 수있는 옵션이 없습니다 !!!!


답변

Jean-François Corbett가 위에 게시 한 코드를 대체하는 절차는 다음과 같습니다.

이 절차는 CSV 형식의 모든 열을 텍스트 형식으로 Excel로 가져옵니다.

Public Sub ImportCSVAsText()
    Dim TempWorkbook As Workbook
    Dim TempWorksheet As Worksheet
    Dim ColumnCount As Integer
    Dim FileName As Variant
    Dim ColumnArray() As Integer

    'Get the file name
    FileName = Application.GetOpenFilename(FileFilter:="All Files (*.*),*.*", FilterIndex:=1, Title:="Select the CSV file", MultiSelect:=False)

    If FileName = False Then Exit Sub

    Application.ScreenUpdating = False

    'Open the file temporarily to get the count of columns
    Set TempWorkbook = Workbooks.Open(FileName)
    ColumnCount = TempWorkbook.Sheets(1).Range("A1").SpecialCells(xlCellTypeLastCell).Column
    TempWorkbook.Close SaveChanges:=False

    'Resize the array to number of columns
    ReDim ColumnArray(1 To ColumnCount)

    For i = 1 To ColumnCount
        ColumnArray(i) = xlTextFormat
    Next i

    Set TempWorkbook = Workbooks.Add
    Set TempWorksheet = TempWorkbook.Sheets(1)

    Application.DisplayAlerts = False
    TempWorkbook.Sheets(2).Delete
    TempWorkbook.Sheets(2).Delete
    Application.DisplayAlerts = True

    With TempWorksheet.QueryTables.Add("TEXT;" & FileName, TempWorksheet.Cells(1, 1))
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .TextFilePromptOnRefresh = False
        .TextFilePlatform = 1251
        .TextFileStartRow = 1
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = False
        .TextFileTabDelimiter = False
        .TextFileSemicolonDelimiter = False
        .TextFileCommaDelimiter = True
        .TextFileSpaceDelimiter = False
        .TextFileColumnDataTypes = ColumnArray
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
    End With

End Sub


답변

항상 동일한 데이터 (일정한 레코드 형식, 레이아웃 등)를 가져 오는 경우 가져 오기 사양을 사용하여 Access 매크로를 작성한 다음 데이터를 Excel로 다시 덤프 할 수 있습니다. 이럴 수도 있습니다. 내가 한 다른 방법은 VBA를 사용하여 한 번에 한 레코드 씩 워크 시트로 데이터를 읽고 읽는대로 구문 분석하는 것입니다. 내가 아는 한 Excel에서 가져 오는 동안 기본 형식을 설정하는 방법은 없으며 다음 파일 형식에 문제가 생길 수 있습니다.