목차

엑셀 가이드

엑셀 컴포넌트는 엑셀 파일/데이터 처리 기능을 제공한다.

엑셀 컴포넌트는 setselectsheet API로 지정한 시트를 대상으로 데이터를 처리한다.

[주요 기능]

새로운 엑셀 데이터 생성 및 파일 저장

엑셀 파일 로드 및 특정 셀 값 읽기/쓰기 및 파일 저장(로드한 엑셀 파일 서식 및 데이터 유지)

DRM 처리를 위한 서버 연동 엑셀 파일 업로드/다운로드 처리

[용어 정의]

워크북 - 엑셀 데이터를 저장하기 위한 가장 최상위 단위

시트 - 엑셀 워크북 내부에 엑셀 데이터를 저장하기 위한 그룹

셀 - 엑셀 워크북의 특정 엑셀 시트의 특정 데이터를 저장하기 위한 단위 (엑셀 형식의 셀 주소 접근)

예시

템플릿 위치: /HTML5/COMPONENT/EXCEL/excel_basic

템플릿 파일

화면 스크립트

function screen_on_load()
{
}

// 엑셀 파일 내 모든 시트의 모든 데이터 내용을 콘손에 출력
function PrintExcelData(obj_excel) {
	var sheet_index, sheet_count, row_index, row_count, column_index, column_count;

	// 엑셀 시트 갯수를 구함
	sheet_count = obj_excel.getsheetcount();
	factory.consoleprint("sheet_count = " + sheet_count);

	// 시트 Loop
	for (sheet_index = 0; sheet_index < sheet_count; sheet_index++) {
		// 작업 대상 시트 설정
		obj_excel.setselectsheet(sheet_index);

		// 행/열 갯수를 구함
		row_count = obj_excel.getrowcount();
		column_count = obj_excel.getcolumncount();

		factory.consoleprint("row_count = " + row_count);
		factory.consoleprint("column_count = " + column_count);

		// 시트내 모든 아이템에 대한 값을 로깅
		for (row_index = 0; row_index < row_count; row_index++) {
			for (column_index = 0; column_index < column_count; column_index++) {
				factory.consoleprint(sheet_index + ":" + row_index + ":" + column_index + " = " +
					obj_excel.getcellvalue(obj_excel.getcelladdr(row_index, column_index)));
			}
		}
	}
}

/**
 * selectfile API를 통한 로컬 파일 선택 이벤트
 *
 * @param objInst 엑셀 컴포넌트 인스턴스
 * @param objFile 선택한 파일에 대한 HTML File 오브젝트
 */
function excel_on_selectfile(objInst, objFile) {
	// HTML File 오브젝트를 통해서 엑셀 데이터 로드
	obj_excel.loadfileobject(objFile);

	// 서버를 통해서 EXCEL 파일 업로드
	// obj_excel.uploafileobject(objFile);
}

/**
 * 엑셀 파일 데이터 로드 시작 이벤트
 *
 * @param objInst 엑셀 컴포넌트 인스턴스
 * @param strFileName 파일 이름
 */
function excel_on_loadstart(objInst, strFileName) {
}

/**
 * 엑셀 데이터 파일 저장 시작 이벤트
 *
 * @param objInst 엑셀 컴포넌트 인스턴스
 * @param strFileName 파일 이름
 */
function excel_on_savestart(objInst, strFileName) {
}

/**
 * 엑셀 데이터를 로컬에 파일로 저장 완료 이벤트
 *
 * @param objInst 엑셀 컴포넌트 인스턴스
 * @param nResult 처리 결과 (1:성공, 그외 오류)
 * @param strErrCode 에러 코드
 * @param strErrMsg 에러 메시지
 * @param strFileName 파일 이름
 * @param nStartTime 처리 시작 시각
 * @param nEndTime 처리 완료 시각
 */
function excel_on_save(objInst, nResult, strCode, strMsg, strFileName, nStartTime, nEndTime) {
}

/**
 * 엑셀 파일 데이터 로드 완료 이벤트
 *
 * @param objInst 엑셀 컴포넌트 인스턴스
 * @param nResult 로드 처리 결과 (1 - 성공, 그외 오류)
 * @param strCode 오류 코드
 * @param strMsg 오류 메시지
 * @param nStartTime 처리 시작 시각
 * @param nEndTime 처리 종료 시각
 */
