Excel에서 작동하도록 CSV 파일의 쉼표와 음성 표시를 어떻게 이스케이프해야합니까?


110

탭이 아닌 쉼표로 구분 된 CSV 파일을 생성하고 있습니다. 내 사용자는 CSV 파일을 두 번 클릭하여 Excel에서 열 가능성이 높습니다. 내 데이터에는 쉼표와 음성 표시가 포함될 수 있으므로 다음과 같이 이스케이프합니다.

Reference, Title, Description
1, "My little title", "My description, which may contain ""speech marks"" and commas."
2, "My other little title", "My other description, which may also contain ""speech marks"" and commas."

내가 아는 한 항상 그렇게하는 방법이었습니다. 여기 내 보글이 있습니다. Excel 2010에서이 파일을 열면 이스케이프가 존중되지 않습니다. 시트에 음성 표시가 나타나고 쉼표는 새 열을 생성합니다.

답변:


219

우리는 결국 이것에 대한 답을 찾았습니다.

Excel은 열 값 앞에 공백이없는 경우에만 쉼표와 음성 표시의 이스케이프를 고려합니다. 이렇게 공백없이 파일을 생성하는 중 ...

Reference,Title,Description
1,"My little title","My description, which may contain ""speech marks"" and commas."
2,"My other little title","My other description, which may also contain ""speech marks"" and commas."

... 문제가 해결되었습니다. 이것이 누군가를 돕기를 바랍니다!


2
이것은 내가 전에 겪었던 문제이며 항상 잊어 버립니다. Excel은이 동작을 중단해야합니다.이 동작은 단순히 혼동을 일으키고 처음부터 유용한 규칙이 아니기 때문입니다. 그 또는 csv는 쉼표 사이에 공백이 없어야합니다.
Jacques Mathieu

61

다음은 무작위라고 생각하는 경우의 규칙입니다. 이러한 규칙을 기반으로 유틸리티 함수를 만들 수 있습니다.

  1. 값에 쉼표, 줄 바꿈 또는 큰 따옴표가 포함 된 경우 문자열 값은 큰 따옴표로 묶여 반환되어야합니다.

  2. 값의 큰 따옴표 문자는 다른 큰 따옴표로 이스케이프해야합니다.

  3. 값에 쉼표, 줄 바꿈 또는 큰 따옴표가 포함되어 있지 않으면 문자열 값이 변경되지 않고 반환되어야합니다.


4
쉼표, 큰 따옴표 또는 줄 바꿈이없는 것을 따옴표로 묶는 것이 손상됩니까?
Erik Reppen 2014

2
아니 ErikReppen 나는 그것이 일반적으로 아프다고 생각하지 않습니다. 나는 힙 메모리 내부에 자신의 공유를 가지고 있기 때문에 이전 문자열의 텍스트를 대체하여 새 문자열을 만들지 않는 것이 권장되는 Java 배경에 속합니다. 원하는 경우 모든 값을 무조건 교체하고 그렇게해서는 안되지만 문제가 발생하는지 알려주십시오.
AlphaBetaGamma

2
공백으로 시작하거나 끝나는 필드는 따옴표로 묶어야합니다.
Jonathan Rosenne 2015 년

2

Yashu의 지시에 따라 다음 함수를 작성했습니다 (PL / SQL 코드이지만 다른 언어에 쉽게 적용 할 수 있어야 함).

FUNCTION field(str IN VARCHAR2) RETURN VARCHAR2 IS
    C_NEWLINE CONSTANT CHAR(1) := '
'; -- newline is intentional

    v_aux VARCHAR2(32000);
    v_has_double_quotes BOOLEAN;
    v_has_comma BOOLEAN;
    v_has_newline BOOLEAN;
BEGIN
    v_has_double_quotes := instr(str, '"') > 0;
    v_has_comma := instr(str,',') > 0;
    v_has_newline := instr(str, C_NEWLINE) > 0;

    IF v_has_double_quotes OR v_has_comma OR v_has_newline THEN
        IF v_has_double_quotes THEN
            v_aux := replace(str,'"','""');
        ELSE
            v_aux := str;
        END IF;
        return '"'||v_aux||'"';
    ELSE
        return str;
    END IF;
END;

0

작은 따옴표도 큰 따옴표를 이스케이프하지 않아도 잘 작동합니다. 최소한 Excel 2016에서는 다음과 같습니다.

'text with spaces, and a comma','more text with spaces','spaces and "quoted text" and more spaces','nospaces','NOSPACES1234'

Excel은이를 5 개의 열에 넣습니다 ( "Text to columns"마법사에서 "Text qualifier"로 작은 따옴표를 선택한 경우)


-3

큰 따옴표 후에도 며칠 동안이 문제가 발생했습니다.

Pipe Delimiter를 쉼표로 바꾸면 문제가 해결되었습니다.


1
필요한 경우 OP가 복사하여 붙여 넣을 수 있도록 효과가있는 샘플을 제공해야합니다.
Reuben Tanner
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.