2013-04-14 3 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 в буфер обмена, как показано на рисунке here и here.

Addendum: Модель стола является обычным.

Пока модель вашего стола равна TableModel, вы можете извлечь данные, как показано на рисунке here.

Если формат Office Open XML (OOXML) является приемлемым, вы можете использовать Apache POI для создания файла.

+0

Спасибо, но не совсем ответ, который я ищу. Я хотел бы иметь работу XMLEncoder. – Brayden

+0

Вы можете прочитать сгенерированный XML с помощью XMLDecoder для [example] (http://javaprogramming.language-tutorial.com/2012/10/convert-java-object-to-xml-and-convert.html), но Excel не может; подробнее [здесь] (http://stackoverflow.com/a/5898529/230513). – trashgod

+0

Есть ли способ экспортировать JTable с помощью Java, чтобы 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(); 
    } 
}