如何在Java上的JTable中填充一些Excel的行?

我正在从Excel文件导入数据到Java JTable 。 我可以导入所有工作表,但我只想导入一些行。 这是我用来导入工作表的代码:

  private void remplirtable(JTable table, int numfeuil,String s) { Workbook wb; File fichier = new File(s); try { //création de la table et importation du fichier wb = Workbook.getWorkbook(fichier); Sheet sheet = wb.getSheet(numfeuil); String[] columnsnames=new String[sheet.getColumns()]; DefaultTableModel model = new DefaultTableModel(); //Remplir la table désignée table.setModel(model); int colonnes = sheet.getColumns(); int lignes = sheet.getRows(); Object data[] = new Object[colonnes]; for (int i=0; i<lignes; i++){ for (int j=0; j<colonnes; j++){ if (i==0) { //Component c=super.prepareRenderer(renderer, j, i); model.addColumn(sheet.getCell(j,i).getContents()); } //System.out.println(sheet.getCell(j,i).getContents()); if(i>=1) data[j]=sheet.getCell(j,i).getContents(); }model.addRow(data); }model.removeRow(0); } catch (BiffException | IOException e) { } } 

为了只导入行(3,4,5),我用这个代码。 A是我们存储行数的数组:

 private void RemplirPostes(JTable table, int numfeuil,String s,int[] A) { Workbook wb; File fichier = new File(s); try { //création de la table et importation du fichier wb = Workbook.getWorkbook(fichier); Sheet sheet = wb.getSheet(numfeuil); DefaultTableModel model = new DefaultTableModel(); //Remplir la table désignée table.setModel(model); int colonnes = sheet.getColumns(); Object data[] = new Object[colonnes]; for(int k=0;k<A.length;k++) { for (int j=0; j<colonnes; j++){ if (A[k]==0) { //Component c=super.prepareRenderer(renderer, j, i); model.addColumn(sheet.getCell(j,A[k]).getContents()); } //System.out.println(sheet.getCell(j,i).getContents()); if(A[k]>=1) data[j]=sheet.getCell(j,A[k]).getContents(); }model.addRow(data); } model.removeRow(0); } catch (BiffException | IOException e) { } } 

而这一切都不起作用。

从这个完整的例子开始 ,下面的代码创build一个从MIN_ROWMAX_ROW (含)的COLUMNS数目的表。

查看公式

 private static final int COLUMNS = 4; private static final int MIN_ROW = 3; private static final int MAX_ROW = 5; … DataFormatter format = new DataFormatter(); DefaultTableModel model = new DefaultTableModel(0, COLUMNS); for (Row row : sheet) { if (row.getRowNum() >= MIN_ROW && row.getRowNum() <= MAX_ROW) { Vector rowData = new Vector(); for (Cell cell : row) { rowData.add(format.formatCellValue(cell)); } model.addRow(rowData); } } … JFrame f = new JFrame("TableTest"); f.add(new JTable(model)); 

附录:仔细研究目前的方法,您可能希望容纳不连续的行。 这可能有助于用List<Integer>replace你的数组。 然后你可以使用contains()代替上面的谓词:

 if (a.contains(row.getRowNum()) {…} 

附录:要评估公式,可以将FormulaEvaluator传递给formatCellValue()

视图评估

 FormulaEvaluator eval = book.getCreationHelper().createFormulaEvaluator(); … rowData.add(format.formatCellValue(cell, eval));