我正在尝试将数据写入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;
}
}
你能帮忙吗?
答案 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标准,但我不知道这是否是一个问题。