function excel_on_load(objInst, nResult, strCode, strMsg, strFileName, nStartTime, nEndTime) {
	// 엑셀 데이터 전체 내용을 구하여 로깅
	PrintExcelData(obj_excel);
}

// "selectfile" 버튼 이벤트
function btn_selectfile_on_click(objInst)
{
	// 로드 대상 파일 선택
	// 처리 완료시 "on_selectfile" 이벤트 발생하며,
	// 선택한 파일에 대한 HTML File 오브젝트가 전달되며,
	// 전달된 파일 오브젝트를 loadfileobject API를 통해서 로드
	obj_excel.selectfile();
}

// "savefile" 버튼 이벤트
function btn_savefile_on_click(objInst)
{
	// 엑셀 데이터를 바로 파일로 저장
	obj_excel.savefile("save.xlsx");
}

// "createworkbook" 버튼 이벤트
function btn_createworkbook_on_click(objInst)
{
	// 새로운 워크북 생성 (기존 데이터는 삭제됨)
    obj_excel.createworkbook();
}

// "addsheet" 버튼 이벤트
function btn_addsheet_on_click(objInst)
{
	// 새로운 시트 추가
    obj_excel.addsheet("Sheet Name");

	// 시트 개수를 구함
	screen.alert("Sheet Count = " + obj_excel.getsheetcount());
}

// "setselectsheet" 버튼 이벤트
function btn_setselectsheet_on_click(objInst)
{
	// 작업 대상 시트 인덱스 설정
	obj_excel.setselectsheet(0);
}

// "setcellvalue" 버튼 이벤트
function btn_setcellvalue_on_click(objInst)
{
	// 현재 작업 대상 시트에 값 설정 (0행 0열)
	obj_excel.setcellvalue(0, 0, "A1 VALUE");
	obj_excel.setcellvaluebyaddr(obj_excel.getcelladdr(0, 0), "A1 VALUE");

	// 현재 작업 대상 시트에 값 설정 (0행 1열)
	obj_excel.setcellvaluebyaddr("B1", "B1 VALUE");
}

// "getcellvalue" 버튼 이벤트
function btn_getcellvalue_on_click(objInst)
{
	// 현재 작업 대상 시트에 값 읽기 (0행 0열)
	screen.alert(obj_excel.getcellvalue(0, 0));

	// Zero-Based 행/열 인덱스를 통해 셀 값 일기 (0행 0열 -> "A1")
	screen.alert(obj_excel.getcellvaluebyaddr(obj_excel.getcelladdr(0, 0)));
}

// "uploadfile" 버튼 이벤트
function btn_uploadfile_on_click(objInst)
{
	// HTML File 오브젝트와 데이터를 서버로 송신하고, 수신된 엑셀 파일 데이터를 로드
	// 처리 완료시 "on_load" 이벤트 발생
	obj_excel.uploadfile(null, "http://127.0.0.1/multisheet.xlsx");
}

// "savefileobject" 버튼 이벤트
function btn_savefileobject_on_click(objInst)
{
	// 엑셀 데이터를 HTML File 오브젝트 행텨로 저장
	// 처리 완료시 "on_savefile" 이벤트를 통해서 저장된 HTML File 오브젝트가 전달되며,
	// 전달된 파일 오브젝트를 downloadfile API를 통해서 저장 가능
	obj_excel.savefileobject("save.xlsx");
}

/**
 * 엑셀 데이터를 HTML 파일 오브젝트 형태로 저장 완료 이벤트
 *
 * @param objInst 엑셀 컴포넌트 인스턴스
 * @param nResult 처리 결과 (1:성공, 그외 오류)
 * @param strCode 에러 코드
 * @param strMsg 에러 메시지
 * @param strFileName 파일 이름
 * @param objFile HTML 파일 오브젝트
 * @param nStartTime 처리 시작 시각
 * @param nEndTime 처리 완료 시각
 */
function excel_on_savefile(objInst, nResult, strCode, strMsg, strFileName, objFile, nStartTime, nEndTime) {
	// HTML File 오브젝트 및 데이터를 서버로 송신하고, 수신된 데이터를 파일로 저장
	// 처리 완료시 "on_save" 이벤트 발생
	obj_excel.downloadfile(objFile, "http://127.0.0.1/multisheet.xlsx");
}