如何将xls文件读入jtable

时间:2018-08-02 08:00:54

标签: java excel import jtable

在将XLS数据导入到jtable时遇到问题。

我的程序仅从XLS读取最后一行。

这是我的代码:

JButton btnImportExcelFiles = new JButton("EXCEL FILES");

btnImportExcelFiles.setIcon(new ImageIcon(racunariAplikacija.class.getResource("/image/Excel-icon.png")));

btnImportExcelFiles.addActionListener(new ActionListener()
{
    public void actionPerformed(ActionEvent arg0)
    {
        FileFilter filter = new FileNameExtensionFilter("Excel Files", "xls");

        // here is my file chooser
        JFileChooser jf = new JFileChooser();
        jf.addChoosableFileFilter(filter);
        int rezultat = jf.showOpenDialog(null);

        if(rezultat == JFileChooser.APPROVE_OPTION)
        {
            String excelPath = jf.getSelectedFile().getAbsolutePath();
            ArrayList<Stavka>lista  = new ArrayList<>();
            Stavka stavka = new Stavka();
            File f = new File(excelPath);
            Workbook wb = null;
            try {
                wb = Workbook.getWorkbook(f);
            }
            catch (BiffException e) {
                e.printStackTrace();
            }
            catch (IOException e) {
                e.printStackTrace();
            }

            // this is where i call for nested forloop
            Sheet s = wb.getSheet(0);
            int row = s.getRows();
            int col = s.getColumns();
            System.out.println("redovi" + row + "kolone" + col);

            for (int i = 0; i < 18; i++) {
                for (int j = 0; j < col; j++) {
                    Cell c = s.getCell(j,i);
                    if(j==0) {stavka.setStavkaID(Integer.parseInt(c.getContents().toString()));}
                    else if(j==1) {}
                    else if(j==2) {stavka.setSifraKomponente(c.getContents().toString());}
                    else if(j==3) {stavka.setOpis(c.getContents().toString());}
                    else if(j==4) {stavka.setVrednost(c.getContents().toString());}
                    else if(j==5) {stavka.setKuciste(c.getContents().toString());}
                    else if(j==6) {stavka.setSektor(c.getContents().toString());}
                    else if(j==7) {stavka.setRack(c.getContents().toString());}
                    else if(j==8) {stavka.setProizvodjac(c.getContents().toString());}
                    else if(j==9) {stavka.setKolicina(Integer.parseInt(c.getContents().toString()));}
                    //System.out.println(c.getContents());

                }   

                // this is my tableModel
                lista.add(stavka);
                TabelaStavka stavka1 = new TabelaStavka(lista);
                tblAzuriranjeMagacina.setModel(stavka1);
            }
        }
    }
}

如何解决?

1 个答案:

答案 0 :(得分:0)

我认为该错误存在,因为您必须为XLS中的每一行创建一个新的Stavka对象,然后将其添加到“ lista”中。最后,我相信您也想在这些TabelaStavka循环之外设置模型(for)。

我这里没有安装完整的Java环境,因此如果下面有语法错误,请原谅。最重要的是,您了解代码中必须做的修复。

此外,永远不要低估代码格式,您应该考虑使用更好的IDE,这有助于更好地格式化源代码。

JButton btnImportExcelFiles = new JButton("EXCEL FILES");

btnImportExcelFiles.setIcon(new ImageIcon(racunariAplikacija.class.getResource("/image/Excel-icon.png")));

btnImportExcelFiles.addActionListener(new ActionListener()
{
    public void actionPerformed(ActionEvent arg0)
    {
        FileFilter filter = new FileNameExtensionFilter("Excel Files", "xls");

        // here is my file chooser
        JFileChooser jf = new JFileChooser();
        jf.addChoosableFileFilter(filter);
        int rezultat = jf.showOpenDialog(null);

        if(rezultat == JFileChooser.APPROVE_OPTION)
        {
            String excelPath = jf.getSelectedFile().getAbsolutePath();
            ArrayList<Stavka>lista  = new ArrayList<>();
            File f = new File(excelPath);
            Workbook wb = null;
            try
            {
                wb = Workbook.getWorkbook(f);
            }
            catch (BiffException e)
            {
                e.printStackTrace();
            }
            catch (IOException e)
            {
                e.printStackTrace();
            }

            // this is where i call for nested forloop
            Sheet s = wb.getSheet(0);
            int row = s.getRows();
            int col = s.getColumns();
            System.out.println("redovi" + row + "kolone" + col);

            for (int i = 0; i < 18; i++)
            {
                Stavka stavka = new Stavka(); // new instance <<<<<<<<

                for (int j = 0; j < col; j++)
                {
                    Cell c = s.getCell(j,i);
                    if(j==0) {stavka.setStavkaID(Integer.parseInt(c.getContents().toString()));}
                    else if(j==1) {}
                    else if(j==2) {stavka.setSifraKomponente(c.getContents().toString());}
                    else if(j==3) {stavka.setOpis(c.getContents().toString());}
                    else if(j==4) {stavka.setVrednost(c.getContents().toString());}
                    else if(j==5) {stavka.setKuciste(c.getContents().toString());}
                    else if(j==6) {stavka.setSektor(c.getContents().toString());}
                    else if(j==7) {stavka.setRack(c.getContents().toString());}
                    else if(j==8) {stavka.setProizvodjac(c.getContents().toString());}
                    else if(j==9) {stavka.setKolicina(Integer.parseInt(c.getContents().toString()));}

                }   
                lista.add(stavka); // inside second for loop <<<<<<<<
            }

            // outside the second for loop <<<<<<<<<<<<<<<<<<<<<<<<<<
            // this is my tableModel
            TabelaStavka stavka1 = new TabelaStavka(lista);
            tblAzuriranjeMagacina.setModel(stavka1);
        }
    }
}