2016-07-20 13 views
0

Ich versuche, Daten von einem Blatt aus Excel-Datei zu lesen und zu anderem Blatt desselben Excel file.I schreiben haben versucht, dies:Der Prozess kann nicht auf die Datei zugreifen, da sie von einem anderen Prozess verwendet wird

FileInputStream file = new FileInputStream(new File("E:\\excel\\input.xlsx")); 
      //Create Workbook instance holding reference to .xlsx file 
      XSSFWorkbook workbook = new XSSFWorkbook(file); 
      //Get first/desired sheet from the workbook 
      XSSFSheet sheet = workbook.getSheetAt(0); 
      //Iterate through each rows one by one 
      Iterator<Row> rowIterator = sheet.iterator(); 
      while (rowIterator.hasNext()) 
      { 
       Row row = rowIterator.next(); 
       //For each row, iterate through all the columns 
       Iterator<Cell> cellIterator = row.cellIterator(); 
       while (cellIterator.hasNext()) 
       { 
        Cell cell = cellIterator.next(); 
        //Check the cell type and format accordingly 
        switch (cell.getCellType()) 
        { 
        case Cell.CELL_TYPE_NUMERIC: 
         System.out.print((int)cell.getNumericCellValue()+ "  "); 
         break; 
        case Cell.CELL_TYPE_STRING: 
         System.out.print(cell.getStringCellValue()); 
         break; 
        } 
       } 
       System.out.println(""); 
      } 
      file.close(); 
      CreationHelper createHelper = workbook.getCreationHelper(); 
      XSSFSheet newSheet = workbook.createSheet("new sheet"); 
      // Create a row and put some cells in it. Rows are 0 based. 
      Row row = newSheet.createRow((short)0); 
      // Create a cell and put a value in it. 
      Cell cell = row.createCell(0); 
      cell.setCellValue(1); 
      // Or do it on one line. 
      row.createCell(1).setCellValue(1.2); 
      row.createCell(2).setCellValue(
        createHelper.createRichTextString("This is a string")); 
      row.createCell(3).setCellValue(true); 
      System.out.println("writing to file"); 
      // Write the output to a file 
      FileOutputStream fileOut = new FileOutputStream(new File("E:\\excel\\input.xlsx")); 
      workbook.write(fileOut); 
      fileOut.close(); 

ich habe erfolgreich Daten aus Excel-Blatt aber ich bin immer Ausnahme während in neues Blatt zu schreiben

gegeben unter
java.io.FileNotFoundException: E:\excel\input.xlsx (The process cannot access the file because it is being used by another process) 
+0

Sie sind auf die gleiche Datei zu schreiben, von dem Sie das Lesen ohne es zu schließen, vielleicht versuchen, auf eine andere Datei ausgeben? – Gar

Antwort

3

Dies geschieht, wenn Sie versuchen, auszuführen Dieses Programm, während die Datei "input.xlsx" bereits von einer anderen Anwendung geöffnet wurde.

schließen Sie bitte jede Instanz von MS Excel und versuchen Sie es erneut ausführen

+0

immer die Out-of-the-Box-Option vergessen – Zeromus

0

nur eine Vermutung, aber XSSFWorkbook sollte Verschließbare implementieren somit hat es eine .close(), die aufgerufen werden soll. Vielleicht wird das Dateiergebnis deswegen immer noch verwendet? Sie werden wahrscheinlich einen mittleren Schritt benötigen: Schreiben Sie in eine neue Datei, schließen Sie das XSSFWorkbook und kopieren Sie dann die neue Datei auf die alte, auf die Sie schreiben möchten

+0

Aufruf der Methode close von XSSFWorkbook, aber immer noch die gleiche Ausnahme. – Keshav

Verwandte Themen