자바 프로그램으로 엑셀이나 워드 문서를 만들기 위해서 보통 POI 라이브러리를 사용한다. 그런데 특정 메소드를 쓰는데 버그가 있길래 이렇게 남겨 둔다.
환경
poi 3.7 버전
버그 증상
Sheet.shiftRows() 메소드 사용시 Row에 Hyperlink가 포함되어 있어도 해당 정보가 복사되지 않는 문제
임시 해결책
shiftRows 메소드를 사용하기 전에 Hyperlink를 긁어와서 저장한 후 Shift된 위치로 넣어주기
여담
현재 홈페이지에 가보니 3.9버전까지 나오긴 했는데, 라이브러리 버전을 올려주면 다른 곳도 수정할 필요가 생길 수도 있기때문에 그냥 복사 코드만 추가 했다.
다른 쪽 코드를 보면 라이브러리를 수정하라는데.. 사실 그게 깔끔하긴 한데, 내가 그것까지 손 볼 필요는 없네.
코드
// Copy hyperlink, because it do not support link copy. Map<Integer, Hyperlink> linkmap = new HashMap<Integer, Hyperlink>(); for (int rr=START_ROW; rr<=sheet.getLastRowNum(); rr++) { Row row = sheet.getRow(rr); Cell cell = row.getCell(HYPERLINK_COLUMN_INDEX); Hyperlink link = cell.getHyperlink(); if (null != link) { linkmap.put(rr, link); } } // shift row code sheet.shiftRows(START_ROW, sheet.getLastRowNum(), defectSize); // Set hyperlink, because it do not support link copy. for (Integer key : linkmap.keySet()) { int rowindex = key + defectSize; Row row = sheet.getRow(rowindex); Cell cell = row.getCell(HYPERLINK_COLUMN_INDEX); Hyperlink link = linkmap.get(key); if (null != link) { cell.setHyperlink(link); } }
'개발자' 카테고리의 다른 글
SK Planet CodeSprint 2013 대회 (0) | 2013.06.30 |
---|---|
SQL Query의 기본 (0) | 2013.06.21 |
모델-뷰-컨트롤러(Model-View-Controller MVC) (2) | 2013.05.22 |