Java 使用 Jxl 實現 Excel 導入導出


開發過程中經常需要用到數據的導入導出功能,之前用的是POI,這次使用JXL,JXL相對於POI來說要輕量簡潔許多,在數據量不大的情況下還是非常實用的。這里做一下使用JXL的學習記錄。首先需要導入相應的jar包,pom.xml中添加如下內容即可

            <dependency>
                    <groupId>net.sourceforge.jexcelapi</groupId>
                    <artifactId>jxl</artifactId>
                    <version>2.6.12</version>
            </dependency>

看圖說話:

0、數據實體類:
 


1、導出代碼:
 


2、導入代碼:
 


3、導出測試:
 


4、導出測試結果:
因為jxl不支持新本Excel格式,舊版本的表格最多只支持65536條數據;
這里測試導出最大65536條數據耗時1秒左右,速度還是非常快的,當然我這個跟我測試的實體字段比較少可能也有關系
 


5、導入測試:
 


6、導入測試結果:

以上就是Java實現Excel 導入導出的全部代碼了

下面附上代碼

數據實體類:

public class Customer {
        private String name;
        private Integer age;
        private String telephone;
        private String address;
        //這里get/set方法省略不貼
}

1、導出代碼:

public static void excelExport(List<Customer> list, String path) {
        WritableWorkbook book = null;
        try {
                // 創建一個Excel文件對象
                book = Workbook.createWorkbook(new File(path));
                // 創建Excel第一個選項卡對象
                WritableSheet sheet = book.createSheet("第一頁", 0);
                // 設置表頭,第一行內容
                // Label參數說明:第一個是列,第二個是行,第三個是要寫入的數據值,索引值都是從0開始
                Label label1 = new Label(0, 0, "姓名");// 對應為第1列第1行的數據
                Label label2 = new Label(1, 0, "年齡");// 對應為第2列第1行的數據
                Label label3 = new Label(2, 0, "手機號碼");// 對應為第3列第1行的數據
                Label label4 = new Label(3, 0, "住址");// 對應為第4列第1行的數據
                // 添加單元格到選項卡中
                sheet.addCell(label1);
                sheet.addCell(label2);
                sheet.addCell(label3);
                sheet.addCell(label4);
                // 遍歷集合並添加數據到行,每行對應一個對象
                for (int i = 0; i < list.size(); i++) {
                        Customer customer = list.get(i);
                        // 表頭占據第一行,所以下面行數是索引值+1
                        // 跟上面添加表頭一樣添加單元格數據,這里為了方便直接使用鏈式編程
                        sheet.addCell(new Label(0, i + 1, customer.getName()));
                        sheet.addCell(new Label(1, i + 1, customer.getAge().toString()));
                        sheet.addCell(new Label(2, i + 1, customer.getTelephone()));
                        sheet.addCell(new Label(3, i + 1, customer.getAddress()));
                }
                // 寫入數據到目標文件
                book.write();
        } catch (Exception e) {
                e.printStackTrace();
        } finally {
                try {
                        // 關閉
                        book.close();
                } catch (Exception e) {
                        e.printStackTrace();
                }
        }
}

2、導入代碼:

public static List<Customer> excelImport(String path) {
        List<Customer> list = new ArrayList<>();
        Workbook book = null;
        try {
                // 獲取Excel對象
                book = book.getWorkbook(new File(path));
                // 獲取Excel第一個選項卡對象
                Sheet sheet = book.getSheet(0);
                // 遍歷選項卡,第一行是表頭,所以索引數-1
                for (int i = 0; i < sheet.getRows() - 1; i++) {
                        Customer customer = new Customer();
                        // 獲取第一列第二行單元格對象
                        Cell cell = sheet.getCell(0, i + 1);
                        customer.setName(cell.getContents());
                        // 獲取第二行其他數據
                        customer.setAge(Integer.parseInt(sheet.getCell(1, i + 1).getContents()));
                        customer.setTelephone(sheet.getCell(2, i + 1).getContents());
                        customer.setAddress(sheet.getCell(3, i + 1).getContents());
                        list.add(customer);
                }
                // 返回導入的數據集合
                return list;
        } catch (Exception e) {
                e.printStackTrace();
        } finally {
                try {
                        // 關閉
                        book.close();
                } catch (Exception e) {
                        e.printStackTrace();
                }
        }
        return null;
}

3、導出測試代碼:

public static void main(String[] args) {
        List<Customer> list = new ArrayList<>();
        // 創建數據
        for (int i = 0; i < 65535; i++) {
                Customer customer = new Customer();
                customer.setName("隔壁老王_" + i);
                customer.setAge(i);
                customer.setTelephone("1301234" + i);
                customer.setAddress("浙江杭州西湖");
                list.add(customer);
        }
        String path = "D:\\eclelTest\\xs.xls";
        System.out.println("開始導出...");
        long s1 = new Date().getTime();
        // 開始導出
        excelExport(list, path);
        long s2 = new Date().getTime();
        long time = s2 - s1;
        System.out.println("導出完成!消耗時間:" + time + "毫秒");
}

4、導入測試代碼:

public static void main(String[] args) {
        String path = "D:\\eclelTest\\xs.xls";
        List<Customer> list = excelImport(path);
        for (Customer customer : list) {
                System.out.println(customer);
        }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM