Excel에서 값을 문자열로 해석하도록 쉼표로 구분 된 CSV 형식


64

Excel에서 값을 문자열로 해석하고 숫자 또는 날짜로 변환하지 않도록 CSV 파일을 출력하는 방법을 찾으려고 잠시 동안 검색했습니다.

예 :

"141", "10/11/2002", "350.00", "1311742251"

Excel은이 모든 것을 "지능적으로"기본 날짜 / 숫자 형식으로 변환하려고합니다. 그 주위에 방법이 있습니까?


편집 : 내 질문의 의도를 명확히했습니다. 혼란을 드려 죄송합니다.

답변:


67

소스 데이터를 제어하는 ​​사용자의 경우 CSV 열이 다음 형식이 아닌 경우 Excel은 CSV 필드의 형식을 자동 감지합니다.

"=""Data Here"""

예를 들어 ...

20,       5.5%,      "0404 123 351", "3-6",  "=""123"""
[number]  [percent]  [number]        [date]  [string]  <-- how Excel interprets

Google 스프레드 시트에서도 작동하지만 다른 스프레드 시트 앱이이 표기법을 지원하는지 확실하지 않습니다.

데이터에 따옴표 자체가 포함되어 있다고 의심되면 다음 과 같이 따옴표를 이중 이스케이프 해야합니다 ...

"=""She said """"Hello"""" to him"""



(편집 : DMA57361 덕분에 수정 사항으로 업데이트되었습니다!)


굉장, 우리는 단지 데이터를 변경해야합니다. sigh
— Pricey

4
마지막 열은 "=""123"""그렇지 않으면 잘못 형성 되어야합니다 . 를 포함하는 필드 "는 구분되어야 "하고 필드 의 s는 다른 "s로 이스케이프 되어야합니다 .
— DMA57361

@ DMA57361 실제로 그가 가진 방식은 괜찮습니다. 앞에 붙은 등호가없는 다른 두 필드입니다. 그는 거기에 셀의 수식을 설정하여 문자열을 반환합니다. 이를 피하기 위해 셀의 데이터 유형을 "텍스트"로 설정할 수 있습니다.
— 획기적인

2
이 테이블을 통해 Excel 필드가 아닌 CSV 파일을 나타냅니다 . 마지막 값 ="123"은 필드 " 를 올바르게 구분 하지 않고 필드 구분 문자 를 포함하므로 유효한 CSV 필드가 아닙니다 . Excel이 수식으로 읽는다는 사실은 전적으로 Excel에 달려 있으며 CSV 파일과 관련이 없습니다.
— DMA57361

2
@PriceChild, 원래 질문의 요점 (실제로 잘 설명하지 못함)은 실제로 사용자가 가능한 한 쉽게 CSV를 형식화하는 방법이었습니다 . 그리고 이것이 제가 스스로 발견하고 게시하고 싶었던 답변입니다. DMA57361도 실제로 유용한 수정 사항을 가져 왔습니다. 감사합니다!
— Simon East

36

많은 사람들과 마찬가지로 Microsoft가 다양한 제안 된 솔루션을 만들고 시도한 것과 동일한 결정으로 어려움을 겪고 있습니다.

Excel 2007의 경우 다음이 진행됩니다.

  • 모든 값을 큰 따옴표로 묶는 것은 도움이되지 않습니다
  • double quutes에 넣은 후 모든 값 앞에 = 를 넣으면 도움이되지만 csv 파일은 대부분의 다른 응용 프로그램에 쓸모가 없습니다.
  • 모든 값 주위에 큰 따옴표를 괄호로 묶는 것은 쓰레기입니다.
  • 큰 따옴표를 묶기 전에 모든 값 앞에 공백을 넣으면 날짜로 변환하지 못하지만 선행 또는 후행 0의 트리밍을 막지는 않습니다.
  • 값 앞에 작은 따옴표를 넣으면 Excel 내에서 데이터를 입력 할 때만 작동합니다.

하나:

큰 따옴표를 묶기 전에 탭을 모든 값 앞에두면 DOES는 날짜로 변환되지 않으며 DOES는 선행 또는 후행 0이 트리밍되는 것을 방지하고 시트는 각 셀의 왼쪽 상단 모서리에 불쾌한 경고 마커를 표시하지 않습니다.

예 :

"<tab character><some value>","<tab character><some other value>"

탭 문자는 큰 따옴표 안에 있어야합니다. 편집 : 큰 따옴표는 필요하지 않습니다.

csv 파일을 두 번 클릭하면 Excel에서 스프레드 시트로 파일을 열어 텍스트 데이터처럼 위와 같이 처리 된 모든 값을 표시 할 수 있습니다. '.' 을 사용하도록 Excel을 설정하십시오 . csv 파일의 모든 줄이나 ','가 아닌 소수점 으로 각 행의 첫 번째 셀에 하나의 텍스트로 표시됩니다. Microsoft는 CSV가 "소수가 아닌"구분 된 값을 의미한다고 생각합니다.


