如何从JTable保存为CSV或Excel?

5

有没有办法将JTable的数据保存到Excel中?我想把从程序输入的数据,从表格中保存到CSV文件中。

我想要一个按钮,可以将GUI中输入的数据保存到表格中,然后再保存到CSV文件中。


我希望有一个按钮,可以将JForm中输入的数据保存到JTable中,然后再保存到CSV文件中。 - Looth
你使用Eclipse完成这个项目的事实基本上是无关紧要的。那只是一个集成开发环境。如果你有细节需要添加,请编辑你的问题,而不是发布评论。 - Joachim Sauer
抱歉,我对这个网站还比较新。感谢您的帮助。 - Looth
3个回答

2
这可能会对你有所帮助:-
写入csv文件的方法。
public static void exportToCSV(JTable table,
        String path) {

    try {

        TableModel model = table.getModel();
        FileWriter csv = new FileWriter(new File(path));

        for (int i = 0; i < model.getColumnCount(); i++) {
            csv.write(model.getColumnName(i) + ",");
        }

        csv.write("\n");

        for (int i = 0; i < model.getRowCount(); i++) {
            for (int j = 0; j < model.getColumnCount(); j++) {
                csv.write(model.getValueAt(i, j).toString() + ",");
            }
            csv.write("\n");
        }

        csv.close();
    } catch (IOException e) {
       System.out.println("Error "+e);
    }
}

如果需要读取并在JTable中显示,可以使用OpenCSV

CSVReader reader = new CSVReader(new FileReader("file.csv")); 
List list = reader.readAll();
JTable table = new JTable(list.toArray());

4
如果文本中包含逗号,就会破坏这种写CSV方式,我建议使用OpenCSV来写CSV文件。 - MadProgrammer
1
即使没有OpenCSV,对我来说看起来也不错。是的,引用所有字段将避免未引用的“,”破坏内容的问题,但会引入双引号引用引号的需求——另一方面,OP可能有非常简单的要求,这绝对是朝着正确方向迈出的一步。 - tucuxi

0

我不知道JTable是否有任何“神奇函数”可以做到这一点。JTable是一个UI组件,你所要求的是一个数据函数,而不是用户界面函数。这与Eclipse没有太大关系,Eclipse只是用来编写代码的IDE。

我认为你可能正在寻找的是JTable所基于的模型。我想到的第一个解决方案是修改该模型代码,添加一个方法以按照你想要的格式输出数据;然后在你的UI上再添加一个按钮,当用户选择时,它会调用模型上的此方法来输出数据。可能还有其他方法可以完成这个任务,但这似乎是最直接和最容易的方法。


-2
你可以尝试这段代码:
public static boolean convertToCSV(JTable table,
                                   String path) {
try {
    TableModel model = table.getModel();
    FileWriter csv = new FileWriter(new File(path));

    for (int i = 0; i < model.getColumnCount(); i++) {
        csv.write(model.getColumnName(i) + ",");
    }
    csv.write("\n");

    for (int i = 0; i < model.getRowCount(); i++) {
        for (int j = 0; j < model.getColumnCount(); j++) {
            csv.write(model.getValueAt(i, j).toString() + ",");
        }
        csv.write("\n");
    }
    csv.close();
    return true;
} catch (IOException e) {
    e.printStackTrace();
}
return false;
}

1
一个只有代码的答案并不是很有帮助。回答需要解释为什么您提供的代码比OP发布的代码更好地解决了问题。 - Gilbert Le Blanc
1
你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心中找到有关如何编写良好答案的更多信息。 - Community
1
这个答案与已经被接受的答案没有任何区别。 - camickr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接