RealGrid2 가이드
Tip
Excel Import

Excel Import

Excel Import는 SheetJS 기능을 이용하여 처리할 수 있습니다. 엑셀 다운로드 후 해당 엑셀파일을 편집하여 Import 해보세요.

SheetJS에 대한 내용은 아래 링크를 참조하세요. https://github.com/SheetJS/js-xlsx (opens in a new tab)

예제 1

Provider의 필드명과 엑셀의 컬럼명을 일치하여 사용하는 방법

Tip

  1. 엑셀 export시 리얼그리드의 footer는 제외하고 export하세요.(엑셀 import시 footer부분까지 가져오기 때문에 footer영역을 제외하는 코드가 필요해짐)
  2. 엑셀 import시 엑셀의 헤더명이 json 객체의 속성명이 되기 때문에 리얼그리드의 필드명을 한글로 맞춰주시는게 좋습니다.
<input type="file" name="excelFile" id="xlf">
$("#xlf").bind("change", handleXlsFile);
 
function excelExport() {
  gridView.exportGrid({
    type: "excel",
    target: "local",
    fileName: "gridExportSample.xlsx",
    footer: "hidden", 
    done: function () {  //내보내기 완료 후 실행되는 함수
        alert("done excel export")
    }
  });
}
 
function fixdata(data) {
  var o = "", l = 0, w = 10240;
  for (; l < data.byteLength / w; ++l) o += String.fromCharCode.apply(null, new Uint8Array(data.slice(l * w, l * w + w)));
  o += String.fromCharCode.apply(null, new Uint8Array(data.slice(l * w)));
  return o;
}
 
function handleXlsFile(e) {
  var files = e.target.files;
  var i, f;
  for (i = 0, f = files[i]; i != files.length; ++i) {
      var reader = new FileReader();
      var name = f.name;
      reader.onload = function (e) {
          var data = e.target.result;
 
          //var workbook = XLSX.read(data, { type: 'binary' });
          var arr = fixdata(data);
          workbook = XLSX.read(btoa(arr), { type: "base64", cellText: true, cellDates: true });
 
          process_wb(workbook);
          /* DO SOMETHING WITH workbook HERE */
      };
      //reader.readAsBinaryString(f);
      reader.readAsArrayBuffer(f);
 
  }
}
 
function process_wb(wb) {
  var output = "";
 
  output = to_json(wb);
 
  var sheetNames = Object.keys(output);
 
  if (sheetNames.length > 0) {
      var colsObj = output[sheetNames][0];
 
      if (colsObj) {
          dataProvider.fillJsonData(output, { rows: sheetNames[0] })
      }
  }
}
 
function to_json(workbook) {
  var result = {};
  workbook.SheetNames.forEach(function (sheetName) {
      var roa = XLSX.utils.sheet_to_row_object_array(workbook.Sheets[sheetName], {rawNumbers: true});
 
      if (roa.length > 0) {
          result[sheetName] = roa;
      }
  });
  return result;
}

예제 2

Provider의 필드명은 영문으로 유지하고 엑셀의 컬럼명은 한글일때 사용하는 방법

Tip

  1. SheetJS를 사용하여 엑셀파일을 JSON데이터로 변환한 후 JSON데이터의 키를 Provider의 필드에 맞게 변경하는 방법. 예제에서는 ES6에서 제공되는 map 함수를 사용하였습니다.
<input type="file" name="excelFile" id="xlf">
$("#xlf").bind("change", handleXlsFile);
 
function excelExport() {
  gridView.exportGrid({
    type: "excel",
    target: "local",
    fileName: "gridExportSample.xlsx",
    footer: "hidden", 
    done: function () {  //내보내기 완료 후 실행되는 함수
        alert("done excel export")
    }
  });
}
 
function fixdata(data) {
  var o = "", l = 0, w = 10240;
  for (; l < data.byteLength / w; ++l) o += String.fromCharCode.apply(null, new Uint8Array(data.slice(l * w, l * w + w)));
  o += String.fromCharCode.apply(null, new Uint8Array(data.slice(l * w)));
  return o;
}
 
function handleXlsFile(e) {
  var files = e.target.files;
  var i, f;
  for (i = 0, f = files[i]; i != files.length; ++i) {
      var reader = new FileReader();
      var name = f.name;
      reader.onload = function (e) {
          var data = e.target.result;
 
          //var workbook = XLSX.read(data, { type: 'binary' });
          var arr = fixdata(data);
          workbook = XLSX.read(btoa(arr), { type: "base64", cellText: true, cellDates: true });
 
          process_wb(workbook);
          /* DO SOMETHING WITH workbook HERE */
      };
      //reader.readAsBinaryString(f);
      reader.readAsArrayBuffer(f);
 
  }
}
 
function process_wb(wb) {
  var output = "";
  output = to_json(wb);
  var sheetNames = Object.keys(output);
 
  if (sheetNames.length > 0) {
      var colsObj = output[sheetNames][0];
 
      if (colsObj) {
          var data = output[sheetNames];
 
          var mappedData = data.map(item => {
            return {
              KorName: item.이름,
              Gender: item.성별,
              Age: item.나이,
              Phone: item.전화번호,
              ProductId: item.제품번호,
              KorCountry: item.투자국가,
              OrderDate: item.주문일자,
              CardNumber: item.카드번호,
              Monetary: item.통화,
              StartDate: item.최초납입일,
              EndDate: item.종료일,
              ToMonth: item['납입 횟수'],
              Month: item['남은 횟수'],
              InterestRate: item.이율,
              SaveCost: item.납입금,
              SaveMaturity: item.만기금액
            };
          });
 
          //map 함수를 사용하지 않고 javascript for문으로 설정
          /*
          var mappedData = [];
 
          for(var i = 0; i < data.length; i++){
            mappedData.push({
              KorName: data[i].이름,
              Gender: data[i].성별,
              Age: data[i].나이,
              Phone: data[i].전화번호,
              ProductId: data[i].제품번호,
              KorCountry: data[i].투자국가,
              OrderDate: data[i].주문일자,
              CardNumber: data[i].카드번호,
              Monetary: data[i].통화,
              StartDate: data[i].최초납입일,
              EndDate: data[i].종료일,
              ToMonth: data[i]['납입 횟수'],
              Month: data[i]['남은 횟수'],
              InterestRate: data[i].이율,
              SaveCost: data[i].납입금,
              SaveMaturity: data[i].만기금액
            })
          }
          */
 
 
          dataProvider.fillJsonData(mappedData, {  })
      }
  }
}
 
function to_json(workbook) {
  var result = {};
  workbook.SheetNames.forEach(function (sheetName) {
      var roa = XLSX.utils.sheet_to_row_object_array(workbook.Sheets[sheetName], {rawNumbers: true});
 
      if (roa.length > 0) {
          result[sheetName] = roa;
      }
  });
  return result;
}