2016-10-14 2 views
0

apache poi를 사용하여 Excel 파일을 생성 중이며 마지막 두 열을 해당 Excel 파일에서만 읽으려고합니다. 그래서 내가 POI의 잠금 기능을 시도했지만 지금까지apche POI를 사용하여 Excel에서 perticular 열을 읽기 전용으로 만드는 방법

HSSFWorkbook wb = new HSSFWorkbook(); 
     HSSFSheet sheet = wb.createSheet(); 
     sheet.protectSheet("password"); 
     HSSFRow row = null; 

     HSSFCell cell = null; 

     /* cell style for locking */ 
     CellStyle lockedCellStyle = wb.createCellStyle(); 
     lockedCellStyle.setLocked(true); 
     /* cell style for editable cells */ 
     CellStyle unlockedCellStyle = wb.createCellStyle(); 
     unlockedCellStyle.setLocked(false); 


cell = row.createCell(columnNo); 
       if (null != taskDiaryItem.getDueDate()) { 
        SimpleDateFormat formater = new java.text.SimpleDateFormat(InboxItemValue.INBOX_DATE_FORMAT.value()); 
        cell.setCellValue(new HSSFRichTextString(formater.format(taskDiaryItem.getDueDate()))); 
       } else { 
        cell.setCellValue(new HSSFRichTextString(" ")); 
       } 
       columnNo = columnNo + 1; 
       /*** End Change : CR#20 CQ#fklnp00272463 ***/ 

       cell = row.createCell(columnNo); 
       if (null != taskDiaryItem.getTaskPriorityDescription()) { 
        cell.setCellValue(new HSSFRichTextString(taskDiaryItem.getTaskPriorityDescription())); 
       } else { 
        cell.setCellValue(new HSSFRichTextString(" ")); 
       } 
       columnNo = columnNo + 1; 

       cell = row.createCell(columnNo); 
       if (null == taskDiaryItem.getContractNumber() || (taskDiaryItem.getContractNumber().isEmpty())) { 
        cell.setCellValue(new HSSFRichTextString(taskDiaryItem.getContractNumber())); 
       } else { 
        cell.setCellValue(new HSSFRichTextString(" ")); 
       } 
       columnNo = columnNo + 1; 

       cell = row.createCell(columnNo); 
       if (null != taskDiaryItem.getTaskStatusDescription()) { 
        cell.setCellValue(new HSSFRichTextString(taskDiaryItem.getTaskStatusDescription())); 
       } else { 
        cell.setCellValue(new HSSFRichTextString(" ")); 
       } 
       columnNo = columnNo + 1; 

       if (!fromContext.equals(InboxItemValue.USER_INBOX.value()) 
         && !fromContext.equals(InboxItemValue.TEAM_MEMBER.value())) { 

        cell = row.createCell(columnNo); 
        if (null != taskDiaryItem.getAssignedToName()) { 
         cell.setCellValue(new HSSFRichTextString(taskDiaryItem.getAssignedToName())); 
         cell.setCellStyle(unlockedCellStyle); 
        } else { 
         cell.setCellValue(new HSSFRichTextString(" ")); 
        } 
        columnNo = columnNo + 1; 
       } 

       cell = row.createCell(columnNo); 
       if (null != taskDiaryItem.getAssignedBy()) { 
        cell.setCellValue(new HSSFRichTextString(taskDiaryItem.getAssignedBy())); 
        cell.setCellStyle(lockedCellStyle); 
       } else { 
        cell.setCellValue(new HSSFRichTextString(" ")); 
       } 
      } else if(InboxItemValue.PST_INBOX.value().equals(fromContext)) { 
       cell = tasksForPSTAndPlacement(taskDiaryItem, cell, row, columnNo, fromContext); 
      } else if(InboxItemValue.PLACEMENT_INBOX.value().equals(fromContext)) { 
       cell = tasksForPSTAndPlacement(taskDiaryItem, cell, row, columnNo, fromContext); 
      } 
      j++; 
     } 
     response.setHeader("Content-Disposition", "attachment; filename=Inbox.xls"); 
     response.setHeader("Content-type", "application/vnd.ms-excel"); 
     ServletOutputStream fileOut = response.getOutputStream(); 
     wb.write(fileOut); 
     fileOut.close(); 

답변

1

당신은 반대를 시도해야 할 수도 있습니다 내가 지금 무슨 짓을 게시하고 난 지난 2 읽기 전용 문서라도하려는 읽기 전용 모든 세포를 만드는 그것을 작동하게 만들기 위해서.

전체 시트를 보호하고 편집 가능한 셀에 대해 setLocked(false)을 호출하십시오.

이 예제 코드를 실행하면이 셀을 실행할 수 있습니다. havinf TEST 값은 TEST2 값의 셀이 읽기 전용 일 때 편집 할 수 있습니다.이 코드를 사용하여 논리를 작성할 수 있습니다.

String file = "C:\\poitest.xlsx"; 
     FileOutputStream outputStream = new FileOutputStream(file); 
     Workbook wb = new XSSFWorkbook(); 

     CellStyle unlockedCellStyle = wb.createCellStyle(); 
     unlockedCellStyle.setLocked(false); 

     Sheet sheet = wb.createSheet(); 
     sheet.protectSheet("password"); 
     Row row = sheet.createRow(0); 
     Cell cell = row.createCell(0); 
     cell.setCellValue("TEST"); 
     cell.setCellStyle(unlockedCellStyle); 

     Cell cell2 = row.createCell(1); 
     cell2.setCellValue("TEST2"); 


     wb.write(outputStream); 
     outputStream.close(); 
+0

I alreday 내 코드를 볼 시도하는 경우 (널 (null) = taskDiaryItem.getAssignedToName (!)) { cell.setCellValue (새 HSSFRichTextString (taskDiaryItem.getAssignedToName())); cell.setCellStyle (unlockedCellStyle); } – storyteller

+0

내 코드를 편집 할 수 있습니까? 나는 이미 당신이 말한 해결책을 시도했습니다. – storyteller

+0

시트 시트 = wb.createSheet()를 사용하여 보호 된 시트를 만들었습니까? sheet.protectSheet ("password"); – mhasan

관련 문제