Hola a todos.
Estoy intentando abrir un excel desde mi aplicacion. He conseguido hacerlo con el formato .csv pero ahora estaba intentando abrirlo con el .xls.
Buscando informacion he encontrado tanto las librerias necesarias, como trozos de codigo.
Lo he intentado hacer pero cuando abro el archivo, el programa me da el error:
Cita: Exception occurred during event dispatching:
java.lang.ArrayIndexOutOfBoundsException: -11
at java.util.Vector.setSize(Vector.java:245)
at javax.swing.table.DefaultTableModel.justifyRows(De faultTableModel.java:245)
at javax.swing.table.DefaultTableModel.setDataVector( DefaultTableModel.java:207)
at javax.swing.table.DefaultTableModel.<init>(Default TableModel.java:107)
at javax.swing.table.DefaultTableModel.<init>(Default TableModel.java:89)
at javax.swing.table.DefaultTableModel.<init>(Default TableModel.java:69)
at gestion_campeonatos.InscribirParticipante$18.<init >(InscribirParticipante.java:970)
...... y muchas mas
......
.....
......
Os pongo el código.
Codigo del boton que al darle click, se me abre una ventana explorador y busco mi archivo excel:
Cita: private void jButton11ActionPerformed(java.awt.event.ActionEven t evt) {
JFileChooser fileChooser = new JFileChooser();
int status = fileChooser.showOpenDialog(null);
if(status==JFileChooser.APPROVE_OPTION){
File file=fileChooser.getSelectedFile();
if(file!=null){
rellenar_tabla_desde_excel(file);
}
}
}
Codigo del metodo rellenar_tabla_desde_excel(); :
Cita: private void rellenar_tabla_desde_excel(File file){
try {
//getting the workbook
wbook = Workbook.getWorkbook(file);
//una hoja en especifico
final Sheet hoja = wbook.getSheet(0);
Cell a1 = hoja.getCell(0, 0);
final int columnas = hoja.getColumns();
final int filas = hoja.getRows();
modelo = new DefaultTableModel() {
@Override
public String getColumnName(int column) {
Cell cell = hoja.getCell(column, 0);
LabelCell lc = (LabelCell) cell;
return lc.getString();
}
@Override
public boolean isCellEditable(int row, int col) {
return false;
}
@Override
public int getColumnCount() {
return columnas;
}
@Override
public int getRowCount() {
return filas-getColumnCount()-1;
}
@Override
public Object getValueAt(int row, int col) {
row++;
Cell cell = hoja.getCell(col, row);
if (cell.getType() == CellType.LABEL) {
LabelCell lc = (LabelCell) cell;
return lc.getString();
} else if (cell.getType() == CellType.NUMBER) {
NumberCell nc = (NumberCell) cell;
return nc.getValue();
} else if (cell.getType() == CellType.DATE) {
DateCell dc = (DateCell) cell;
return dc.getDate();
}
return null;
}
};
this.jTable1.setModel(modelo);
}catch (IOException ex) {
ex.printStackTrace();
}catch (BiffException ex) {
ex.printStackTrace();
}
}
He puesto en rojo donde justo me falla...el archivo excel me lo lee bien porque los metodos contar getcolumn y getrows me devuelven los valores correctos del excel...
Pero lo que nose es como hacer que teniendo ya un jtable1 con sus columnas en mi aplicacion, añadirle los valores del excel.
He probado tambien con
tablita = (DefaultTableModel)jTable1.getModel();
donde tablita lo declaro al inicio del metodo como DefaultTableModel tablita;
pero nada...por cierto en el codigo, "modelo" esta declarado al inicio de la clase, lo digo para que no penseis que no esta declarado.
Alguna idea?
Muchas gracias de antemano y aparte de resolver la duda, espero que le sirva a la gente para aprender a como abrir un excel :)