【问题标题】:How to Export JTable data into a CSV File如何将 JTable 数据导出到 CSV 文件中
【发布时间】:2018-10-09 19:32:53
【问题描述】:

我正在寻找一种将带有数据的 JTable 导出到 .csv 文件 的方法。但是我没有找到一个好的方法来做到这一点。它工作并生成 csv 文件。但有一个问题。当这样的jTable列中有数据时,

|column 1|column 2|
-------------------
|Java, C#|PHP     |

结果是,

column 1,column2,
Java,C#,PHP,

所以问题 ID 只有 2 列2 数据列,但对于 CSV 文件,有 3 数据列。将该 CSV 文件导入 Excel 工作表时,这是完全错误的。数据去了不同的地方。

那么在 Java 中是否有另一种方法可以做到这一点,或者有什么方法可以避免这个问题?

提前感谢您的帮助!最好的问候。

我使用以下代码。

public void ExportToCSVfile(JTable table) throws IOException, ClassNotFoundException
    {
            Writer writer = null;
            DefaultTableModel defaultTableModel = (DefaultTableModel) table.getModel();
            int Row = defaultTableModel.getRowCount();
            int Col = defaultTableModel.getColumnCount();
            try {
                writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("file.csv"), "utf-8"));

                StringBuffer bufferHeader = new StringBuffer();
                for (int j = 0; j < Col; j++) {
                    bufferHeader.append(defaultTableModel.getColumnName(j));
                    if (j!=Col) bufferHeader.append(", ");
                }
                writer.write(bufferHeader.toString() + "\r\n");

                for (int i = 0 ; i < Row ; i++){
                     StringBuffer buffer = new StringBuffer();
                    for (int j = 0 ; j < Col ; j++){
                        buffer.append(defaultTableModel.getValueAt(i,j));
                        if (j!=Col) buffer.append(", ");
                    }
                    writer.write(buffer.toString() + "\r\n");
                }
            } finally {
                  writer.close();
            }
        }

【问题讨论】:

  • 不要扮演自己的角色,使用适当的CSV library - 要求比在值之间粘贴, 更复杂

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


【解决方案1】:

那么在 Java 中是否有另一种方法可以做到这一点,或者有什么方法可以避免这个问题?

我不知道 CSV 格式文件的所有规则,但我相信对于这样简单的单元格包含“,”的内容,您可以分隔单元格的整个文本。

所以你的文件的输出应该是:

column 1,column2,
"Java,C#",PHP,

这很容易验证,您只需创建一个简单的电子表格,其中单元格包含一个逗号,然后将电子表格导出为 .csv 文件并在文本编辑器中检查文件格式。

我认为您可以用“...”分隔所有数据,即使它不包含逗号,但您需要验证这一点。

因此您需要修改导出代码以包含分隔符。

【讨论】:

  • @HasithaMJayawardana,我们不是来为您编写代码的。你对这个建议有什么不明白的地方?如果建议不清楚,请作为具体问题。您正在使用 StringBuffer。您需要做的就是在从表模型获得的值之前和之后为黄油附加一个双引号。
  • @HasithaMJayawardana,很高兴这个建议有所帮助。不要忘记“接受”答案,这样人们就知道问题已经解决了。
  • 我尝试导出为 Excel 文件,而不是 CSV。我认为这也将起作用。但我没有尝试这个。感谢您的回答。
  • @HasithaMJayawardana But I didn't try this. - 为什么不呢?这是您最初发布的代码的两行额外代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-19
  • 2015-03-02
  • 2014-01-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多