如何写一个以 - 开头的字符串到csv文件?

时间:2018-04-11 08:30:06

标签: java csv

我正在尝试将数据写入CSV文件。

当我在写入后打开csv文件时,以-开头的字符串值会自动转换为#NAME?。例如如果我写test它正确显示但是当我写-test时,当我打开csv文件时,该值将是#NAME?。这不是代码问题,但csv文件会自动将以-开头的值更改为error(#NAME?)。我如何以编程方式更正此问题。下面是代码,

public class FileWriterTest {
    public static void main(String[] args) {
        BufferedWriter bufferedWriter = null;
        File file = new File("test.csv");
        try {
            bufferedWriter = new BufferedWriter(new FileWriter(file));
            List<String> records = getRecords();
            for (String record : records) {
                bufferedWriter.write(record);
                bufferedWriter.newLine();
            }
            bufferedWriter.flush();
            System.out.println("Completed writing data to a file.");
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (bufferedWriter != null)
                bufferedWriter.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    public static List<String> getRecords() {
        List<String> al = new ArrayList<String>();
        String s1 = "test";
        String s2 = "-test";
        al.add(s1);
        al.add(s2);
        return al;
    }
}

你能帮忙吗?

3 个答案:

答案 0 :(得分:1)

formal CSV standard中,您可以在字段值周围使用引号(")来完成此操作。它们是文本分隔符(与其他类型的值相反,如数字值)。

听起来你正在使用Excel。您可能需要启用"作为文本分隔符/指示符。

更新:如果双击.csv在Excel中打开它,即使这不起作用。您必须打开工作簿,然后将CSV数据导入其中。 (可悲,真的......)

答案 1 :(得分:1)

这是excel的一个问题。当您在Excel中打开CSV文件时,它会尝试自动确定通常失败的单元格类型。 CSV文件没关系,编辑器不是;)

您可以右键单击该字段,选择“格式化单元格”,然后将其设为文本文件(您可能需要删除自动插入的&#39; =&#39;符号)。或者您可以通过进入数据 - 从文本/ CSV中打开CSV文件,然后在向导中选择正确的列类型。

答案 2 :(得分:-1)

我有一个相对较旧版本的Excel(2007),以下工作完美:

将文本放在双引号之间,并在其前面加上等号 即,-test变为="-test"

因此,您的文件将如下所示:

test1,test2,test3
test4,="-test5",test6

更新
也适用于Excel-2010。

正如Veselin Davidov所说,这将打破csv标准,但我不知道这是否是一个问题。