java - 如何将xls文件读入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);
}
}
}
}
如何解决这个问题?
解决方案
我相信存在错误,因为您必须Stavka
为 XLS 中的每一行创建一个新对象,然后将其添加到“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);
}
}
}
推荐阅读
- identityserver4 - 将 OneLogin 作为 OIDC 添加到 IdentityServer4
- javascript - 函数在控制台中返回未定义
- typescript - 如何根据可区分联合的特定成员强类型函数的返回类型?
- c++ - 对字符串数组进行插入排序
- android - 删除 doOnTextChanged 上的文本会删除我以编程方式设置的编辑文本的特殊格式
- google-cloud-platform - 数据融合无法解析来自 JSON 的响应
- python - Shopify Webhook HMAC 验证与 Flask
- url - 如何捕获发送到谷歌表单的 URL 参数,并将它们保存到连接的电子表格?
- java - 如何使用参数将非常量变量值传递给方法?
- azure - 为多个产品和每个产品的不同环境设置密钥值的最佳方法