2015-01-15 2 views
1

저는 Java에서 새로 도입되었으며 동적 데이터를 Excel 파일에 삽입하는 데 문제가 있습니다. 다음은 코드입니다. Excel 파일을 삭제하고 프로그램을 다시 실행하면. 그러면 새 파일을 만들고 다음 데이터를 삽입합니다. (hello, goodbye, true, date). 첫 번째 실행 중에도 프로그램에서 다음 데이터를 삽입 할 수 있지만 다음 실행을 수행 할 때 데이터를 삽입 할 수 없습니다 다음 줄에 저장하십시오. 파일 존재 여부를 확인하는 다음 코드는 다음과 같습니다. 나는 내가이 코드를 며칠 동안 고민하고있을 때 나를 도울 사람을 얻을 수 있기를 바랍니다. Java를 사용하여 Excel에 동적으로 데이터 삽입

if (file.exists()) { 
         try{ 
          fout = new FileOutputStream(fileName, true); 
          fin = new FileInputStream(fileName); 
          lPOIfs = new POIFSFileSystem(fin); 
          workbook = new HSSFWorkbook(lPOIfs); 
          worksheet = workbook.getSheet("POI Worksheet"); 
          for (int i=0; i<workbook.getNumberOfSheets(); i++) { 
           System.out.println(workbook.getSheetName(i));          
          } 
          HSSFSheet sheet = workbook.getSheetAt(0); 
          last = sheet.getLastRowNum(); 
         }catch (IOException e) { 
          e.printStackTrace(); 
         }catch (NullPointerException e){ 
          e.printStackTrace(); 
         } 
        } else { 
         //create new file 
         try{ 
         fout = new FileOutputStream(file);        
         }catch (IOException e) { 
          e.printStackTrace(); 
         } 
         workbook = new HSSFWorkbook();      
         worksheet = workbook.createSheet("POI Worksheet"); 
        } 

라인의 마지막 번호를 확인하는 코드입니다 :

if(last != 0){ 
      last = worksheet.getLastRowNum()+1; 
    }else{ 
      last = worksheet.getLastRowNum(); 
    } 

이 쓰기 기능의 전체 코드입니다 :

public void writeExcel(){ 
    String fileName = "C:\\Users\\blslyeoh\\Documents\\NetBeansProjects\\JavaApplication1\\poi-test.xls";  
    try { 
        int last=0; 
        File file = new File(fileName); 
        FileInputStream fin = null; 
        HSSFWorkbook workbook = null; 
        HSSFSheet worksheet = null; 
        FileOutputStream fout = null; 
        POIFSFileSystem lPOIfs = null; 
        if (file.exists()) { 
         try{ 
          fout = new FileOutputStream(fileName, true); 
          fin = new FileInputStream(fileName); 
          lPOIfs = new POIFSFileSystem(fin); 
          workbook = new HSSFWorkbook(lPOIfs); 
          worksheet = workbook.getSheet("POI Worksheet"); 
          for (int i=0; i<workbook.getNumberOfSheets(); i++) { 
           System.out.println(workbook.getSheetName(i));          
          } 
          HSSFSheet sheet = workbook.getSheetAt(0); 
          last = sheet.getLastRowNum(); 
         }catch (IOException e) { 
          e.printStackTrace(); 
         }catch (NullPointerException e){ 
          e.printStackTrace(); 
         } 
        } else { 
         //create new file 
         try{ 
         fout = new FileOutputStream(file);        
         }catch (IOException e) { 
          e.printStackTrace(); 
         } 
         workbook = new HSSFWorkbook();      
         worksheet = workbook.createSheet("POI Worksheet"); 
        } 
     // index from 0,0... cell A1 is cell(0,0) 
        if(last != 0){ 
         last = worksheet.getLastRowNum()+1; 
        }else{ 
         last = worksheet.getLastRowNum(); 
        } 
        HSSFRow row = worksheet.createRow(last);       
     HSSFCell cellA1 = row.createCell((short)0); 
     cellA1.setCellValue("hello"); 
     HSSFCellStyle cellStyle = workbook.createCellStyle(); 
     //cellStyle.setFillForegroundColor(HSSFColor.GOLD.index); 
     //cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); 
     //cellA1.setCellStyle(cellStyle); 
     HSSFCell cellB1 = row.createCell((short) 1); 
     cellB1.setCellValue("goodbye"); 
     //cellStyle = workbook.createCellStyle(); 
     //cellStyle.setFillForegroundColor(HSSFColor.LIGHT_CORNFLOWER_BLUE.index); 
     //cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); 
     //cellB1.setCellStyle(cellStyle); 
     HSSFCell cellC1 = row.createCell((short) 2); 
     cellC1.setCellValue(true); 

     HSSFCell cellD1 = row.createCell((short) 3); 
     cellD1.setCellValue(new Date()); 
     cellStyle = workbook.createCellStyle(); 
     cellStyle.setDataFormat(HSSFDataFormat 
       .getBuiltinFormat("m/d/yy h:mm")); 
     cellD1.setCellStyle(cellStyle); 
     workbook.write(fout); 
     fout.flush(); 

     fout.close(); 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
+0

스택 트레이스가 있습니까? 어떤 오류가 발생 했습니까? 그것들을 게시하는 것이 도움이 될 것입니다. – jcd

+0

이 URL에 대한 도움에 감사드립니다. http://www.codepool.biz/excel/how-to-read-and-write-excel-files-in-java.html 이것이 모두에게 도움이되기를 바랍니다. 그건 그렇고, fout = new FileOutputStream (fileName, true); fout = new FileOutputStream (fileName);으로 변경해야합니다. –

+0

btw, 감사합니다. @jcd에 –

답변

0
  1. 엑셀 파일 읽기 먼저!
  2. 워크 시트를 성공적으로 가져 오는 경우
    워크 시트 = workbook.getSheet ("POI 워크 시트");
    파일 입력 스트림을 닫습니다.
  3. 워크 시트를 가져올 수없는 경우
    통합 문서 = 새 HSSFWorkbook();
    워크 시트 = workbook.createSheet ("POI 워크 시트");
  4. 기존 또는 새 것으로 바뀌 었습니다.
    행을 추가하고 파일에 쓰고 파일 출력 스트림을 닫습니다.
    fout = new FileOutputStream (file);
    workbook.write (fout);
    fout.close();

이 정보가 도움이되기를 바랍니다. 좋은 하루 되세요 :-)

+0

네 번째 제안이 도움이됩니다 ~ 고마워 많이 : D –

+0

당신은 오신 것을 환영합니다. 내 대답을 수락하십시오 :-) –

관련 문제