【问题标题】:How to save from JTable to CSV or Excel?如何从 JTable 保存到 CSV 或 Excel?
【发布时间】:2021-12-10 13:54:05
【问题描述】:

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

我想要它,以便有一个按钮,然后将输入的数据从 GUI 保存到表中,然后保存到 CSV 文件中。

【问题讨论】:

  • 我想要它,以便有一个按钮,然后将输入的数据从 jform 保存到 jtable 中,然后保存到 CSV 文件中。
  • 您为此使用 Eclipse 的事实几乎无关紧要。那只是IDE。如果您有详细信息要添加而不是发表评论,请编辑您的问题。
  • 对不起,这个网站还很新。感谢您的帮助

标签: java csv swing jtable export-to-csv


【解决方案1】:

这可能会对你有所帮助:-

写入 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());

【讨论】:

  • 我会小心以这种方式编写 CSV,因为任何包含 , 的文本都会破坏它。我只是鼓励使用 OpenCSV 来编写它
  • 即使没有 OpenCSV,它对我来说也不会太糟糕。是的,引用所有字段将避免未引用的“,”破坏内容的问题,但引入了对双引号的需求——另一方面,OP 可能有非常简单的要求,这绝对是一个步骤正确的方向。
【解决方案2】:

据我所知,没有 JTable 的“神奇功能”可以做到这一点。 JTable 是一个 UI 组件,您需要的是数据功能,而不是用户界面功能。而且和eclipse关系不大,只是用来写代码的IDE而已。

我认为您可能正在寻找的是 JTable 所基于的模型。我想到的第一个解决方案是更改该模型代码以具有一种方法,该方法将以您想要的格式写出数据;那么你的 UI 上的一个(另一个)按钮会在用户选择时调用模型上的这个方法来写出数据。您可能还有其他方法可以完成此操作,但这似乎是最直接和最简单的。

【讨论】:

    【解决方案3】:

    你可以试试这个代码:

    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;
    }
    

    【讨论】:

    • 纯代码答案不是很有帮助。答案需要解释为什么您提供的代码比 OP 发布的代码更能解决问题。
    • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。
    • (1-) 这个答案与已经接受的答案没有什么不同。
    猜你喜欢
    • 2016-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-18
    • 1970-01-01
    • 2013-02-18
    • 1970-01-01
    • 2014-05-04
    相关资源
    最近更新 更多