当前位置: 首页 > 知识库问答 >
问题:

如何在CSV文件中转义逗号和语音标记,以便它们在Excel中工作?

顾炎彬
2023-03-14

我正在生成一个CSV文件(用逗号而不是制表符分隔)。我的用户很可能会通过双击打开Excel中的CSV文件。我的数据可能包含逗号和语音标记,因此我将按如下方式进行转义。

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."

据我所知,这一直是这样做的。我的困惑是:当我在Excel2010中打开这个文件时,我的转义没有得到尊重。工作表上会出现语音标记,逗号会导致新的列。

共有3个答案

拓拔阎宝
2023-03-14

根据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;
关浩壤
2023-03-14

以下是规则,如果你认为这是随机的。可以根据这些规则创建效用函数。

>

值中的任何双引号字符都应该用另一个双引号转义。

如果该值不包含逗号、换行符或双引号,则应原封不动地返回字符串值。

何玺
2023-03-14

我们最终找到了答案。

如果列值前面没有空格,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."

... 解决了这个问题。希望这对别人有帮助!

 类似资料:
  • 问题内容: 我正在生成CSV文件(用逗号而不是制表符分隔)。我的用户很可能会通过双击在Excel中打开CSV文件。我的数据可能包含逗号和语音标记,因此我将其转义如下。 据我所知,这一直是这样做的方法。这是我的困惑:当我在Excel 2010中打开此文件时,我的转义未得到遵守。工作表上会出现语音标记,并且逗号引起新的列。 问题答案: 我们最终找到了答案。 如果列值前面没有空格,则Excel仅考虑逗号

  • 问题内容: 我正在编写一个Java应用程序以将数据从Oracle导出到CSV文件 不幸的是,数据的内容可能非常棘手。分隔符仍然是逗号,但连续的一些数据可能是这样的: 因此,这是该列上的字符串之一: 我说:“我是5‘10”。 别开玩笑了,我需要在Java生成的CSV文件中的excel或开放式办公室中显示上述注释,而又不能妥协,并且当然不能弄乱其他常规的转义符情况(即,常规的双引号和元组中的常规逗号)

  • 目标:创建一个面向对象的图形Java应用程序,该程序将:读取一个CSV(逗号分隔值)文件,该文件由学生姓名(名字、姓氏)、ID以及内容和交付的初始标记组成(未评估学生使用-1值)。 这是我的代码,但当我点击选择文件。。当它真的应该打开文件并读取数据时,它会显示“预期的名字、姓氏、ID、内容和交付”。但不知何故,它不起作用。在此处输入图像描述 下面是我的代码: 私有类ChooseFileListen

  • 问题内容: 我需要阅读一个CSV文件,其中包含带有逗号的字段,因此我将包含逗号的字段加了双引号,例如: 但是,当我尝试在Python中读取文件时,得到的字段由逗号分隔,如下所示: 我正在读取具有以下代码的CSV文件: 是否可以读取包含逗号的双引号字段? 问题答案: Python模块实际上确实支持带引号的字段,即使默认情况下也是如此。您的问题在于,默认情况下,Python不会跳过空格,因此您需要使用

  • 问题内容: 如何在Java属性文件中转义等号()?我想在文件中添加以下内容: 问题答案: 此外,请从javadoc上的类参考 load(Reader reader) 方法 在方法文档中说 关键包含了所有的从第一个非空格字符以及高达行的字符,但不包括第一转义 ,或比行结束符等空白字符。所有这些密钥终止字符都可以通过用前面的反斜杠字符转义来包括在密钥中;例如, 将是两个字符的键 可以使用和转义序列包括

  • 我需要解析一个一列的CSV文件,它不仅有额外的逗号,而且一些名称还包括额外的引号。我已经看过了,并阅读了之前的其他问题,最好的答案之一是阿钦蒂亚·杰哈的答案。然而,这种解决方案似乎在我的情况下不起作用。一个例子是这个名字 正在打印为: 它在正确的地方分裂,并且正在处理额外的逗号,但它没有击中额外的引号,并且现在也在那里分裂,所以