Excel에서 특정 텍스트 값을 날짜로 자동 변환하지 못하도록 중지


526

누군가가 특정 필드에 대해 내 CSV에 추가 할 수있는 토큰이 있는지 알고 있습니까? 그래서 Excel은 날짜로 변환하려고하지 않습니까?

내 응용 프로그램에서 .csv 파일을 작성하려고하는데 값 중 하나가 Excel에서 자동으로 텍스트를 날짜로 변환하는 날짜처럼 보입니다. 모든 텍스트 필드 (날짜처럼 보이는 필드 포함)를 큰 따옴표 안에 넣으려고했지만 아무런 효과가 없습니다.


120
예, 10000 개의 사용자 이름을 가진 파일에 "april25"와 같은 파일이 있는데 날짜로 변환되어 결국 "apr-25"로 처리되어 "사용자 이름을 찾을 수 없음"오류가 발생하는 것처럼 Excel은 단일 텍스트를 날짜로 변환하고 나머지 텍스트는 그대로두고 4000 개의 레코드를 파일로 변환 할 것으로 예상합니다. CSV 판독 코드를 손상시키는 것; 실제로 첫 번째 X 레코드를 기반으로 유형을 추측하고 고정시켜야합니까? 또는 모든 텍스트를 그대로 두십시오. "일반"형식으로 지정하려면 나중에 선택할 수 있습니다. 처음부터 "일반"이라고 가정하면 텍스트 데이터가 손상 될 위험이 있습니다.
Triynko

복사하여 붙여 넣기를 할 때 문제가 발생했습니다. 모든 솔루션을 검색하려면 대상 열을 선택하고 문자열 / 텍스트 형식으로 설정 한 다음 소스를 복사하고 '값만'으로 특수 붙여 넣기 (오른쪽 클릭)를 수행하십시오. 날짜 형식이 아닌 값을 유지합니다.
Kai Noack

84
Excel의 이러한 동작이 심각한 결함이라고 생각합니다. Excel로 가져 오기 전에 csv 파일의 내용을 변경할 사치가없는 사람들은 어떻습니까? 또는 CSV 파일을 많이 변경 한 후에야이 문제를 인식하지 못하는 사람들은 어떻습니까? Excel에서 CSV 파일로 작업하는 것이 엉망입니다.
robguinness

DatatableJS를 사용하고 있습니까? 해당 API 로이 작업을 수행하는 방법을 이미 알고 있기 때문입니다. 필요한 경우 여기에서 찾을 수 있습니다. stackoverflow.com/a/36142043/4241058
Richard Rebeco

11
File-> Open-> Import를 사용하는 이러한 모든 솔루션은 우리가하는 일을 알고 있기 때문에 괜찮습니다. 그러나 / within /에서 파일 시스템 탐색을 이해하지 못하는 세계의 다른 99.5 %에게는 쓸모가 없습니다. 신청. 그들은 파일을보고 그것을 사용하기 위해 두 번 클릭합니다. 나는 사람들에게 사무용 응용 프로그램 사용 방법과 해당 사무용 응용 프로그램에 대한 데이터를 생성하는 코드 작성 방법을 가르치는 데 25 년을 보냈으며 / application /을 사용하여 사용할 파일을 찾는 것은 거의 모든 사람을 능가합니다.
user2624417

답변:


355

큰 따옴표 앞에 '='를 넣으면 원하는 것을 얻을 수 있습니다. 데이터를 텍스트로 만듭니다.

예. = "2008-10-03", = "추가 텍스트"

편집 (다른 게시물에 따라) : Jeffiekins가 지적한 Excel 2007 버그 때문에 Andrew가 제안한 솔루션을 사용해야합니다 ."=""2008-10-03"""


12
1) 내 csv 파일은 Excel에서만 사용되며 2) 회계 용이며 처음에는 '를 가질 수 없으며 3) 할 필요가 없기 때문에이 대답을 수락합니다. 수입. 나는 단지 그들이 CSV를 열기를 원한다.

5
큰! 그러나 때문에의 Excel 2007의 버그 를 사용 앤드류에 의해 제안 된 솔루션을 : "=""2008-10-03""". 게시물을 업데이트했습니다.
TMS

