2013-04-14 71 views
0

我試圖將JTable導出到Microsoft Excel可用的文件。將JTable導出到XML文件

本來,我寫數據到一個文本文件,並設置擴展名爲「.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 ... 

任何幫助和洞察力是極大的讚賞。可能還值得一提的是表模型是一個自定義模型。

回答

1

您可以將TableModel導出到剪貼板,如herehere所示。

附錄:該表的模型是一個自定義的模型。

只要您的表格模型爲TableModel,您可以提取數據,如here所示。

如果Office Open XML(OOXML)格式可以接受,則可以使用Apache POI來創建該文件。

+0

謝謝你,但不完全的答案我要找的。我想讓XMLEncoder工作。 – Brayden

+0

您可以使用'XMLDecoder'讀取生成的XML,例如[http://javaprogramming.language-tutorial.com/2012/10/convert-java-object-to-xml-and-convert.html],但Excel不能;更多[這裏](http://stackoverflow.com/a/5898529/230513)。 – trashgod

+0

有沒有辦法使用Java導出JTable,以便Excel可以讀取它?這是一個相當重要的功能,但由於授權問題,我寧願不使用API​​。 – Brayden

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