OpenCSV 写入限制
OpenCSV writing limits
我试图使用 openCSV
java 库在 csv 文件中写入一些公式数据,但它只在每个单元格中写入了大约 90% 的字符串。是否存在任何可能导致此行为的已知问题?
public static void main(String[] args) throws FileNotFoundException, UnsupportedEncodingException {
FileOutputStream fosW = new FileOutputStream("C:\Users\Desktop\formula.csv");
OutputStreamWriter osw = new OutputStreamWriter(fosW, "UTF-8");
CSVWriter writerCSW = new CSVWriter(osw);
int k = 0;
String[] b = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "AA", "AB", "AC", "AD", "AE", "AF", "AG", "AH", "AI", "AJ", "AK", "AL", "AM", "AN", "AO", "AP", "AQ", "AR", "AS", "AT"};
String[] line = new String[100];
for (int i = 0; i < b.length - 1; i++) {
String a = "=IF(legend!" + b[i] + "='Form responses 1'!" + b[i + 1] + "2,legend!" + b[i + 1] + ",IF(legend!" + b[i] + "='Form responses 1'!" + b[i + 1] + "2,legend!" + b[i + 1] + ",IF(legend!" + b[i] + "='Form responses 1'!" + b[i + 1] + "2,legend!" + b[i + 1] + ",IF(legend!" + b[i] + "='Form responses 1'!" + b[i + 1] + "2,legend!" + b[i + 1] + ",IF(legend!" + b[i] + "='Form responses 1'!" + b[i + 1] + "2,legend!" + b[i + 1] + ",IF(legend!" + b[i] + "='Form responses 1'!" + b[i + 1] + "2,legend!" + b[i + 1] + ",#error#))))))";
System.out.println(a);
line[k] = a;
k++;
}
writerCSW.writeNext(line);
}
我认为您的问题是您使用的库有误。 (虽然这可能是我的误会。
您的 B 的长度为 46。您的 CSV 文件将包含 45 个条目。
第[k]行刚好是1行。我认为您假设线数组中的每个索引都是。这是第 1 个错误(可能)。
但是您的文件未完全填充的原因是因为您没有关闭流,所以一旦您的程序存在,数据就会丢失。所以你会想关闭你的作者,或者更好的是,使用 try-with-resources 块。我已经重写了您的代码来执行此操作:
public static void main(String[] args) throws IOException {
FileOutputStream fosW = new FileOutputStream("/home/artur/tmp/test.csv");
OutputStreamWriter osw = new OutputStreamWriter(fosW, "UTF-8");
try (CSVWriter writerCSW = new CSVWriter(osw)) {
String[] b = { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R",
"S", "T", "U", "V", "W", "X", "Y", "Z", "AA", "AB", "AC", "AD", "AE", "AF", "AG", "AH", "AI", "AJ",
"AK", "AL", "AM", "AN", "AO", "AP", "AQ", "AR", "AS", "AT" };
System.out.println(b.length);
for (int i = 0; i < b.length - 1; i++) {
String a = "=IF(legend!" + b[i] + "='Form responses 1'!" + b[i + 1] + "2,legend!" + b[i + 1]
+ ",IF(legend!" + b[i] + "='Form responses 1'!" + b[i + 1] + "2,legend!" + b[i + 1]
+ ",IF(legend!" + b[i] + "='Form responses 1'!" + b[i + 1] + "2,legend!" + b[i + 1]
+ ",IF(legend!" + b[i] + "='Form responses 1'!" + b[i + 1] + "2,legend!" + b[i + 1]
+ ",IF(legend!" + b[i] + "='Form responses 1'!" + b[i + 1] + "2,legend!" + b[i + 1]
+ ",IF(legend!" + b[i] + "='Form responses 1'!" + b[i + 1] + "2,legend!" + b[i + 1]
+ ",#error#))))))";
String[] line = a.split(",");
writerCSW.writeNext(line);
System.out.println(i);
}
}
}
请注意,我更改了一些内容,因此它可能无法完全按照您的要求进行操作。但是,您应该能够从这个示例中看出问题所在。
请注意:看看我是如何用逗号分隔字符串 a 的?这是为 CSV 输入生成一个数组。它会自动为您插入您选择的分隔符。如果您不想这样做,请去掉 CSVWriter,并使用普通的 Filewriter。您可以通过构造字符串手动生成 CSV 行。使用 OpenCSV 时不需要这样做。
希望对您有所帮助,
亚瑟
我试图使用 openCSV
java 库在 csv 文件中写入一些公式数据,但它只在每个单元格中写入了大约 90% 的字符串。是否存在任何可能导致此行为的已知问题?
public static void main(String[] args) throws FileNotFoundException, UnsupportedEncodingException {
FileOutputStream fosW = new FileOutputStream("C:\Users\Desktop\formula.csv");
OutputStreamWriter osw = new OutputStreamWriter(fosW, "UTF-8");
CSVWriter writerCSW = new CSVWriter(osw);
int k = 0;
String[] b = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "AA", "AB", "AC", "AD", "AE", "AF", "AG", "AH", "AI", "AJ", "AK", "AL", "AM", "AN", "AO", "AP", "AQ", "AR", "AS", "AT"};
String[] line = new String[100];
for (int i = 0; i < b.length - 1; i++) {
String a = "=IF(legend!" + b[i] + "='Form responses 1'!" + b[i + 1] + "2,legend!" + b[i + 1] + ",IF(legend!" + b[i] + "='Form responses 1'!" + b[i + 1] + "2,legend!" + b[i + 1] + ",IF(legend!" + b[i] + "='Form responses 1'!" + b[i + 1] + "2,legend!" + b[i + 1] + ",IF(legend!" + b[i] + "='Form responses 1'!" + b[i + 1] + "2,legend!" + b[i + 1] + ",IF(legend!" + b[i] + "='Form responses 1'!" + b[i + 1] + "2,legend!" + b[i + 1] + ",IF(legend!" + b[i] + "='Form responses 1'!" + b[i + 1] + "2,legend!" + b[i + 1] + ",#error#))))))";
System.out.println(a);
line[k] = a;
k++;
}
writerCSW.writeNext(line);
}
我认为您的问题是您使用的库有误。 (虽然这可能是我的误会。
您的 B 的长度为 46。您的 CSV 文件将包含 45 个条目。
第[k]行刚好是1行。我认为您假设线数组中的每个索引都是。这是第 1 个错误(可能)。
但是您的文件未完全填充的原因是因为您没有关闭流,所以一旦您的程序存在,数据就会丢失。所以你会想关闭你的作者,或者更好的是,使用 try-with-resources 块。我已经重写了您的代码来执行此操作:
public static void main(String[] args) throws IOException {
FileOutputStream fosW = new FileOutputStream("/home/artur/tmp/test.csv");
OutputStreamWriter osw = new OutputStreamWriter(fosW, "UTF-8");
try (CSVWriter writerCSW = new CSVWriter(osw)) {
String[] b = { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R",
"S", "T", "U", "V", "W", "X", "Y", "Z", "AA", "AB", "AC", "AD", "AE", "AF", "AG", "AH", "AI", "AJ",
"AK", "AL", "AM", "AN", "AO", "AP", "AQ", "AR", "AS", "AT" };
System.out.println(b.length);
for (int i = 0; i < b.length - 1; i++) {
String a = "=IF(legend!" + b[i] + "='Form responses 1'!" + b[i + 1] + "2,legend!" + b[i + 1]
+ ",IF(legend!" + b[i] + "='Form responses 1'!" + b[i + 1] + "2,legend!" + b[i + 1]
+ ",IF(legend!" + b[i] + "='Form responses 1'!" + b[i + 1] + "2,legend!" + b[i + 1]
+ ",IF(legend!" + b[i] + "='Form responses 1'!" + b[i + 1] + "2,legend!" + b[i + 1]
+ ",IF(legend!" + b[i] + "='Form responses 1'!" + b[i + 1] + "2,legend!" + b[i + 1]
+ ",IF(legend!" + b[i] + "='Form responses 1'!" + b[i + 1] + "2,legend!" + b[i + 1]
+ ",#error#))))))";
String[] line = a.split(",");
writerCSW.writeNext(line);
System.out.println(i);
}
}
}
请注意,我更改了一些内容,因此它可能无法完全按照您的要求进行操作。但是,您应该能够从这个示例中看出问题所在。
请注意:看看我是如何用逗号分隔字符串 a 的?这是为 CSV 输入生成一个数组。它会自动为您插入您选择的分隔符。如果您不想这样做,请去掉 CSVWriter,并使用普通的 Filewriter。您可以通过构造字符串手动生成 CSV 行。使用 OpenCSV 时不需要这样做。
希望对您有所帮助,
亚瑟