gpt4 book ai didi

java - 在 Java 中将 csv 转换为 xls 时出现问题?只需要核心 Java 经验 - 问题与导入无关

转载 作者:行者123 更新时间:2023-12-01 17:39:02 25 4
gpt4 key购买 nike

首先,我知道我想这样进行上转换是不寻常的,但请耐心等待。我们通过网站导出获取这些 csv 文件,并且没有选择以任何其他形式获取它。

现在,回答问题:

我有这段旧代码可以为我完成这个过程。它基本上读取每一行,然后挑选 , 之间的每个值。这对于我转换的一些示例非常有效,但是当涉及到使用给定的示例时,某些值不合适。

我在 Notepad++ 中打开这些文件,并意识到某些单元格本身包含 ,。 CSV 文件通过用 " 包围这些单元格来解决此问题。请参阅下面的示例:

.

这会很好地工作:

约翰,史密斯,johnsmith@email.com,汉堡

但是,这不会:

约翰,史密斯,johnsmith@email.com,“汉堡,炸薯条”

.

不幸的是,我的代码(String strar[] = thisLine.split(",");)没有考虑到某些单元格包含逗号,并将它们分成不同的列,例如:“汉堡炸薯条”

.

如何让我的程序有效地将 " 包围的文本视为单个值,而不是两个单独的值?

.

如果我可以为你们解决任何问题,请告诉我。

非常感谢您的帮助,

贾斯汀

最佳答案

只需逐个字符检查 CSV 并在出现报价时设置切换即可。这是一个启动示例:

public static List<List<String>> parseCsv(InputStream input, char separator) 
throws IOException
{
BufferedReader reader = null;
List<List<String>> csv = new ArrayList<List<String>>();
try {
reader = new BufferedReader(new InputStreamReader(input, "UTF-8"));
for (String record; (record = reader.readLine()) != null;) {
boolean quoted = false;
StringBuilder fieldBuilder = new StringBuilder();
List<String> fields = new ArrayList<String>();
for (int i = 0; i < record.length(); i++) {
char c = record.charAt(i);
fieldBuilder.append(c);
if (c == '"') {
quoted = !quoted;
}
if ((!quoted && c == separator) || i + 1 == record.length()) {
fields.add(fieldBuilder.toString().replaceAll(separator + "$", "")
.replaceAll("^\"|\"$", "").replace("\"\"", "\"").trim());
fieldBuilder = new StringBuilder();
}
}
csv.add(fields);
}
} finally {
if (reader != null) try { reader.close(); } catch (IOException logOrIgnore) {}
}
return csv;
}

但是,您也可以直接获取任何第 3 方 Java CSV API其中可能有更多功能等等。

关于java - 在 Java 中将 csv 转换为 xls 时出现问题?只需要核心 Java 经验 - 问题与导入无关,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3225108/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com