1
텍스트가 너무 길면 Excel 2010에서이 기능이 작동하지 않습니다. (
steve

7
이것이 작동하는 이유는 Excel에서 "="문자를 볼 때 그 뒤에 나오는 표현식을 평가하기로 결정하기 때문입니다. 이 경우 표현식은 단순히 문자열 리터럴이고 문자열 리터럴의 값은 문자열의 컨텐츠입니다. 따라서 인용 부호는 마술처럼 사라집니다. CSV 가져 오기 후 = 1 + 2 + 3을 입력하고 값 6을 얻을 수 있습니다. 수식 자체는 가져 오기 프로세스에서 삭제되지 않습니다.
lokori

4
이 방법에는 큰 문제가 있습니다. 파일을 Excel에서 열고 편집 한 다음 저장하고 다시 열면 "사라짐
ACV

150

나는 이것이 오래된 질문이라는 것을 알고 있지만 문제는 곧 사라지지 않습니다. CSV 파일은 대부분의 프로그래밍 언어에서 쉽게 생성 할 수 있으며 일반 텍스트 편집기를 사용하는 크런치에서 사람이 읽을 수있는 작고 읽기 편하며 유비쿼터스입니다.

문제는 텍스트 필드의 날짜 뿐만 아니라 숫자 도 텍스트에서 숫자로 변환되는 것입니다. 이것이 문제가되는 몇 가지 예 :

  • 우편 번호
  • 전화 번호
  • 정부 ID 번호

때로는 하나 이상의 0으로 시작할 있으며 숫자로 변환하면 버려집니다. 또는 값에 수학 연산자와 혼동 될 수있는 문자가 포함되어 있습니다 (날짜 : /,-).

앞에서 언급 한 것처럼 "prepending ="솔루션 이 이상적이지 않다고 생각할 수있는 두 가지 경우 는

  • 파일을 MS Excel 이외의 프로그램으로 가져올 수있는 경우 (MS Word의 편지 병합 기능이 떠오름)
  • 인간의 가독성이 중요한 곳.

이 문제를 해결하기위한 해킹

값에 숫자가 아닌 문자 및 / 또는 날짜가 아닌 문자를 사전 / 추가하면 값이 텍스트로 인식되고 변환되지 않습니다. 인쇄되지 않은 문자는 표시된 값을 변경하지 않기 때문에 좋습니다. 그러나 일반 이전 공백 문자 (\ s, ASCII 32)는 Excel에서 잘린 다음 값이 계속 변환되므로이 기능이 작동하지 않습니다. 그러나 잘 작동하는 다양한 다른 인쇄 및 비 인쇄 공간 문자가 있습니다. 그러나 가장 쉬운 방법 은 간단한 탭 문자 (\ t, ASCII 9)추가 (뒤에 추가)하는 것입니다.

이 방법의 장점 :

  • 키보드 또는 기억하기 쉬운 ASCII 코드 (9)로 제공
  • 수입을 귀찮게하지 않습니다.
  • 일반적으로 편지 병합 결과를 방해하지 않습니다 (템플릿 레이아웃에 따라 다름). 일반적으로 줄 끝에 넓은 공간을 추가합니다. (그러나 이것이 문제가되는 경우 너비가 0 인 공간 (ZWSP, 유니 코드 U + 200B)과 같은 다른 문자를보십시오.
  • 메모장 등에서 CSV를 볼 때 큰 방해가되지는 않습니다.
  • Excel (또는 메모장 등)에서 찾기 / 바꾸기로 제거 할 수 있습니다.
  • CSV 를 가져올 필요는 없지만 Excel에서 CSV 를 열려면 두 번 클릭하면 됩니다.

탭을 사용하지 않으려는 이유가있는 경우 유니 코드 테이블에서 다른 것이 있는지 찾아보십시오.

다른 옵션

최신 MS Excel 버전에서 가져 오기 위해 특정 형식을 허용하고 .XLS 형식과 비슷한 옵션을 더 많이 허용하는 XML 파일을 생성하는 것이 될 수도 있지만 이에 대한 경험은 없습니다.

다양한 옵션이 있습니다. 요구 사항 / 응용 프로그램에 따라 하나가 다른 것보다 낫습니다.


부가

MS Excel의 최신 버전 (2013+)은 더 이상 스프레드 시트 형식으로 CSV를 열지 않는다고 말해야합니다. 워크 플로에서 속도가 한 번 더 높아져 Excel의 유용성이 떨어집니다. 예를 들어이 Stackoverflow : Excel 2013에서 .csv 파일을 올바르게 표시하는 방법은 무엇입니까? .


6
\t분리 문자에 추가 한 후 올바른 선행 0을 얻었습니다 ;... MS Office를 젠장하는 데 왜 2 분 이상이 걸렸습니까?
Morten Jensen

2
모든 값의 끝에 \ t를 추가하면 실제로 속임수입니다. 해키 해결 방법이지만 실제로는 잘 작동합니다. 전자는 다른 도구에서 작업하기가 어려울 수 있으므로 동일한 '='인 수식 트릭보다 이것을 선호합니다.
ocroquette

3
당신에게 감사를 표할 수있는 공감대가 충분하지 않습니다. 메모장 ++ ','에서 '\ t, \ t'의 검색 및 바꾸기 (첫 번째 및 마지막 열도 수용)는 매력처럼 작동합니다. 감사.
Asaf

1
MySQL 쿼리 (PHP를 통한 CSV 출력)에서 CONCAT ( '\ t', column_name)를 사용했습니다. 트릭도 했어요. 감사!
Just Plain High

1
좋은 생각이야 아아, Numbers는 Excel보다 조금 더 똑똑하고 탭 트릭에 빠지지 않습니다. 내가 생각해 낼 수있는 가장 좋은 대안은 선도적 인 것입니다 '. 왜냐하면 잘 이해되고 산만하지 않기 때문입니다 ...하지만 보이지 않는 것이 좋습니다.
Heath Raftery

101

Jarod의 솔루션과 Jeffiekins가 제기 한 문제를 해결하면서 수정할 수 있습니다.

"May 16, 2011"

"=""May 16, 2011"""

6
텍스트가 특정 길이보다 길면 Excel 2010에서 작동하지 않습니다.
steve

1
@Andrew,이 "수정"은 "날짜 사이의 값 이 필요할 경우 문제를 일으킬 것 입니다.
Pacerier

8
참고로, Excel 파일을 저장하면 =가 사라지고 다음에 열 때 다시 사각형으로 돌아갑니다.
d512

내 경험은 스티브 나 d512와 일치하지 않습니다. Excel 2013에서 들어오는 .csv에서 작동하며 .xlsx로 저장 한 후에는 되 돌리지 않습니다. "806676", "None", "41", "=" "2011 년 5 월 16 일" "", "100.00", "False"
tbc0

1
@ tbc0 "806676","None","41","=""05-16-2011""","100.00","False"대신 시도 하면 저장 후 다시로드하면 하이픈이있는 텍스트가 사라집니다.
NetMage

65

비슷한 문제가 있었고 이것은 CSV 파일 내용을 편집하지 않고도 도움이되는 해결 방법입니다.

파일 이름을 ".csv"이외의 다른 이름으로 지정할 수있는 경우 "Myfile.txt"또는 "Myfile.csv.txt"와 같이 ".txt"확장명으로 파일 이름을 지정할 수 있습니다. 그런 다음 끌어서 놓기가 아니라 파일-> 열기 또는 가장 최근에 사용한 파일 목록을 사용하여 Excel에서 열면 "텍스트 가져 오기 마법사"가 제공됩니다.

마법사의 첫 페이지에서 파일 유형으로 "구분"을 선택하십시오.

마법사의 두 번째 페이지에서 ","를 구분 기호로 선택하고 값을 따옴표로 묶은 경우 텍스트 한정자를 선택하십시오.

세 번째 페이지에서 모든 열을 개별적으로 선택하고 "일반"대신 "텍스트"유형을 지정하여 Excel이 데이터를 엉망으로 만드는 것을 막으십시오.

이것이 당신이나 비슷한 문제를 가진 누군가를 돕기를 바랍니다!


2
그건 그렇고, 나는 이것을 처음 발견하지 못했습니다. risingline.com/use-excel-read-csv-without-reformatting.php 이 웹 페이지에는 마법사의 세 번째 페이지에서 열을 Shift- 클릭하여 각 유형을 할당하기 전에 열을 모두 선택하는 유용한 지침이 있습니다. "본문".
rainerbit

이것은 날짜 값에는 효과가 있지만 Excel에서 숫자로 해석하는 것은 효과가없는 것 같습니다. 문자열이 모두 숫자와 쉼표 인 경우 "텍스트"형식은 과학적 숫자 형식이됩니다.
마이클 - 클레이 셔키는 어디

3
이것은 나를 위해 완벽하게 작동했으며 파일 이름을 .txt로 바꾸는 것 외에는 파일을 변경하지 않았습니다. 감사합니다.
Kevin

1
불행히도 Excel에서는 처음 6 개 열에 대해서만이 작업을 수행 할 수 있습니다. 더 필요한 경우 csv의 내용을 복사하고 Excel 파일을 만들고 비우고 모든 열 / 행을 선택하고 유형을 텍스트로 설정 한 다음 내용을 붙여 넣고 Data | 텍스트를 열로
nachocab

이것이 최선의 해결책이며 답변으로 표시해야합니다.

28

경고 : Excel '07 (적어도) 버그가 있습니다 : 필드의 내용에 쉼표가 있으면 = "필드, 내용"을 올바르게 구문 분석하지 않지만 쉼표 뒤에있는 모든 것을 인용 부호에 관계없이 다음 필드.

내가 찾은 유일한 해결 방법은 필드 내용에 쉼표가 포함될 때 =를 제거하는 것입니다.

이것은 Excel에서 정확히 "올바른"을 나타내는 것이 불가능한 일부 필드가 있음을 의미하지만 지금까지 아무도 놀라지 않을 것이라고 믿습니다.


방금 Excel 2007에서 이것을 테스트했으며 올바르게 작동합니다. 그러나 따옴표 앞에 선행 공백이 있으면 쉼표를 올바르게 구문 분석하지 않습니다.
Sunny88

8
필드를 인용하는 올바른 방법은 전체 필드를 인용 한 다음 내부 인용 부호를 큰 따옴표로 묶는 것입니다. 그래서 "=" "필드, 내용" "" tools.ietf.org/html/rfc4180
피터 스티븐스

2
경우 @PeterStephens는,이 작동하지 않습니다 field, content"그 안에. 예"=""field, co""ntent"""
Pacerier

1
@Pacerier 아마도 포함 된 따옴표가 큰 따옴표로 바뀌어야합니다 """".
ErikE

@ErikE의 제안이 올바른지 확인할 수 있습니다. 값 필드의 경우 1"2, 경우에 당신은 (그냥 같이있을 떠나는 반대로이 트릭을 사용하기로 선택한 "1""2"파일의 - 엑셀 이미 텍스트로입니다 처리 한 것), 최대 엑셀 타겟팅 CSV 파일 끝에서 다음 최종 올바른 문자열을 인 "=""1""""2""".
Tao

22

C #으로 CSV 파일에 쓸 문자열을 만드는 동안 다음과 같이 형식을 지정해야했습니다.

"=\"" + myVariable + "\""

2
이것은 Rails에서도 나를 위해 깨어났습니다. 감사합니다
Vieenay Siingh

3
Java에서도 작동
Shoyo

Papa Parse를 사용하여 JavaScript로 나를 위해 일했습니다.
wobsoriano

17

2018 년

나를 위해 일한 유일한 올바른 솔루션 (및 CSV를 수정하지 않은 경우) ).

엑셀 2010 :

  1. 새 통합 문서 만들기
  2. 데이터> 텍스트에서> CSV 파일 선택
  3. 팝업에서 "구분"라디오 버튼을 선택한 다음 "다음>"을 클릭하십시오.
  4. 구분 기호 확인란 : "쉼표"만 선택하고 다른 옵션을 선택 취소 한 다음 "다음>"
  5. "데이터 미리보기"에서 맨 오른쪽으로 스크롤 한 다음 Shift 키를 누른 상태에서 마지막 열을 클릭하십시오 (모든 열이 선택됨). "열 데이터 형식"에서 "텍스트"라디오 버튼을 선택한 다음 "마침"을 클릭하십시오.

Excel Office365 : (클라이언트 버전)

  1. 새 통합 문서 만들기
  2. 데이터> 텍스트 / CSV에서> CSV 파일 선택
  3. 데이터 유형 감지> 감지하지 않음

참고 : Excel office365 (웹 버전)는이 글을 쓰고 있으므로 그렇게 할 수 없습니다.


3
이것은 CSV 파일을 미리 변경하지 않고 작동하므로 이것이 정답이라고 생각합니다.

정답처럼 보입니다. 나는 큰 희망을 가지고 있었다. 그러나 MacOS (office365)에서는 모든 열을 선택할 수 없습니다 . 텍스트 가져 오기 마법사에 표시된 미리보기 창에 가로 스크롤이 없어 보이는 열만 선택할 수 있습니다. 나는 지름길 (CMD + A 또는 다른 것들)을 사용해 보았습니다. "감지하지 않음"옵션도 없습니다. 나는 황폐하다.
normanius

Excel office 365에서 파일, 옵션, 데이터를 선택합니다. 필요한 경우 레거시 데이터 가져 오기 마법사를 표시하는 확인란이 있습니다.
커트 슐츠

15

Excel 2010에서 새 시트를 엽니 다. 데이터 리본에서 "텍스트에서 외부 데이터 가져 오기"를 클릭하십시오. CSV 파일을 선택한 다음 "열기"를 클릭하십시오. "다음"을 클릭하십시오. "탭"을 선택 취소하고 "쉼표"옆에 확인 표시를 한 다음 "다음"을 클릭하십시오. 첫 번째 열의 아무 곳이나 클릭하십시오. Shift 키를 누른 상태에서 마지막 열을 클릭 할 수있을 때까지 슬라이더를 가로 질러 끈 다음 Shift 키를 놓습니다. "텍스트"라디오 버튼을 클릭 한 다음 "마침"을 클릭하십시오.

모든 열은 CSV 파일에있는 것처럼 텍스트로 가져옵니다.


1
나는 같은 문제에 부딪 쳤지 만 @Rob의 지시를 따르면 완벽하게 작동합니다!. 감사합니다
Milacay

2
텍스트에서 데이터 도우미는 불행히도 여러 줄 셀을 지원하지 않습니다. 이러한 여러 줄 텍스트가 나타나면 첫 번째 줄 이후의 모든 줄을 새 행에 기록하여 전체 가져 오기를 중단합니다. CSV 파일을 두 번 클릭하여 열면 줄 바꿈이 올바르게 해석됩니다. Microsoft를 젠장 ...
CodeManX

1
불행히도 이것은 Excel의 무작위 서식 "도움말"문제를 해결하지 못합니다. 텍스트 DEC1은 여전히 12 월 1 일로 변경됩니다 . YYYY-MM-DD의 텍스트 가 DD / MM / YYYY로 전환되는 것과 동일 합니다 . :(
Baracus

12

MARC1, MARCH1, SEPT1 등과 같은 유전자 이름을 사용하는 사람들에게는 오히려 Microsoft Office 2016 릴리스의 문제가 여전히 문제입니다. 그런 다음 Excel 사용자와 열거 나 공유됩니다.

  1. CSV 파일을 텍스트 (메모장)로 엽니 다
  2. 복사하십시오 (ctrl + a, ctrl + c).
  3. 새로운 엑셀 시트에 붙여 넣으십시오-모두 긴 텍스트 문자열로 한 열에 붙여 넣습니다.
  4. 이 열을 선택 / 선택하십시오.
  5. 데이터- "텍스트를 열로 ..."으로 이동하고 열린 창에서 "구분"(다음)을 선택하십시오. "쉼표"가 표시되어 있는지 확인하십시오 (이미 데이터가 아래 열로 분리되어 표시됨) (다음),이 창에서 원하는 열을 선택하고 텍스트 대신 일반 텍스트로 표시 할 수 있습니다 (마침).

HTH


수동 노력도 나에게 호소력이 없었습니다. 그러나 모든 가능성을 다 사용한 후에는 가장 강력하고 신뢰할 수있었습니다.
아나 마리아 멘데스 페레이라

그럼에도 불구하고 일괄 처리.
아나 마리아 멘데스 페레이라

이것은 실제로 가장 적은 양의 작업이 필요한 최고의 답변입니다. 파일을 구문 분석하지 않도록 옵션을 설정할 수 있기를 바랍니다.
굴림

당신은 또한 다음가 자동으로 deliminate, 탭 모든 쉼표를 대체 할 수있다

10

다음은 csv 파일을 처음 생성 할 때 직장에서 사용하는 간단한 방법입니다. 값을 조금 변경하여 모든 응용 프로그램에 적합하지는 않습니다.

CSV의 모든 값 앞에 공백을 추가하십시오.

이 공간은 "1", "2.3"및 "-2.9e4"와 같은 숫자에서 Excel로 제거되지만 "01/10/1993"과 같은 날짜와 "TRUE"와 같은 부울로 유지되어 "TRUE"로 변환되지 않습니다. 엑셀의 내부 데이터 형식.

또한 읽을 때 큰 따옴표가 압축되지 않으므로 CSV로 텍스트를 만드는 완벽한 방법은 Excel에서도 변경되지 않습니다. 즉 (작은 따옴표를 사용하여 입력 내용을 표시) ' "3.1415"'. 그런 다음 Excel에서 항상 큰 문자열로 묶고 공백이 앞에 붙는 것을 제외하고는 항상 원래 문자열을 갖습니다. 따라서 수식 등의 문자열을 고려해야합니다.


이것은 나를 위해 일했습니다. 1-1-1과 같은 일부 값이 자동으로 날짜로 변환되었습니다. 언급했듯이 공간이 전송되어 값이 변경되지만 파싱 할 때 그 부분을 스트립으로 처리합니다.
jacklin

날짜 해석 또는 선행 0 제거를 방지하기 위해 공간이 더 이상 작동하지 않습니다. 그러나 "\xA0"대신 공백이 아닌 공간을 사용할 수 있습니다 .
Doin

8

(엑셀 2003 가정 ...)

텍스트-열 마법사를 사용하는 경우 3 단계에서 각 열의 데이터 유형을 지정할 수 있습니다. 미리보기에서 열을 클릭하고 오작동 열을 "일반"에서 "텍스트"로 변경하십시오.


8
사용자가 가져 오기 프로세스를 사용하도록 강제 할 수있는 경우 이는 탁월한 선택입니다.

어쨌든 .csv로 내보낼 때 TEXT 열의 숫자가 NUMBERS로 변환되므로 실제로 문제를 해결하지 못합니다.
Chonez

8

이것은 파일 자체를 엉망으로 만들지 않고 이것을 달성하는 방법을 아는 유일한 방법입니다. 평소와 마찬가지로 Excel에서 책상 위에 머리를 몇 시간 동안 두들겨서 이것을 배웠습니다.

.csv 파일 확장명을 .txt로 변경하십시오. 이렇게하면 파일을 열 때 Excel에서 파일을 자동 변환하지 않습니다. 방법은 다음과 같습니다. Excel을 빈 워크 시트로 열고 빈 시트를 닫은 다음 File => Open을 열고 .txt 확장자를 가진 파일을 선택하십시오. 그러면 Excel에서 "텍스트 가져 오기 마법사"를 열어 파일 해석 방법에 대한 질문을합니다. 먼저 구분 기호 (쉼표, 탭 등)를 선택한 다음 (중요한 부분) 열 세트를 선택하고 서식을 선택하십시오. 파일에있는 내용을 정확히 원하면 "텍스트"를 선택하면 구분 기호 사이에있는 내용 만 Excel에 표시됩니다.


SO의 해당 데이터로 작업 맥 2011 엑셀 작업 2015년 3월 3일에 나를 위해이 단지 일을 잘 (버전 14.4.8 150116) awk- 값을 날짜 등을 피하기 재 포맷 , 문제는 오히려 엑셀 함께 이상의 awk질문 제목에도 불구하고,.
Jonathan Leffler

4

(EXCEL 2007 이상)

소스 파일을 편집하지 않고 Excel에서 날짜 형식을 "감지"하지 않도록하는 방법

어느 한 쪽:

  • 파일 이름을 .txt로 바꾸십시오
  • 그렇게 할 수 없으면 Excel에서 직접 CSV 파일을 여는 대신 새 통합 문서를 만든 다음
    Data > Get external data > From Text
    CSV 로 이동 하십시오.

어느 쪽이든 가져 오기 옵션이 표시되고 날짜가 포함 된 각 열을 선택하고 Excel에서 "일반"이 아닌 "텍스트"로 형식화하도록 지시합니다.


4

이 동일한 문제에 대해 내가 한 일은 Excel에서 파일을 열기 전에 각 CSV 값 앞에 다음을 추가하는 것입니다 : "=" ""및 CSV 값 뒤에 큰 따옴표. 예를 들어 다음 값을 사용하십시오.

012345,00198475

Excel에서 열기 전에 다음과 같이 변경해야합니다.

"="""012345","="""00198475"

이렇게하면 모든 셀 값이 Excel에서 수식으로 표시되므로 숫자, 날짜 등으로 형식이 지정되지 않습니다. 예를 들어 012345 값은 다음과 같이 나타납니다.

="012345"

다른 접근법은 csv에 숫자를 다음과 같이 저장하는 것입니다 1234500198475E-8. 이런 식으로 Excel에서 추가 계산이 여전히 가능합니다.
bert bruynooghe '

4

여기에 제공된 솔루션 중 어느 것도 좋은 솔루션이 아닙니다. 개별 사례에서 작동하지만 최종 디스플레이를 제어하는 ​​경우에만 가능합니다. 내 예를 들어 보자. 내 작품은 소매점에 판매하는 제품 목록을 만든다. 이것은 CSV 형식이며 부품 코드를 포함하며 일부는 0으로 시작하며 제조업체가 설정하지 않습니다 (우리가 통제하지 않음). 선행 0을 제거하면 실제로 다른 제품과 일치 할 수 있습니다. 소매 고객은 백엔드 처리 프로그램으로 인해 목록을 CSV 형식으로 원합니다. 백엔드 처리 프로그램은 통제 할 수 없으며 고객마다 다릅니다. 따라서 CSV 파일의 형식을 변경할 수 없습니다. 접두사 '='도없고 탭도 추가되지 않았습니다. 원시 CSV 파일의 데이터가 정확합니다. 고객이 Excel에서 해당 파일을 열면 문제가 시작됩니다. 그리고 많은 고객들이 실제로 컴퓨터에 정통하지 않습니다. 이메일 첨부 파일을 열어서 저장할 수 있습니다. 우리는 데이터를 두 가지 다른 형식으로 제공하려고합니다. 하나는 Excel과 친숙합니다 (TAB을 추가하여 위에서 제안한 옵션을 사용하고 다른 하나는 '마스터'로 사용하지만 일부 고객은 왜 그런지 이해하지 못하기 때문에 희망적인 생각이 될 수 있습니다 우리는 왜 스프레드 시트에서 때때로 '잘못된'데이터를 보는 이유를 계속 설명하고 있습니다 .Microsoft가 올바르게 변경하기 전까지는 최종 사용자의 방법을 통제 할 수없는 한 적절한 해결 방법이 없습니다. 파일을 사용하십시오. 그러나 일부 고객은 왜이 작업을 수행해야하는지 이해하지 못하기 때문에 이는 바람직한 생각 일 수 있습니다. 그 동안 스프레드 시트에 '잘못된'데이터가 표시되는 이유를 계속 설명합니다. 최종 사용자가 파일을 사용하는 방법을 제어 할 수없는 한 Microsoft가 적절히 변경하기 전까지는 이에 대한 적절한 해결책이 없습니다. 그러나 일부 고객은 왜이 작업을 수행해야하는지 이해하지 못하기 때문에 이는 바람직한 생각 일 수 있습니다. 그 동안 스프레드 시트에 '잘못된'데이터가 표시되는 이유를 계속 설명합니다. 최종 사용자가 파일을 사용하는 방법을 제어 할 수없는 한 Microsoft가 적절히 변경하기 전까지는 이에 대한 적절한 해결책이 없습니다.


데이터 왼쪽의 여분의 공간이 중요하지 않은 경우 데이터 앞에 "\xA0"공백이 아닌 부분 을 추가하여 Excel의 문제를 해결할 수 있습니다 .
Doin

3

저는 이번 주에이 관습을 겪게되었습니다. 이는 훌륭한 접근 방식 인 것 같지만 어느 곳에서나 참조 할 수는 없습니다. 그것에 익숙한 사람이 있습니까? 소스를 인용 할 수 있습니까? 나는 몇 시간과 시간을 보지 않았지만 누군가 가이 접근법을 인식하기를 바라고 있습니다.

예 1 : = ( "012345678905")는 012345678905로 표시됩니다 .

실시 예 2 : = ( "1954년 12월 12일")과 같은 디스플레이 1954년 12월 12일 하지 1954년 12월 12일 .


2

Excel이 아닙니다. Windows는 공식, 데이터를 날짜로 인식하고 자동 수정합니다. Windows 설정을 변경해야합니다.

"제어판"(-> "클래식보기로 전환")-> "국가 및 언어 옵션"-> "국가 옵션"-> "사용자 정의 ..."-> "숫자"-> 기호 변경 당신이 원하는 것에 따라.

http://www.pcreview.co.uk/forums/enable-disable-auto-convert-number-date-t3791902.html

예를 들어 고객의 컴퓨터에서 이러한 설정을 변경하지 않으면 데이터 대신 날짜가 표시됩니다.


2

안녕하세요. 같은 문제가 있습니다.

이 vbscipt를 작성하여 다른 CSV 파일을 만듭니다. 새로운 CSV 파일은 각 필드의 글꼴로 공백이 있으므로 Excel은 텍스트로 이해합니다.

따라서 아래 코드 (예 : Modify_CSV.vbs)를 사용하여 .vbs 파일을 만들고 저장 한 후 닫습니다. 원본 파일을 vbscript 파일로 끌어서 놓습니다 . "SPACE_ADDED"를 사용하여 같은 위치에 파일 이름으로 새 파일을 만듭니다.

Set objArgs = WScript.Arguments

Set objFso = createobject("scripting.filesystemobject")

dim objTextFile
dim arrStr ' an array to hold the text content
dim sLine  ' holding text to write to new file

'Looping through all dropped file
For t = 0 to objArgs.Count - 1
    ' Input Path
    inPath = objFso.GetFile(wscript.arguments.item(t))

    ' OutPut Path
    outPath = replace(inPath, objFso.GetFileName(inPath), left(objFso.GetFileName(inPath), InStrRev(objFso.GetFileName(inPath),".") - 1) & "_SPACE_ADDED.csv")

    ' Read the file
    set objTextFile = objFso.OpenTextFile(inPath)


    'Now Creating the file can overwrite exiting file
    set aNewFile = objFso.CreateTextFile(outPath, True) 
    aNewFile.Close  

    'Open the file to appending data
    set aNewFile = objFso.OpenTextFile(outPath, 8) '2=Open for writing 8 for appending

    ' Reading data and writing it to new file
    Do while NOT objTextFile.AtEndOfStream
        arrStr = split(objTextFile.ReadLine,",")

        sLine = ""  'Clear previous data

        For i=lbound(arrStr) to ubound(arrStr)
            sLine = sLine + " " + arrStr(i) + ","
        Next

        'Writing data to new file
        aNewFile.WriteLine left(sLine, len(sLine)-1) 'Get rid of that extra comma from the loop


    Loop

    'Closing new file
    aNewFile.Close  

Next ' This is for next file

set aNewFile=nothing
set objFso = nothing
set objArgs = nothing

2

CSV 파일을 수정하지 않고 다음을 수행 할 수 있습니다.

  1. Excel 셀 서식 옵션을 "텍스트"로 변경하십시오.
  2. 그런 다음 "텍스트 가져 오기 마법사"를 사용하여 csv 셀을 정의하십시오.
  3. 가져온 데이터를 삭제하면
  4. 그런 다음 일반 텍스트로 붙여 넣기

Excel은 자동 날짜 형식을 무시하고 csv 셀을 텍스트 형식으로 올바르게 서식 지정하고 분리합니다.

어리석은 해결 방법이지만 가져 오기 전에 csv 데이터를 수정하는 것보다 낫습니다. Andy Baird와 Richard는이 방법을 회피했지만 몇 가지 중요한 단계를 놓쳤다.


1

나는 이것이 오래된 실이라는 것을 안다. 나와 같은 사람들은 여전히 ​​powershell com object를 통해 office 2013을 사용 하여이 문제가 발생하면 opentext 메소드를 사용할 수 있습니다 . 문제는이 방법이 많은 인수를 가지고 있으며 때로는 상호 배타적이라는 것입니다. 이 문제를 해결하기 위해이 게시물 에서 소개 된 invoke-namedparameter 메서드를 사용할 수 있습니다 . 예를 들면

$ex = New-Object -com "Excel.Application"
$ex.visible = $true
$csv = "path\to\your\csv.csv"
Invoke-NamedParameter ($ex.workbooks) "opentext" @{"filename"=$csv; "Semicolon"= $true}

불행히도 셀이 줄 바꿈을 포함 할 때이 방법이 어떻게 든 CSV 파싱을 중단한다는 것을 알았습니다. 이것은 csv에서 지원되지만 Microsoft 구현은 버그가있는 것으로 보입니다. 또한 어떻게 든 독일 특정 문자를 감지하지 못했습니다. 올바른 문화를 제공해도이 행동은 바뀌지 않았습니다. 모든 파일 (csv 및 스크립트)은 utf8 인코딩으로 저장됩니다. 먼저 셀별로 csv 셀을 삽입하기 위해 다음 코드를 작성했습니다.

$ex = New-Object -com "Excel.Application"
$ex.visible = $true;
$csv = "path\to\your\csv.csv";
$ex.workbooks.add();
$ex.activeWorkbook.activeSheet.Cells.NumberFormat = "@";
$data = import-csv $csv -encoding utf8 -delimiter ";"; 
$row = 1; 
$data | %{ $obj = $_; $col = 1; $_.psobject.properties.Name |%{if($row -eq1){$ex.ActiveWorkbook.activeSheet.Cells.item($row,$col).Value2= $_ };$ex.ActiveWorkbook.activeSheet.Cells.item($row+1,$col).Value2 =$obj.$_; $col++ }; $row++;}

그러나 이것은 매우 느리기 때문에 대안을 찾았습니다. 외관상 Excel에서는 행렬을 사용하여 셀 범위의 값을 설정할 수 있습니다. 그래서이 블로그 의 알고리즘을 사용하여 csv를 다중 배열로 변환했습니다.

function csvToExcel($csv,$delimiter){
     $a = New-Object -com "Excel.Application"
     $a.visible = $true

    $a.workbooks.add()
     $a.activeWorkbook.activeSheet.Cells.NumberFormat = "@"
     $data = import-csv -delimiter $delimiter $csv; 
     $array = ($data |ConvertTo-MultiArray).Value
     $starta = [int][char]'a' - 1
     if ($array.GetLength(1) -gt 26) {
         $col = [char]([int][math]::Floor($array.GetLength(1)/26) + $starta) + [char](($array.GetLength(1)%26) + $Starta)
     } else {
         $col = [char]($array.GetLength(1) + $starta)
     }
     $range = $a.activeWorkbook.activeSheet.Range("a1:"+$col+""+$array.GetLength(0))
     $range.value2 = $array;
     $range.Columns.AutoFit();
     $range.Rows.AutoFit();
     $range.Cells.HorizontalAlignment = -4131
     $range.Cells.VerticalAlignment = -4160
}

 function ConvertTo-MultiArray {
     param(
         [Parameter(Mandatory=$true, Position=1, ValueFromPipeline=$true)]
         [PSObject[]]$InputObject
     )
     BEGIN {
         $objects = @()
         [ref]$array = [ref]$null
     }
     Process {
         $objects += $InputObject
     }
     END {
         $properties = $objects[0].psobject.properties |%{$_.name}
         $array.Value = New-Object 'object[,]' ($objects.Count+1),$properties.count
         # i = row and j = column
         $j = 0
         $properties |%{
             $array.Value[0,$j] = $_.tostring()
             $j++
         }
         $i = 1
         $objects |% {
             $item = $_
             $j = 0
             $properties | % {
                 if ($item.($_) -eq $null) {
                     $array.value[$i,$j] = ""
                 }
                 else {
                     $array.value[$i,$j] = $item.($_).tostring()
                 }
                 $j++
             }
             $i++
         }
         $array
     } 
} 
csvToExcel "storage_stats.csv" ";"

위의 코드를 사용하면 CSV를 Excel로 변환해야합니다. csv의 경로와 하단의 구분 문자를 변경하십시오.


너무 복잡하다
굴림

1

필자의 경우 R을 사용하여 생성 된 CSV 파일의 "Sept8"은 Excel 2013에서 "8-Sept"로 변환되었습니다. xlsx 패키지의 write.xlsx2 () 함수를 사용하여 xlsx 형식으로 출력 파일을 생성하면 문제가 해결되었습니다. 원하지 않는 변환없이 Excel에서로드 할 수 있습니다. 따라서 csv 파일이 제공되면 write.xlsx2 () 함수를 사용하여 R로로드하고 xlsx로 변환 해 볼 수 있습니다.


귀하의 답변이 왜 다운되었는지 모르겠습니다. 적어도 R을 사용하는 사람들에게 유용합니다.이 답변이 도움이되었습니다. 감사합니다 :)
sriharsha KB

1

Google 드라이브 (또는 Mac을 사용하는 경우 숫자)를 사용하는 해결 방법 :

  1. Excel에서 데이터를 엽니 다
  2. 잘못된 데이터가있는 열의 형식을 텍스트 (서식> 셀> 숫자> 텍스트)로 설정하십시오.
  3. .csv를 Google 드라이브에로드하고 Google 스프레드 시트에서 엽니 다
  4. 문제의 열을 복사
  5. 텍스트로 Excel에 열 붙여 넣기 (편집> 붙여 넣기 특수> 텍스트)

또는 3 단계에서 Mac을 사용하는 경우 숫자로 데이터를 열 수 있습니다.


이것은 해결책없이 몇 시간 동안 노력하는 것이 아니라 제정신의 솔루션입니다.
imsrgadich 2016 년

1

(EXCEL 2016 이상에서는 실제로 이전 버전에서는 시도하지 않았습니다)

  1. 새 빈 페이지를 엽니 다
  2. "데이터"탭으로 이동
  3. "텍스트 / CSV에서"를 클릭하고 csv 파일을 선택하십시오
  4. 데이터가 올바른지 미리보기에서 확인하십시오.
  5. 일부 열이 날짜로 변환되는 경우 "편집"을 클릭 한 다음 열 머리글에서 달력을 클릭하여 텍스트 유형을 선택하십시오.
  6. "닫기 및로드"를 클릭하십시오

0

Excel 2003에서 2007까지이 작업을 수행하는 간단한 방법을 찾았습니다. 빈 xls 통합 문서를 엽니 다. 그런 다음 데이터 메뉴로 이동하여 외부 데이터를 가져옵니다. csv 파일을 선택하십시오. 마법사를 진행 한 다음 "열 데이터 형식"에서 "텍스트"로 강제해야하는 열을 선택하십시오. 그러면 전체 열을 텍스트 형식으로 가져와 Excel에서 특정 셀을 날짜로 처리하지 못하게됩니다.


0

이 문제는 여전히 Mac Office 2011 및 Office 2013에서 발생하며이를 방지 할 수 없습니다. 그런 기본적인 것 같습니다.

필자의 경우 CSV 내에 "1-2"및 "7-12"와 같은 값이 쉼표로 올바르게 묶여 있습니다. 이는 나중에 일반 텍스트로 변환하려고하면 Excel 내의 날짜로 자동 변환됩니다. 또한 바코드 및 EAN 번호에서 발견 된 많은 수를 다시 123E + 숫자로 다시 변환 할 수없는 형식으로 다시 포맷합니다.

Google 드라이브의 Google 스프레드 시트는 숫자를 날짜로 변환하지 않습니다. 바코드에는 3 자마다 쉼표가 있지만 쉽게 제거 할 수 있습니다. MAC / Windows CSV를 다룰 때 특히 CSV를 잘 처리합니다.

누군가를 언젠가 구할 수도 있습니다.


0

가장 쉬운 해결책 방금 오늘 이것을 알아 냈습니다.

  • Word에서 열기
  • 모든 하이픈을 대시로 바꿉니다.
  • 저장하고 닫습니다
  • Excel에서 열기

편집이 끝나면 항상 Word에서 다시 열어서 대시를 하이픈으로 다시 바꿀 수 있습니다.


0

과학적 표기법으로 계속 변환하는 신용 ​​카드 번호로이 작업을 수행합니다. .csv를 Google 스프레드 시트로 가져옵니다. 가져 오기 옵션을 통해 숫자 값의 자동 서식을 비활성화 할 수 있습니다. 민감한 열을 일반 텍스트로 설정하고 xlsx로 다운로드합니다.

그것은 끔찍한 워크 플로우이지만 적어도 내 가치는 그대로 유지됩니다.


다른 답변 중 일부를 읽고 귀찮게하면 누군가가 이미 여기에서 제안한 것을 볼 수 있습니다 .
Laurel

귀찮게 했어 고마워 자동 서식 선택이 가져 오기 프로세스의 새로운 부분임을 암시합니다. 내 대답은 나처럼 시트를 사용 하여이 특정 문제를 해결 해야하는 사람들에게 매우 구체적인 워크 플로우를 제공합니다. 내 생각에 이것은 별도의 답변을 얻었습니다. 음조를 약간만 조정하면 실제로 주석이 도움이되는 것으로 해석 될 수 있으며, 이는이 웹 사이트 제품군의 핵심입니다.
Brendonwbrown

그러나 다른 답변에서 언급했듯이 Excel의 텍스트 가져 오기를 사용하여 CSV 파일을 가져오고 시트를 방해하지 않을 수 있습니다.
NetMage

0

이 vba 매크로를 작성하여 기본적으로 출력 범위를 텍스트로 붙여서 숫자를 붙여 넣었습니다. Excel에서 날짜로 해석하지 않고 8/11, 23/6, 1/3 등의 값을 붙여 넣을 때 나에게 완벽하게 작동합니다.

Sub PasteAsText()
' Created by Lars-Erik Sørbotten, 2017-09-17
Call CreateSheetBackup

Columns(ActiveCell.Column).NumberFormat = "@"

Dim DataObj As MSForms.DataObject
Set DataObj = New MSForms.DataObject
DataObj.GetFromClipboard

ActiveCell.PasteSpecial

End Sub

이것이 다른 사람들에게도 도움이되는지 알고 싶습니다. 나는이 문제에 대한 해결책을 잠시 동안 찾고 있었지만 입력 텍스트 앞에 '를 삽입하지 않는 빠른 vba 솔루션을 보지 못했습니다. 이 코드는 원래 형식으로 데이터를 유지합니다.


-1

필드 시작 부분에 반전 된 쉼표를 넣으면 텍스트로 해석됩니다.

예 : 25/12/2008된다'25/12/2008

가져올 때 필드 유형을 선택할 수도 있습니다.


9
데이터 시작 부분에 '를 원하지 않습니다.

27
-1. '는 Excel에 직접 입력 한 경우에만 작동하지만 CSV에서는 작동하지 않습니다. 가져 오기 후 Excel 셀에 추가'문자가 있습니다.
TMS

-1

다른 방법 :

변경하려는 열의 형식을 '텍스트'로 변환하십시오. 보존, 복사하려는 모든 셀을 선택하십시오. 해당 열을 선택 취소하지 않고 "편집> 선택하여 붙여 넣기> 값으로"

CSV로 저장하십시오. 셀 형식을 CSV 파일로 저장할 수 없으므로 파일을 다시 열면 날짜 형식으로 표시되므로 파일에서 마지막으로 수행해야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.