我正在编写一个Java应用程序将数据从Oracle导出到csv文件
不幸的是,数据的内容可能相当棘手。逗号仍然是分隔符,但行中的某些数据可能如下所示:
| ID | FN | LN | AGE | COMMENT |
|----------------------------------------------------------------|
| 123 | John | Smith | 39 | I said "Hey, I am 5'10"." |
|----------------------------------------------------------------|
因此,这是comment
列中的一个字符串:
我说:“嘿,我身高5英尺10英寸。”
不是开玩笑,我需要在excel或open office中显示上面的注释,而不是用Java生成的CSV文件,当然也不能搞乱其他常规的转义情况(即常规的双引号和元组中的常规逗号)。我知道正则表达式很强大,但是在这样复杂的情况下,我们如何才能达到这个目的呢?
发布于 2012-05-04 23:34:32
Excel必须能够处理完全相同的情况。
将这些内容放到Excel中,将它们保存为CSV,然后使用文本编辑器检查文件。然后,您就会知道Excel应用于这些情况的规则。
使Java产生相同的输出。
顺便说一句,Excel使用的格式是发布的。
*编辑1:*以下是Excel的功能
*编辑2:*请注意,如果你使用“作为附件”,php的fputcsv
会和excel做同样的事情。
rdeslonde@mydomain.com
Richard
"This is what I think"
转换为以下内容:
Email,Fname,Quoted
rdeslonde@mydomain.com,Richard,"""This is what I think"""
发布于 2012-05-07 21:40:25
感谢Tony和Paul的快速反馈,这非常有帮助。实际上,我通过POJO找到了一个解决方案。这就是它:
if (cell_value.indexOf("\"") != -1 || cell_value.indexOf(",") != -1) {
cell_value = cell_value.replaceAll("\"", "\"\"");
row.append("\"");
row.append(cell_value);
row.append("\"");
} else {
row.append(cell_value);
}
简而言之,如果单元格旁边的字符串中有逗号或双引号之类的特殊字符,则首先通过添加额外的双引号(如"\"\""
)来转义双引号("\""
),然后将整个内容放入双引号(如"\""+theWholeThing+"\""
)中
发布于 2012-05-07 21:47:31
您还可以查看Python writes Excel-compatible csv
files.是如何
我相信Excel的默认设置是双引号字符-也就是说,字面引号"
被写成""
。
https://stackoverflow.com/questions/10451842
复制相似问题