Jtable导入Excel数据使用poi兼容exls格式

找不到类似的,自己琢磨出来,代码没优化。

import java.io.File;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import jxl.Cell;  
import jxl.CellType;  
import jxl.LabelCell;  
import jxl.NumberCell;  
import jxl.Sheet;  
import jxl.Workbook;  
import jxl.read.biff.BiffException; 
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;






/**
 *
 * @author Chihua_Sun
 */
public class ImportTable {
    
    
    public void readExcel(DefaultTableModel tableModel,JTable jTable){
          JFileChooser fileChooser=new JFileChooser();//文件选择
        MyFileFilter fileFilter=new MyFileFilter();  //创建过滤器对象,自定义的过滤器
        fileChooser.setCurrentDirectory(new File(".")); 
        fileChooser.setAcceptAllFileFilterUsed(false);   //去掉显示所有文件这个过滤器。
        fileChooser.setFileFilter(fileFilter);
        int result=fileChooser.showOpenDialog(null);//显示保存对话框,并返回操作选项
        if(result==JFileChooser.APPROVE_OPTION){  //判断是否选择保存按钮
            File excel=new File(fileChooser.getSelectedFile().getPath());
            String name=excel.getName();
            String suffix=name.substring(name.lastIndexOf('.')+1).toLowerCase();
            if("xls".equals(suffix)){
            readXls(excel, tableModel, jTable);
            }else if("xlsx".equals(suffix)){
                readXlsx(excel, tableModel, jTable);
            }
        }
    }
/**
      * Read the Excel 2010s
      * @param path the path of the Excel
     * @param tableModel
     * @param jTable
      */
   public void readXlsx(File path,DefaultTableModel tableModel,JTable jTable){
       try{
            InputStream is = new FileInputStream(path);
            XSSFWorkbook xssfWorkbook = new XSSFWorkbook(is);
           // 读取 Sheet
            XSSFSheet xssfSheet = xssfWorkbook.getSheetAt(0);
            //读取表头
            XSSFRow title = xssfSheet.getRow(0);
            Object[] cName = new Object[title.getPhysicalNumberOfCells()]; 
            for(int tnum=0;tnum<title.getPhysicalNumberOfCells();tnum++){
                cName[tnum]=title.getCell(tnum).toString();
            }
            tableModel.setColumnIdentifiers(cName);//把表头放进tableModel
            // 读取行
            for (int rowNum = 1; rowNum <= xssfSheet.getLastRowNum(); rowNum++) {
              XSSFRow xssfRow = xssfSheet.getRow(rowNum);
              Object[] row = new Object[title.getPhysicalNumberOfCells()]; 
                if (xssfRow != null) {
                    for(int i=0;i<xssfRow.getPhysicalNumberOfCells();i++){
                        row[i]=((XSSFCell)xssfRow.getCell(i)).toString();
                    }
               }
                tableModel.addRow(row);  
            }
       }catch(Exception io){
            JOptionPane.showMessageDialog(null,"导入导入失败,请确认Excel文件格式正确!(不支持单元格合并等复杂Excel文件)","失败",JOptionPane.INFORMATION_MESSAGE);


       }
         JOptionPane.showMessageDialog(null,"导入成功","成功",JOptionPane.INFORMATION_MESSAGE); 
         jTable.setModel(tableModel);
     }
 
     /**
      * Read the Excel 2003-2007
      * @param path the path of the Excel
     * @param tableModel
     * @param jTable
      */
    public void readXls(File path,DefaultTableModel tableModel,JTable jTable)  {
       try{
            InputStream is = new FileInputStream(path);
             HSSFWorkbook hssfWorkbook = new HSSFWorkbook(is);
             // 读取 Sheet      
             HSSFSheet hssfSheet = hssfWorkbook.getSheetAt(0);
             //读取表头
            HSSFRow title = hssfSheet.getRow(0);
            Object[] cName = new Object[title.getPhysicalNumberOfCells()]; 
            for(int tnum=0;tnum<title.getPhysicalNumberOfCells();tnum++){
                cName[tnum]=title.getCell(tnum).toString();
            }
            tableModel.setColumnIdentifiers(cName);//把表头放进tableModel
             // 读取 行
            for (int rowNum = 1; rowNum <= hssfSheet.getLastRowNum(); rowNum++) {
                HSSFRow hssfRow = hssfSheet.getRow(rowNum);
                 Object[] row = new Object[title.getPhysicalNumberOfCells()]; 
                if (hssfRow != null) {
                    for(int i=0;i<hssfRow.getPhysicalNumberOfCells();i++){
                        row[i]=((HSSFCell )hssfRow.getCell(i)).toString();
                    }
               }
                tableModel.addRow(row);  
            }
        
       }catch(Exception io){
           JOptionPane.showMessageDialog(null,"导入导入失败,请确认Excel文件格式正确!(不支持单元格合并等复杂Excel文件)","失败",JOptionPane.INFORMATION_MESSAGE);
       }
        JOptionPane.showMessageDialog(null,"导入成功","成功",JOptionPane.INFORMATION_MESSAGE); 
        jTable.setModel(tableModel);
    }
    
