简体   繁体   English

如何将xls文件读入jtable

[英]how to read xls file into jtable

Im having trouble with importing XLS data to jtable. 我在将XLS数据导入到jtable时遇到麻烦。

My program reads only the last row from XLS. 我的程序仅从XLS读取最后一行。

Here is my code: 这是我的代码:

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);
            }
        }
    }
}

How can this be fixed? 如何解决?

I believe the error exists because you must create a new Stavka object for each line in your XLS, and then add it to 'lista'. 我相信该错误存在,因为您必须为XLS中的每一行创建一个新的Stavka对象,然后将其添加到“ lista”中。 Finally, I believe you also want to set the model ( TabelaStavka ) outside these for loops. 最后,我相信您也想在这些for循环之外设置模型( TabelaStavka )。

I don't have a full Java environment installed here, so forgive me if there is any syntax error below. 我没有在此处安装完整的Java环境,因此如果下面有任何语法错误,请原谅我。 The most important thing is that you understand what are the fixes you have to do in your code. 最重要的是,您了解代码中必须做的修复。

Also, never underestimate code formatting, you should consider using a better IDE, which helps out better formatting your source code. 另外,永远不要低估代码格式,应该考虑使用更好的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);
        }
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM