【问题标题】:Importing Excel (.xls) in Java Swing application在 Java Swing 应用程序中导入 Excel (.xls)
【发布时间】:2011-09-05 10:19:29
【问题描述】:

如何将 Microsoft Excel (XLS) 文件导入 Java Swing 应用程序?

【问题讨论】:

  • 您到底想用 excel 文件做什么?你想创建一个基于 excel 表单的 gui 吗?
  • 如果XLS是数据表,可以解析文件产生列名的String[]和数据的Object[][],很容易放在@ 987654321@。你能解析文件吗?请注意,解析它与 Swing 无关。

标签: java excel swing


【解决方案1】:

有几个开源库可用于读取 excel 文件,例如 Apache POI

一旦您将 excel 文件读入某种数据结构,就可以将其写入 JTable 的 DataModel。或者,您可以编写一个自定义的 DataModel,它将从 excel 文件中动态读取,但是一旦您了解了您选择的 excel 文件读取库,我将分别执行这两个步骤并增加复杂性。

【讨论】:

    【解决方案2】:

    这是一个简单的教程,它使用制表符分隔值 (TSV) 格式将数据从 JTable 导出到 excel 文件:How To Export Records From JTable To MS Excel

    应用程序提供一个导出按钮,然后触发一个对话框 (JFileChooser) 以帮助用户指定文件位置/目标。

    JTable 实现

    导出的excel文件(手动调整列宽)

    【讨论】:

    • 问题问如何从excel导入数据。
    【解决方案3】:

    希望此代码对您有所帮助。

    import java.io.File;
    import java.sql.*;
    import java.util.ArrayList;
    import java.util.List;
    public class ExcelSheetReader{
       private static final String DRIVER_NAME = "sun.jdbc.odbc.JdbcOdbcDriver";
       private static final String DATABASE_URL = "jdbc:odbc:Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};DBQ=%s;DriverID=22;READONLY=false";
    
       private static final String FILEPATH = "C:/Documents and Settings/web/Desktop/Employee.xlsx";
    
       private static Connection con = null;
       private static Statement stmt = null;
    
       private Connection getConnection(File file) throws ClassNotFoundException, SQLException{
           Class.forName(DRIVER_NAME);
           Connection con = DriverManager.getConnection(String.format(DATABASE_URL, file.getAbsolutePath()));
           return con;
       }
    
         public List<String> getData(File file, String []columns) throws SQLException {
    
           List<String> list = null;
              try {
                  ResultSet rs = getRecord(file, "select emailid from [Sheet1$]");
                  ResultSetMetaData rsmd = rs.getMetaData();
                  System.out.println(rsmd.getColumnCount());
    
                 while (rs.next()) {
                     if (list==null)
                            list = new  ArrayList<String>();
                     for (int i=0; i<columns.length; i++) {
                         list.add(rs.getString(columns[i]));
                     }
                 }
                 rs.close();
               } catch (Exception e) {
                }
              finally {
                 closeConnection();
                 return list;
              }
       }
       private void closeConnection() throws SQLException {
           if (stmt!=null) {
               stmt.close();
               stmt = null;
           }
    
           if (con!=null) {
               con.close();
               con = null;
           }
    
    }
    ResultSet getRecord(File file, String query) throws ClassNotFoundException, SQLException {
            con = getConnection(file);
           stmt = con.createStatement();
           ResultSet rs = stmt.executeQuery(query);
        return rs;
    }
    public static void main(String[] args) {
           /*ExcelSheetReader reader = new ExcelSheetReader();
           String[] columns = {"emailid"};
           File file = new File(FILEPATH);
           List<String> list = null;
        try {
            list = reader.getData(file,columns);
        } catch (SQLException e) {
            e.printStackTrace();
        }
           for (Iterator<String> iterator = list.iterator(); iterator.hasNext();) {
            String string = (String) iterator.next();
            System.out.println(string); 
           }
           */
           ExcelSheetReader reader = new ExcelSheetReader();
            File file = new File(FILEPATH);
            if (file.exists()) {
                try {
                    ResultSet rs = reader.getRecord(file, "select emailid from [Sheet1$]");
                    ResultSetMetaData rsmd = rs.getMetaData();
                    int count = rsmd.getColumnCount();
                    //System.out.println(count);
                    while (rs.next()) {
                        for (int i=1; i<=count; i++) {
                            System.out.println(rsmd.getColumnName(i)+": "+rs.getString(rsmd.getColumnName(i)));
                        }
                    }
                } catch (ClassNotFoundException e) {
                    e.printStackTrace();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
       }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-23
      相关资源
      最近更新 更多