我正在尝试将JTable导出到Microsoft Excel可用的文件。
最初,我将数据写入文本文件并将扩展名设置为“.xls”
当然,这是不专业的,Excel接着抱怨格式不正常。这是正确的。
无论如何,现在我正在尝试将其导出到XML表,这样我就可以用Excel打开它。但是,当我尝试使用XMLEncoder导出它时,会打印异常,并且在Excel中打开时,它看起来不正常或工作正常。该表不包含表中的数据,而是包含有关对象和类的数据。
这是我的代码:
public static void saveToXML(JTable table, File location, String name) throws Exception{
XMLEncoder encoder;
File file = new File(location.getAbsolutePath() + "/" + name + ".xml");
encoder = new XMLEncoder(new FileOutputStream(file));
encoder.writeObject(table);
encoder.close();
}
打印的例外情况如下:
java.lang.InstantiationException: fbla.evaluation.window.MainWindow$2
Continuing ...
java.lang.RuntimeException: failed to evaluate: <unbound>=Class.new();
Continuing ...
java.lang.InstantiationException: javax.swing.plaf.basic.BasicTableHeaderUI$MouseInputHandler
Continuing ...
java.lang.Exception: XMLEncoder: discarding statement JTableHeader.removeMouseMotionListener(BasicTableHeaderUI$MouseInputHandler);
Continuing ...
java.lang.InstantiationException: fbla.evaluation.window.MainWindow$38
Continuing ...
java.lang.Exception: XMLEncoder: discarding statement JTable.addMouseListener(MainWindow$38);
Continuing ...
java.lang.InstantiationException: javax.swing.plaf.basic.BasicTableUI$Handler
Continuing ...
java.lang.Exception: XMLEncoder: discarding statement JTable.removeMouseMotionListener(BasicTableUI$Handler);
Continuing ...
非常感谢任何帮助和见解。值得一提的是,表格Model是一个自定义表格。
答案 0 :(得分:1)
您可以将TableModel
导出到剪贴板,如图here和here所示。
附录:表格的模型是自定义的。
只要您的表格型号为TableModel
,您就可以提取数据here。
如果可以接受Office Open XML(OOXML)格式,您可以使用Apache POI来创建文件。
答案 1 :(得分:-1)
也许你应该试试这个:Java Swing -Export JTable To Excel File
void ExportToExel(JTable table, File file) {
try {
WritableWorkbook workbook1 = Workbook.createWorkbook(file);
WritableSheet sheet1 = workbook1.createSheet("First Sheet", 0);
TableModel model = table.getModel();
for (int i = 0; i < model.getColumnCount(); i++) {
Label column = new Label(i, 0, model.getColumnName(i));
sheet1.addCell(column);
}
int j = 0;
for (int i = 0; i < model.getRowCount(); i++) {
for (j = 0; j < model.getColumnCount(); j++) {
Label row = new Label(j, i + 1,
model.getValueAt(i, j).toString());
sheet1.addCell(row);
}
}
workbook1.write();
workbook1.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}