119

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 でこのファイルを開くと、エスケープが尊重されません。シートにスピーチ マークが表示され、コンマによって新しい列が作成されます。

4

5 に答える 5

232

私たちは最終的にこれに対する答えを見つけました。

列の値の前にスペースがない場合、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."

...問題を修正しました。これが誰かを助けることを願っています!

于 2012-09-18T08:50:36.623 に答える
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;
于 2015-05-26T14:17:16.230 に答える
0

少なくとも Excel 2016 では、二重引用符をエスケープしなくても、一重引用符も正常に機能します。

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

Excelはそれを5列に配置します(「列へのテキスト」ウィザードで「テキスト修飾子」として一重引用符を選択した場合)

于 2018-06-12T10:19:09.403 に答える
-3

二重引用符の後でも、この問題は数日間発生しました。

パイプ区切り文字をコンマに置き換えると、問題なく動作しました。

于 2015-10-09T09:48:01.430 に答える