    public void readheader(){
        
    }
    
    
    
    
//       
//    public boolean readExcelxls(File file,DefaultTableModel tableModel,JTable jTable){  
//        Workbook rwb = null;  
//        try{  
//              
//            FileInputStream is = new FileInputStream(file);  
//            //创建一个workbook类读取excel文件  
//            rwb = Workbook.getWorkbook(file);  
         得到第i个工作薄  
//            Sheet st = rwb.getSheet(0);//这里有两种方法获取sheet表,1为名字,而为下标,从0开始  
         //得到st的列数  
         System.out.println("列"+ st.getColumns());  
         //得到st的行数  
//          System.out.println("行"+ st.getRows());  
           Vector<String> cName = new Vector<String>();
//            Object[] cName = new Object[st.getColumns()]; 
//            for(int j = 0;j<st.getColumns();j++){
               Cell c00 =st.getCell(j,0);
               LabelCell labelc00 = (LabelCell)c00;
               cName[j]=labelc00.getString();
               cName.add(((LabelCell)st.getCell(j,0)).getString());
//                cName[j]=((LabelCell)st.getCell(j,0)).getString();
//            }
//            tableModel.setColumnIdentifiers(cName);
//             Object[] object = new Object[st.getRows()];  
//            if(st.getRows()>2){  
//                for(int t=tableModel.getRowCount()-1;t>=0;t--){  
//                    tableModel.removeRow(t);  
//                }  
//                //行循环  
//                for(int i = 1;i<st.getRows();i++){  
//                    //列循环  
//                    for(int j = 0;j<st.getColumns();j++){  
//                        //      得到第j列第i行的数据  
//                        Cell c00 = st.getCell(j,i);  
//                        if(c00.getType() == CellType.LABEL)  
//                        {  
//                            LabelCell labelc00 = (LabelCell)c00;  
//                            object[j] = labelc00.getString();  
//                            //jTable.setValueAt(labelc00.getString(), i-1, j);  
//                        }else if(c00.getType() == CellType.NUMBER)  
//                        {  
//                            Double numd;  
//                            int numi;  
//                            NumberCell numc10 = (NumberCell)c00;  
//                            numd = new Double(numc10.getValue());     
//                            numi = numd.intValue();  
//                            object[j] = numd;  
                         jTable.setValueAt(numi, i-1, j);  
//                        }  
//                          
//                    }  
//                    tableModel.addRow(object);  
//                }  
//            }else{  
//                for(int i = 1;i<st.getRows();i++){  
//                    //列循环  
//                    for(int j = 0;j<st.getColumns();j++){  
//                        //      得到第j列第i行的数据  
//                        Cell c00 = st.getCell(j,i);  
//                        if(c00.getType() == CellType.LABEL)  
//                        {  
//                            LabelCell labelc00 = (LabelCell)c00;  
//                            object[j] = labelc00.getString();  
//                            //jTable.setValueAt(labelc00.getString(), i-1, j);  
//                        }else if(c00.getType() == CellType.NUMBER)  
//                        {  
//                            Double numd;  
//                            int numi;  
//                            NumberCell numc10 = (NumberCell)c00;  
//                            numd = new Double(numc10.getValue());     
//                            numi = numd.intValue();  
//                            object[j] = numi;  
                         jTable.setValueAt(numi, i-1, j);  
//                        }  
//                          
//                    }  
//                    tableModel.addRow(object);  
//                }  
//            }  
//            JOptionPane.showMessageDialog(null,"导入"+file.getName()+"成功","成功",JOptionPane.INFORMATION_MESSAGE); 
//            jTable.setModel(tableModel);
//        }catch(FileNotFoundException e){  
//            System.out.println("文件"+file.getName()+"没有找到");  
//            return false;  
//        } catch (BiffException e) {  
//            System.out.println("文件格式不正确");  
//            JOptionPane.showMessageDialog(null,"文件格式不正确","失败",JOptionPane.ERROR_MESSAGE);
//            return false;  
//        } catch (IOException e) {  
//            System.out.println("文件读写失败");  
//            return false;  
//        }finally{  
         关闭
//            try{
//            rwb.close();  
//            }catch(Exception e){
//            }
//        }  
//        return true;      
//}  
//    
    
    
}
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JTableExcel是常被用在网格或格中显示数据。通常,用户希望输入到 JTable数据已经存在于 Excel 电子格中。Excel 格式使用在非 Excel 软件中来实现导入-导出功能。因为如此,Java 软件也应该提供通用的剪贴板功能,例如在 JTableExcel 间复制和粘贴。本文展示了如何使用系统粘贴板在 Java 程序和 Excel 间复制数据使用这一 Java 技巧中提供的适配器类,只需一行代码即可添加在 JTables 和 Excel 间复制和粘贴信息的功能。请注意,由于未签名的 applet 不能使用系统剪贴板,此功能不适用于这些 Java 程序。 当今很多业务应用程序都是使用 Java 开发的,并且以后这种用 Java 开发的应用会更多。而在许多应用程序都使用SwingJTable 组件,以类似电子格的格式显示数据。如果业务应用程序可以将数据导入 Microsoft Excel 和从 Microsoft Excel 中导出数据,则会为用户带来方便,使用户可以使用无处不在的该电子格程序的强大功能。此 Java 技巧将帮助您理解系统剪贴板,并使您的 JTable 能够与 Excel 交互和互操作。您将看到,通过在当前应用程序中仅仅添加另外的一行代码即可实现这一有用功能的添加。 要实现这一目标,需要做的只是复制这里给出的文件 ExcelAdapter.java,对其进行编译,并确保您的应用程序可以找到 ExcelAdapter.class 文件;做完后,JTable 就可以与 Excel 进行通话了!我们将向您展示仅通过这一行代码,如何实现到 Excel 的复制 (Ctrl+C) 和粘贴 (Ctrl+V) 以及从 Excel 进行的复制和粘贴。另外还提供了一个使用 ExcelAdapter 的示例应用程序
Java语言中,我们可以使用Apache POI库来将JTable中的数据导出到Excel中。 首先,需在项目中添加Apache POI库的依赖。然后,我们可以通过以下步骤实现导出操作: 1. 创建一个Workbook对象,代整个Excel文件。 2. 创建一个Sheet对象,代Excel文件中的一个格。 3. 根据JTable的行数和列数,在Sheet对象上创建相应数量的行和列。 4. 使用循环将JTable中的数据逐行逐列地写入到Excel格中。 5. 最后,使用FileOutputStream将Workbook对象中的内容写入到磁盘上的Excel文件中。 以下是一个简单的示例代码,实现了将JTable中的数据导出到Excel文件的操作: ```java import java.io.FileOutputStream; import javax.swing.JTable; import org.apache.poi.ss.usermodel.*; public class ExportToExcel { public static void export(JTable table, String filePath) { Workbook workbook = WorkbookFactory.create(true); // 创建一个Workbook对象 Sheet sheet = workbook.createSheet(); // 创建一个Sheet对象 for (int row = 0; row < table.getRowCount(); row++) { Row sheetRow = sheet.createRow(row); // 创建行 for (int col = 0; col < table.getColumnCount(); col++) { Cell cell = sheetRow.createCell(col); // 创建单元格 Object value = table.getValueAt(row, col); if (value != null) { cell.setCellValue(value.toString()); // 设置单元格的值 } } } try { FileOutputStream fileOut = new FileOutputStream(filePath); workbook.write(fileOut); // 将Workbook对象中的内容写入到Excel文件中 fileOut.close(); workbook.close(); System.out.println("导出成功!"); } catch (Exception e) { e.printStackTrace(); System.out.println("导出失败!"); } } } ``` 你只需调用`export`方法,并传入你的JTable对象和指定的输出文件路径,即可将JTable中的数据导出到Excel文件中。 希望以上内容能对你有所帮助!如有疑问,请随时追问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值