Notice
Recent Posts
Recent Comments
Link
- Today
- Total
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 백준 java jaekjoon JAVA
- Rocky Linux 9
- baekjoon
- 제수가 0입니다
- jaekjoon java
- bekjoon
- ora-01476
- SVN
- boj
- putty
- 백준 JAVA
- jenkins
- 사용법
- 서버 접근
- DBeaver
- javascript
- 백준
- available plugins
- java
- linux
- 1773번
- 환경번수
- PostgreSQL
- 메뉴얼
- rocky linux
- poll scm
- jsonb select
- subversion
- tomcat-users.xml
- 자바
Archives
기록하는 개발자
Spring Excel 병합된 셀 내용 불러오기 본문
- JAVA
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddress;
@RequestMapping(value = "/readExcelFile.do")
public ModelAndView readExcelFile() throws Exception {
ModelAndView mav = new ModelAndView("jsonView");
try {
//xlsx,xls 사용 가능
Workbook workbook = WorkbookFactory.create(new File("D:/excelTest/excelSample.xlsx"));
int rowindex = 0;
int columnindex = 0;
// 첫번쨰 시트만 조회
Sheet sheet = workbook.getSheetAt(0);
//마지막 행
int rows = (sheet.getLastRowNum()+1);
//마지막 셀
int maxCells = 0;
for (rowindex = 0; rowindex < rows; rowindex++) { // 세로
Row row = sheet.getRow(rowindex);
if(row!=null) {
int cells = (row.getLastCellNum());
if (cells > maxCells)
maxCells = cells;
}
}
mav.addObject("maxRow",rows);
mav.addObject("maxCol",maxCells);
//병합된 셀 기록
String[][] merge = new String[rows][maxCells];
for (int i = 0; i < sheet.getNumMergedRegions(); ++i) {
CellRangeAddress range = sheet.getMergedRegion(i);
int mergeRow = range.getFirstRow(); //병합 셀의 시작Row
int mergeCol = range.getFirstColumn(); //병합 셀의 시작Col
int rowLength = range.getLastRow() - range.getFirstRow() + 1; //병합 셀의 Row 길이 계산
int colLength = range.getLastColumn() - range.getFirstColumn() + 1; //병합 셀의 Col 길이 계산
//merge[][] 에 병합된 셀의 정보 기록
for (int r = 0; r < rowLength; r++) {
for (int c = 0; c < colLength; c++) {
if (r == 0 && c == 0) {//병합된 셀의 시작부분은 [Row, Col] 형태로 길이 제정
merge[mergeRow][mergeCol] = rowLength + "," + colLength;
} else { //이외의 부분은 mergeCell로 표시
merge[mergeRow + r][mergeCol + c] = "mergeCell";
}
}
}
}
//셀의 내용 저장
String[][] text = new String[rows][maxCells];
for (rowindex = 0; rowindex < rows; rowindex++) { // Row
Row row = sheet.getRow(rowindex);
if (row != null) {
int cells = row.getLastCellNum();
for (columnindex = 0; columnindex <= cells; columnindex++) { // Col
Cell cell = row.getCell(columnindex);
String value = "";
// 셀이 빈값일경우를 위한 널체크
if (cell == null) {
continue;
} else {
// 타입별로 내용 조회
switch (cell.getCellType()) {
case Cell.CELL_TYPE_FORMULA:
value = cell.getCellFormula();
break;
case Cell.CELL_TYPE_NUMERIC:
value = cell.getNumericCellValue() + "";
break;
case Cell.CELL_TYPE_STRING:
value = cell.getStringCellValue() + "";
break;
case Cell.CELL_TYPE_BLANK:
value = cell.getBooleanCellValue() + "";
break;
case Cell.CELL_TYPE_ERROR:
value = cell.getErrorCellValue() + "";
break;
}
}
//내용 저장
text[rowindex][columnindex] = value;
}
}
}
mav.addObject("merge", merge); //병합정보
mav.addObject("text", text); //내용정보
} catch (Exception e) {
e.printStackTrace();
}
return mav;
}
<script>
function fn_excelSearch() {
$.ajax({
type : "POST",
url : "<c:url value='readExcelFile.do'/>",
dataType : "json",
success : function(data) {
var maxRow = data.maxRow;
var maxCol = data.maxCol;
var merge = data.merge;
var text = data.text;
//테이블 생성
var html = '<table class="jexcel" cellpadding="0" cellspacing="0" unselectable="yes">';
for (let i = 0; i < maxRow; i++){
html += '<tr data-y="" class="">';
html += '<td data-y="0" class="jexcel_row" style="">'+(i+1)+'</td>'
for (let j = 0; j < maxCol; j++){
var mergeCheck = merge[i][j]
var cell = text[i][j];
if(text[i][j]===null||text[i][j]==="false"){
cell ="";
}
console.log(mergeCheck);
if(mergeCheck=="mergeCell"){
}else if(!(mergeCheck===null)){
var split = mergeCheck.split(',');
var mergeRow = split[0];
var mergeCol = split[1];
html += '<td style="text-align: center;" rowspan="'+mergeRow+'" colspan="'+mergeCol+'">'+cell+'</td>';
}else{
html += '<td style="text-align: center;">'+cell+'</td>';
}
};
html += '</tr>';
};
html += '</table>';
$("#excelData").prepend(html);
},
error : function(jqXHR) {
console.log(jqXHR);
}
});
}
</script>
<div id="excelData">
</div>
- 실행 결과
poi-3.9v, poi-ooxml-3.9v 사용
버전에 따라 JAVA - WorkBook을 사용하지 못할 수 있습니다.(.xls, .xlsx 확장자 동시 사용)
개인적으로 정리한 내용을 간단하게 풀어 작성했습니다. 이해가 안가는 부분은 댓글 남겨주시면 설명해드리겠습니다. |
'웹 개발 > Spring' 카테고리의 다른 글
Comments