====== 엑셀 가이드======
엑셀 컴포넌트는 엑셀 파일/데이터 처리 기능을 제공한다.
엑셀 컴포넌트는 setselectsheet API로 지정한 시트를 대상으로 데이터를 처리한다.
[주요 기능]
새로운 엑셀 데이터 생성 및 파일 저장
엑셀 파일 로드 및 특정 셀 값 읽기/쓰기 및 파일 저장(로드한 엑셀 파일 서식 및 데이터 유지)
DRM 처리를 위한 서버 연동 엑셀 파일 업로드/다운로드 처리
[용어 정의]
워크북 - 엑셀 데이터를 저장하기 위한 가장 최상위 단위
시트 - 엑셀 워크북 내부에 엑셀 데이터를 저장하기 위한 그룹
셀 - 엑셀 워크북의 특정 엑셀 시트의 특정 데이터를 저장하기 위한 단위 (엑셀 형식의 셀 주소 접근)
===== 예시 =====
템플릿 위치: /HTML5/COMPONENT/EXCEL/excel_basic
템플릿 파일
* [[xf5projecthome>template/screen/HTML5/COMPONENT/EXCEL/excel_basic.xml|excel_basic.xml]]
* [[xf5projecthome>template/screen/HTML5/COMPONENT/EXCEL/excel_basic.js|excel_basic.js]]
* [[xf5projecthome>template/template.html?xframe_screen_url=/HTML5/COMPONENT/EXCEL/excel_basic|새창으로 실행]]
echo '';
echo '';
echo '';
==== 화면 스크립트 ====
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");
}