[英]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.