2016-10-05 10 views
0

Javaを使用して既存のExcelファイルに書き込んでいます。これはfileAです。 (私はこれにAPACHE POIを使用しています) excel fileAが誰かによって開かれている可能性があります。多くの人がアクセスする共有フォルダに保存されます。書き込みを行う前にExcelファイルを強制終了する

私は

java.io.FileNotFoundException遭遇しないようにしたい:既存の場合はどんなにので(それは別のプロセスによって使用されているため、プロセスはファイル にアクセスすることはできません)

をExcelファイルが開かれているかどうか、Javaアプリケーションの出力を保存する必要があります。

調査したところ、私はJavaコード内でfileA(Javaアプリケーションではなく他のプロセス/ユーザーによって開かれたファイル)を閉じることは不可能だと思います。

私が今やっていることは、新しいExcelファイルを作成することです。たとえば、fileAが現在開いている場合はfileBと言います。私は以下のコードを使用しています。 ファイルfile = null;

FileOutputStream out = null; 

    int workbookNo = 0; 
    do{ 
     String append = ""; 
     if(workbookNo != 0){ 
      append = "_Copy" + Integer.toString(workbookNo); 
     } 
     file = new File(filePath + "ValidateLock_" + dataDate + append + ".xlsx"); 

     try{ 
      out = new FileOutputStream(file); 
      workbookNo = 0; 
     }catch(FileNotFoundException e){ 
      //e.printStackTrace(); 
      workbookNo++; 
     } 
    }while(workbookNo != 0); 

ただし、以下のエラーが表示されます。

org.apache.poi.openxml4j.exceptions.NotOfficeXmlFileException:見つかりませ 有効なエントリや内容、これが有効なOOXML(Officeの オープンXML)ではないではありません。このようにしてみてください

+2

どの行でその例外が生成されますか? –

+0

Apache POI 3.15を試しましたか?それは、壊れたファイルや空のファイルの周りの一般的なユーザーエラーのエラーメッセージがすべてあります。 – Gagravarr

+0

他のユーザーがアクセスできないサンドボックスにファイルをコピーしようとしましたか(ByteArrayストリームのメモリ内か、コンピュータまたはアプリケーションがアクセスできる)、完了したらファイルをネットワークドライブにコピーし直しますか? – IceArdor

答えて

0

ファイル:

try { 
       FileInputStream file = new FileInputStream(new File("C:\\update.xls")); 

       HSSFWorkbook workbook = new HSSFWorkbook(file); 
       HSSFSheet sheet = workbook.getSheetAt(0); 
       Cell cell = null; 

       //Update the value of cell 
       cell = sheet.getRow(1).getCell(2); 
       cell.setCellValue(cell.getNumericCellValue() * 2); 
       cell = sheet.getRow(2).getCell(2); 
       cell.setCellValue(cell.getNumericCellValue() * 2); 
       cell = sheet.getRow(3).getCell(2); 
       cell.setCellValue(cell.getNumericCellValue() * 2); 
    //Close the excel input file (inputstream) 
       file.close(); 

       FileOutputStream outFile =new FileOutputStream(new File("C:\\update.xls")); 
       workbook.write(outFile); 
//Close output excel file 
       outFile.close(); 

      } catch (FileNotFoundException e) { 
       e.printStackTrace(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
関連する問題