首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenCSV写入限制

OpenCSV写入限制
EN

Stack Overflow用户
提问于 2016-06-09 09:16:23
回答 1查看 1.5K关注 0票数 0

我试图使用openCSV java库在csv文件中写入一些公式数据,但是它只在每个单元格中编写了大约90%的字符串。是否有任何已知的问题可能导致这种行为?

代码语言:javascript
复制
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] + "$3='Form responses 1'!" + b[i + 1] + "2,legend!" + b[i + 1] + "$3,IF(legend!" + b[i] + "$4='Form responses 1'!" + b[i + 1] + "2,legend!" + b[i + 1] + "$4,IF(legend!" + b[i] + "$5='Form responses 1'!" + b[i + 1] + "2,legend!" + b[i + 1] + "$5,IF(legend!" + b[i] + "$6='Form responses 1'!" + b[i + 1] + "2,legend!" + b[i + 1] + "$6,IF(legend!" + b[i] + "$7='Form responses 1'!" + b[i + 1] + "2,legend!" + b[i + 1] + "$7,IF(legend!" + b[i] + "$8='Form responses 1'!" + b[i + 1] + "2,legend!" + b[i + 1] + "$8,#error#))))))";
            System.out.println(a);
            line[k] = a;
            k++;
        }
        writerCSW.writeNext(line);

    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-09 09:45:08

我相信你的问题是你用错了图书馆。(虽然这可能是我的误解。

B的长度是46。您的CSV文件将有45个条目。

莱因克正好是一条线。我认为您假设行数组中的每个索引都是。这是第一个错误(也许)。

但是,您的文件未完全填充的原因是您没有关闭流,因此一旦程序存在,数据就会丢失。因此,您将希望关闭您的作者,或者更好的是,使用一个试用资源块。我已经重写了您的代码来这样做:

代码语言:javascript
复制
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] + "$3='Form responses 1'!" + b[i + 1] + "2,legend!" + b[i + 1]
                        + "$3,IF(legend!" + b[i] + "$4='Form responses 1'!" + b[i + 1] + "2,legend!" + b[i + 1]
                        + "$4,IF(legend!" + b[i] + "$5='Form responses 1'!" + b[i + 1] + "2,legend!" + b[i + 1]
                        + "$5,IF(legend!" + b[i] + "$6='Form responses 1'!" + b[i + 1] + "2,legend!" + b[i + 1]
                        + "$6,IF(legend!" + b[i] + "$7='Form responses 1'!" + b[i + 1] + "2,legend!" + b[i + 1]
                        + "$7,IF(legend!" + b[i] + "$8='Form responses 1'!" + b[i + 1] + "2,legend!" + b[i + 1]
                        + "$8,#error#))))))";
                String[] line = a.split(",");
                writerCSW.writeNext(line);
                System.out.println(i);
            }
        }

    }

注意,我已经改变了一些事情,所以它可能没有做你想做的事情。但是,您应该能够从这个示例中看出问题所在。

请注意:看到我是如何用逗号分隔你的字符串a的吗?这是为CSV输入生成一个数组。它将自动为您插入所选的分隔符。如果您不想这样做,请去掉CSVWriter,并使用普通的Filewriter。通过构造字符串手动生成CSV行。在使用OpenCSV时,这是不必要的。

我希望这能帮上忙

阿图尔

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37721680

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档