我正在寻找一种将带有数据的 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();
}
}
答案 0 :(得分:2)
那么有没有另一种方法可以用Java或避免这种问题的任何方式呢?
我不知道CSV格式文件的所有规则,但我相信对于其中单元格包含“,”的这种简单操作,您只能定界单元格的整个文本。
因此,文件的输出应为:
column 1,column2,
"Java,C#",PHP,
这很容易验证,您只是创建了一个简单的电子表格,其中的单元格包含一个逗号,然后将电子表格导出到.csv文件,然后在文本编辑器中检查了文件格式。
我认为即使不包含逗号,也可以用“ ...”分隔所有数据,但是您需要进行验证。
因此,您需要修改导出代码以包含定界符。