Импорт Excel (.xls) в приложение Java Swing - PullRequest
1 голос
/ 05 сентября 2011

Как импортировать файл Microsoft Excel (XLS) в приложение Java Swing?

Ответы [ 3 ]

5 голосов
/ 05 сентября 2011

Существует несколько библиотек с открытым исходным кодом, которые можно использовать для чтения файла Excel, таких как Apache POI .

Как только вы прочитали свой файл Excel в какую-то структуру данных, это можно записать в DataModel для JTable. В качестве альтернативы, вы можете написать пользовательскую модель данных, которая будет динамически читать из файла Excel, но я бы сделал два отдельных шага и увеличил бы сложность, как только вы поймете, какую библиотеку чтения файлов Excel вы выберете.

3 голосов
/ 27 апреля 2012

Вот простое руководство, которое экспортирует данные из JTable в файл Excel, используя формат с разделением табуляцией (TSV): Как экспортировать записи из JTable в MS Excel .

Приложениепредоставляет кнопку «Экспорт», которая затем вызывает диалоговое окно (JFileChooser), чтобы помочь пользователю указать местоположение файла / место назначения.

enter image description here

Реализация JTable

enter image description here

Экспортированный файл Excel (ширина столбцов, настраиваемая вручную)

2 голосов
/ 07 февраля 2012

Надеюсь, этот код поможет вам.

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();
            }
        }
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...