簡體   English   中英

Java, Apache POI, XSSFWorkbook 極慢

[英]Java, Apache POI, XSSFWorkbook extremly slow

我使用 Apache POI 來讀取 excel 文件 (xlsx) 這在 Eclipse 中工作正常。 30.000 行和 20 列沒問題。 大約 5 秒后加載。

如果我生成一個可運行的 JAR 文件,它不會處理 excel 文件

    try {
        soeArraylist.clear();
        //JOptionPane.showMessageDialog(null, "SoE Pre Test 1", "Done" , JOptionPane.INFORMATION_MESSAGE);
        //Workbook workbook2 = new XSSFWorkbook();
        //JOptionPane.showMessageDialog(null, "SoE Pre Test 2", "Done" , JOptionPane.INFORMATION_MESSAGE); 
        
        JOptionPane.showMessageDialog(null, "SoE Import started 1", "Done" , JOptionPane.INFORMATION_MESSAGE); 
        
        FileInputStream excelFile = new FileInputStream(new File(FILE__NAME));
        JOptionPane.showMessageDialog(null, "SoE Import started 2 " + FILE__NAME, "Done" , JOptionPane.INFORMATION_MESSAGE); 
        
        
        Workbook workbook = new XSSFWorkbook(excelFile);
        JOptionPane.showMessageDialog(null, "SoE Import started 3", "Done" , JOptionPane.INFORMATION_MESSAGE); 
        
        Sheet datatypeSheet = workbook.getSheet("SoE");
        JOptionPane.showMessageDialog(null, "SoE Import started 4", "Done" , JOptionPane.INFORMATION_MESSAGE); 
        
        Iterator<Row> iterator = datatypeSheet.iterator();
        JOptionPane.showMessageDialog(null, "SoE Import started 5", "Done" , JOptionPane.INFORMATION_MESSAGE); 
        
        DataFormatter formatter = new DataFormatter(Locale.US);
        //JOptionPane.showMessageDialog(null, "SoE Import started 6", "Done" , JOptionPane.INFORMATION_MESSAGE); 
        
        JOptionPane.showMessageDialog(null, "File opened", "Done" , JOptionPane.INFORMATION_MESSAGE); 
        while (iterator.hasNext()) {

            Row currentRow = iterator.next();

 ........ code removed .......

    } catch (FileNotFoundException e) {
        e.printStackTrace();
        JOptionPane.showMessageDialog(null, "SoE Import FileNotFoundException", "FileNotFoundException" , JOptionPane.INFORMATION_MESSAGE);
    } catch (IOException e) {
        e.printStackTrace();
        JOptionPane.showMessageDialog(null, "SoE Import IOException", "IOException" , JOptionPane.INFORMATION_MESSAGE);
    }

所以它在 SoE Import "started 2" 之后停止了它不會停止但它看起來像它的處理很長時間。 1小時后仍然沒有結果。

我試圖在 Eclipse 之外創建一個空工作簿和最后 20 秒。 在 Eclipse 中不到 1 秒

    JOptionPane.showMessageDialog(null, "SoE Pre Test 1", "Done" , JOptionPane.INFORMATION_MESSAGE);
    Workbook workbook2 = new XSSFWorkbook();
    JOptionPane.showMessageDialog(null, "SoE Pre Test 2", "Done" , JOptionPane.INFORMATION_MESSAGE);

Java 在 Eclipse 和 W10 機器上是 1.8。 我知道這里有一些類似的問題,但沒有一個在 Eclipse 和獨立的 JAR 之間有不同的時間。

有任何想法嗎?

當我在 POI 5.0.0 中遇到這個問題時,對我有用的是回滾到 4.1.2,它的性能提高了大約 20%,但隨后還選擇了“將所需的庫提取到 JAR”而不是“將所需的庫打包到 JAR” " 這是默認的 Eclipse 設置,與回滾到 4.1.2 相比,改進了大約 90%。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM