将JTable导出到XML文件

时间:2013-04-14 20:26:01

标签: java xml swing excel jtable

我正在尝试将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是一个自定义表格。

2 个答案:

答案 0 :(得分:1)

您可以将TableModel导出到剪贴板,如图herehere所示。

附录:表格的模型是自定义的。

只要您的表格型号为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();
    }
}