본문 바로가기
킷도우의 IT/넥사크로(Nexacro)

[실무 경험담] 넥사크로 N 엑셀 업로드 (pom.xml 라이브러리 버전 이슈를 해결해야 마무리)

by 킷도우 2022. 12. 29.
반응형

안녕하세요. IT Window 킷도우입니다.

한 해가 정말 얼마 남지 않았습니다. 잘 마무리 하고 계신가요? ㅎㅎ

 

오늘 여러분들에게 소개할 글은 바로 넥사크로 N에서 엑셀 업로드하는 방법입니다. 지난 번 넥사크로 N에서 엑셀 다운로드 기능 구현 방법에서도 의외로 이상한 부분에서 시간 소요가 됐는데요. 관련 내용이 궁금하시다면 아래 링크를 참조해주세요!

https://kitdow.tistory.com/18

 

[실무 경험담] 넥사크로 N 엑셀 다운로드 (nexacro-xeni Java 외부 라이브러리 추가를 해야할까? 아니

안녕하세요. IT Window 킷도우입니다. 연말이라 진급, 연봉인상, 성과급 등 회사에서 각가지 이슈들이 정말 많은데요. 여러분들 모두 좋은 결과 있으시길 기원하면서 오늘도 여러분들에게 도움될

kitdow.tistory.com

 

엑셀 업로드 기능 또한 실무에서는 정말 빈번하게 쓰이는 기능이기도 하고, 또 엑셀 다운로드 기능을 이미 구현했으니 쉽게 되겠지? 했는데 왠걸... 예상치 못한 부분에서 에러가 많이 발생했는데요. 뭐든지 처음 세팅하는 건 쉽지 않은 것 같습니다. 그럼 바로 넥사크로 N 엑셀 업로드 구현하는 방법과 에러들을 어떻게 해결했는지 본론으로 들어가 설명 드리겠습니다.

 

※ 아래 이미지에서 엑셀 업로드 버튼을 클릭했을 때 사용자가 지정한 엑셀 파일을 읽어들이고 그 읽어들인 데이터를 넥사크로 데이터셋에 담고, 이 데이터셋을 trace문으로 로그를 찍어 엑셀 내용을 잘 읽어들였는지 확인해 보겠습니다.

넥사크로 엑셀 업로드 기능 구현 예시 화면
엑셀 파일 내용

1. 넥사크로 엑셀 업로드 기능 구현을 위한 버튼 만들기

엑셀 업로드 기능을 사용자들에게 제공해 주기 위해서는 아래 이미지와 같이 "엑셀 업로드" 버튼을 하나 만들어 줘야 합니다.

넥사크로 엑셀 업로드 기능 구현 - 1

넥사크로에서 버튼 만드는 방법이 궁금하신 분은 아래 링크를 참조해 주시면 되겠습니다.

https://kitdow.tistory.com/17

 

[넥사크로 컴포넌트 실습] 넥사크로에서 버튼 만들기(Nexacro Button 생성, Visible, Enable 설정, ID 명명

안녕하세요. IT Window 킷도우입니다. 한 해가 정말 얼마 남지 않았는데요. 마무리들은 잘 하고 계신가요? 열심히 사는 것도 중요하지만 난 그냥 이 지구에 놀러온 여행자다. 회사 생활, 부업, 인간

kitdow.tistory.com

 

2. [엑셀 업로드] 버튼 클릭 시 동작할 이벤트 함수 생성

아래와 같이 코딩해 줍니다.

this.btn_exelUp_onclick = function(obj:nexacro.Button,e:nexacro.ClickEventInfo)
{
	//엑셀 업로드 기능 구현
};

 

3. [엑셀 업로드] 버튼 클릭 시 동작할 이벤트 함수 생성 

엑셀 업로드를 위해선 반드시 엑셀 파일 안의 데이터를 담아줄 넥사크로 데이터셋이 필요합니다. 저는 ds_importExcel이라는 데이터셋을 만들었습니다. 데이터셋에 데이터를 담아주기 전 항상 초기화하는 해주는 것도 잊지 맙시다.

this.btn_exelUp_onclick = function(obj:nexacro.Button,e:nexacro.ClickEventInfo)
{
	this.ds_importExcel.clearData();              //데이터셋 초기화
	this.gfnExcelImportAll("ds_importExcel"       // 엑셀 데이터를 읽어들여줄 데이터셋 명
	          		,"Sheet1"             // 엑셀 파일에서 지정한 sheet명(명칭 틀리면 에러남!)
			 	,"A1:B1"              // Head 영역지정
				,"A2"                 // body 영역지정(default A2)
				,"fnImportCallback"   // callback 함수
				,"myImport"           // import id(callback호출시 필수)
				,this);               // form object(callback호출시 필수)
};

 

4. callback 함수 생성

엑셀 업로드를 수행한 뒤 후 처리하는 소스 작성 부분입니다. 저는 이 영역에 ds_importExcel 데이터셋에 담긴 엑셀 내용을 trace문으로 출력해 보겠습니다.

this.fnImportCallback = function(form, importId)
{
	trace(form.ds_importExcel.rowcount); 
	
	switch(importId)
	{
		case "myImport" :
			for(var i = 0 ; i < this.ds_importExcel.rowcount ; i++){
				trace( this.ds_importExcel.getColumn(i,"TEST1")
				     + " "
				     + this.ds_importExcel.getColumn(i,"TEST2")
				     + "\n");
			}
			break;
	}
};

 

5. 결과 확인

프로젝트를 Launch하고 엑셀 업로드 버튼을 클릭하면 아래와 같이 파일을 선택하도록 팝업이 뜹니다.

넥사크로 엑셀 업로드 결과 확인 - 1

반응형

확인 버튼을 누르면 넥사크로 콘솔에 로그가 찍힙니다.

넥사크로 엑셀 업로드 결과 확인 - 2

 

※위 모든 설정을 동일하게 했는데 안되는 이유

바로 라이브러리 버전이 호환이 안되거나 라이브러리 추가가 안 됐기 때문입니다. 라이브러리가 없는 경우 아래와 같이 에러가 납니다.

넥사크로 엑셀 업로드 오류 케이스

에러 내용 :

NoSuchMethodError: 'org.apache.xmlbeans.XmlOptions org.apache.xmlbeans.XmlOptions.setEntityExpansionLimit(int)'

 

에러들 내용을 보면 전부 메서드가 없다, 또는 라이브러리가 없다 등에 대한 내용입니다.

따라서, 여러분들이 개발 환경에 세팅된 라이브러리를 확인하여 버전을 맞추거나 아래 dependency를 추가합니다. 저는 버전이 안맞아서 이 버전, 저 버전으로 계속 맞추느라 시간이 너무 오래걸렸네요...

<dependency>
	<groupId>org.apache.poi</groupId>
	<artifactId>poi</artifactId>
	<version>3.17</version>
</dependency>
<dependency>
	<groupId>org.apache.poi</groupId>
	<artifactId>poi-ooxml</artifactId>
	<version>3.17</version>
</dependency>
<dependency>
	<groupId>org.apache.poi</groupId>
	<artifactId>ooxml-schemas</artifactId>
	<version>1.3</version>
</dependency>

 

네 이렇게 해서 넥사크로에서 엑셀 업로드하는 방법에 대해서 알아봤습니다.

 

한 해 마무리 잘 하시고 다음에도 좋은 글로 찾아 뵙겠습니다.

 

감사합니다.

 

★킷도우 웹 개발 기초 강의가 오픈됐습니다!

궁금하신 분들은 아래 링크를 참고해 주세요~

https://kitdow.tistory.com/31

 

킷도우의 첫 강의! - 웹 개발 기초 (프론트엔드, 백엔드, DB까지 총 10시간에 걸쳐 주문 게시판 만

안녕하세요. IT Window 킷도우입니다. 드디어 고대하고 고대하던 웹 개발 강의를 완성했습니다. VOD(동영상)는 인프런에서만!(전자책 포함) https://inf.run/BqmE 실무 환경 그대로 주문게시판 만들기 웹

kitdow.tistory.com

감사합니다! 

반응형

댓글