이 탭 트릭은 하루를 절약했으며 Excel은 실제로 긴 숫자 값을 숫자로 변환했으며 15 일 후에 모든 숫자를 잃어 버렸습니다. 탭 접두사가있는 텍스트로 Excel에서 처리하도록 Excel을 관리합니다. 따라서 날짜뿐만 아니라 숫자에도 적용됩니다.
— Markus Yrjölä

정말 유용합니다. 감사합니다!
— Flavio

22

Excel의 가져 오기 기능을 사용하면 각 열을 해석해야하는 형식 (자동, 텍스트 또는 날짜)을 지정할 수 있으며 데이터 파일을 수정할 필요가 없습니다.

Excel 2007/2010에서 Data→ Get External Data→ 로 찾을 수 있습니다 From Text.
또는 Excel 2003의 경우 Data→ Import External Data→Import Data

다음은 주어진 예제 데이터에 대한 Excel 2003 텍스트 가져 오기 마법사의 이미지로, 후자의 두 열을 텍스트로 가져 오는 것을 보여줍니다.

Excel 2003 : 3 단계의 텍스트 가져 오기 마법사-데이터 형식


모든 세부 사항에 감사드립니다. 내 질문에서 언급하지 않은 것은 Excel로 데이터를 내보내는 스크립트를 작성한다는 것이므로 사용자가 이와 같은 혼란스러운 옵션을 뛰어 넘지 못하게하려고했습니다. 그러나 어쨌든 당신을 투표했습니다. :-)
— Simon East

@Simon, 스크립트 작성은 무엇입니까? 중간 형식을 거치지 않고 실제 Excel 파일을 직접 만들 수있는 방법은 무엇입니까?
— DMA57361

데이터베이스 테이블을 내보내는 PHP 스크립트입니다. CSV는 아마도 가장 쉽게 작업 할 수는 있지만 정확합니다. 일부 오픈 소스 코드를 사용하여 XLS를 생성하거나 과거 경험에서 얻은 HTML 테이블조차 Excel에서 합리적인 결과를 얻을 수 있다고 생각합니다 (허용 색상 및 서식 등이 있지만 데이터 유형에 대해서는 확실하지 않습니다.
— Simon East

1
PHP → Excel에 대해 SO에 대한 몇 가지 질문 이 있습니다 . 처음 시도한 몇 가지 모두 PHP Excel을 가리키는 답변을 가지고 있으므로 살펴볼 가치가 있습니다.
— DMA57361

그게 매우 도움이 적지 ansers 읽은 후
— greg121을

1

Simon의 예는 저에게 효과적이지 않았으며 언어 차이라고 생각합니다. C #에서 내 작업 형식 문자열은 다음과 같습니다.

var linebreak = (i++ == list.Count) ? "" : "\r\n";

csv += String.Format("=\"{0}\",{1},{2},{3},=\"{4}\"{5}",
    item.Value, item.Status, item.NewStatus, item.Carrier, c.Status, linebreak);

출력 파일은 다음과 같습니다.

="abababababab",INVALID,INVALID,USPS,="",
="9500100030492359000149",UNKNOWNSTATUS,DELIVERED,USPS,="3"
="9500100030492359000149",UNKNOWNSTATUS,DELIVERED,USPS,="3"
="9500100030492359000149",UNKNOWNSTATUS,DELIVERED,USPS,="3"
="9500100030492359000149",UNKNOWNSTATUS,DELIVERED,USPS,="3"
="9400110200793482982812",UNKNOWNSTATUS,DELIVERED,USPS,="3"
="9400110200793482982812",UNKNOWNSTATUS,DELIVERED,USPS,="3"
="9400110200793000216184",UNKNOWNSTATUS,INVALID,USPS,=""

알 수 있듯이 출력 파일의 형식 은 Visual Basic 규칙 이 ="VALUE",아닐 "=""VALUE""",수도 있습니다.

Excel 2010을 사용하고 있습니다. 또한 Google 스프레드 시트는 이러한 방식으로 포맷 된 파일을 열거 나 변환하지 않습니다. 등호를 제거하면 작동합니다. "VALUE",Excel은 여전히 ​​파일을 열지 만 열을 문자열로 만들고 싶다는 사실은 무시합니다.


-2

Excel에서 날짜를 텍스트로 해석하도록하는 간단한 방법은 다음과 같이 전체 따옴표를 사용하는 대신 날짜 앞에 작은 따옴표를 넣는 것입니다.

'10 / 11 / 2002

CSV를 열지 않고 가져올 수있는 경우 각 열의 형식을 Excel에 알릴 수 있습니다. 내가 물었던이 질문을 보라 .


5
Excel로 가져 오는 CSV 파일에서 작동하지 않기 때문에 다운 보트되었습니다. Excel은 따옴표를 리터럴 따옴표로 해석하여 셀에 표시합니다.
— psynnott
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.