Я создал регистрационную форму, которая собирает данные от пользователя и отображает ее в Jtable, затем я хочу разрешить пользователю нажимать кнопку, чтобы экспортировать содержимое Jtable в форму excel. В таблице отображения он может отображать все пользовательские данные, но когда я экспортирую в excel, он отображает только имена столбцов и первую строку данных, поэтому я хочу знать, сделал ли я это неправильно?Jtable to Excel в Java
вход пользователя:
ArrayList<ArrayList<String>> list = new ArrayList<ArrayList<String>>();
String[] columnNames = new String[] {"First Name", "Last Name", "Email", "Degree", "Year", "Event"};
Object[][] tabledata = new Object[1][6];
String fn = FirstName.getText();
String ln = LastName.getText();
String em = Email.getText();
String re = ReEnter.getText();
String de = Degree.getSelectedItem().toString();
String yr = Year.getSelectedItem().toString();
String ev = EventDate.getSelectedItem().toString();
ArrayList<String> data = new ArrayList<String>();
data.add(fn);
data.add(ln);
data.add(em);
data.add(de);
data.add(yr);
data.add(ev);
list.add(data);
//Set fields to empty
FirstName.setText("");
LastName.setText("");
Email.setText("");
ReEnter.setText("");
Degree.setSelectedItem(null);
Year.setSelectedItem(null);
EventDate.setSelectedItem(null);
// print data to table
Object[][] temp = new Object[tabledata.length+1][6];
for(int i=0;i<tabledata.length;i++){
for(int j=0;j<6;j++){
temp[i][j] = tabledata[i][j];
}
temp[tabledata.length-1][0]= fn;
temp[tabledata.length-1][1]= ln;
temp[tabledata.length-1][2]= em;
temp[tabledata.length-1][3]= de;
temp[tabledata.length-1][4]= yr;
temp[tabledata.length-1][5]= ev;
}
tabledata = temp;
table.setModel(new DefaultTableModel(tabledata, columnNames));
}
}
Экспорт данных в Excel:!
try {
TableModel model = table.getModel();
File file = new File("member.xls");
FileWriter output = new FileWriter(file);
for(int i = 0; i <model.getColumnCount(); i++){
output.write(model.getColumnName(i) + "\t");
}
output.write("\n");
for(int k=0;k<model.getRowCount();k++) {
for(int j=0;j<model.getColumnCount();j++) {
output.write(model.getValueAt(k,j).toString()+"\t");
}
output.write("\n");
output.close();
}
}
catch(Exception e) {
e.printStackTrace();
}
[Запустить программу] [1]: http://i.stack.imgur.com/T99L5.png [вывезенных первенствует файл] [2]: http://i.stack.imgur.com/ZGy3Z.png
Я не уверен, потому что если я вызову output.close() вне первого цикла for, файл excel будет пустым – user2752558