상세 컨텐츠

본문 제목

엑셀 파일을 구글시트로 변환 앱스크립트

오피스/구글시트

by Taoreunda 2022. 7. 21. 23:30

본문

엑셀을 구글시트로 변환

구글 드라이브에 있는 엑셀 파일을 구글시트로 변환

엑셀을 구글시트로 바꿔주는 기능은 구글시트에 기본적으로 있는 기능입니다.

하지만 엑셀의 모든 시트를 가져오고 값만 가져오는 것이 아닌 여러 서식들을 한꺼번에 가져옵니다.

앱스크립트를 이용하면 이러한 점을 해결할 수 있으며, 자신의 원하는 대로 자동화를 할 수 있습니다.

 

저도 나중에 여러 엑셀파일을 통합하고 합치거나 특정 값들만 가져오는 등의 작업들을 할 계획입니다.

function main() {

  let fileName = promptUser("불러올 엑셀 파일명을 기입하세요: "); 
  if(fileName === null) {
    toast("정확한 엑셀 파일명을 기입하세요.");
    return;
  }
  let sheetName = promptUser(`${fileName} 에 시트명을 기입하세요: `);
  if(sheetName === null) {
    toast("정확한 엑셀의 시트명을 기입하세요.");
    return;
  }
  toast(`${fileName} 파일에 ${sheetName} 시트를 불러오는 중입니다...`);

  // 구글시트 아이디를 convertExcelToGoogleSheets 함수로 가져옴
  let spreadsheetId = convertExcelToGoogleSheets(fileName + '.xlsx'); // +'.xlsx'를 지우면 확장자를 작성할 수 있음
  let importedSheetName = importDataFromSpreadsheet(spreadsheetId, sheetName);
  toast(`${fileName} 파일에 ${sheetName} 시트의 데이터가 ${importedSheetName}에 성공적으로 불러왔습니다!`);
  Drive.Files.trash(spreadsheetId); //복사한 스프레드시트 휴지통으로 이동
}

// 토스트 메시지
function toast(message) {
  SpreadsheetApp.getActive().toast(message);
}

// 프롬프트 메시지
function promptUser(message) {
  let ui = SpreadsheetApp.getUi();
  let response = ui.prompt(message);
  
  // null 아니며, OK버튼을 누른 경우 메시지를 리턴
  if(response != null && response.getSelectedButton() === ui.Button.OK) {
    return response.getResponseText();
  } else {
    return null;
  }
}

// 엑셀에서 구글시트로 변환 (fileName: 파일명은 promptUser로 받음)
function convertExcelToGoogleSheets(fileName) {
  let files = DriveApp.getFilesByName(fileName);
  let excelFile = null;
  if(files.hasNext()) //다음에 가져올 값이 있으면 True, 없으면 False
    excelFile = files.next(); // 파일 또는 폴더의 항목을 가져옴.
  else
    return null;

  // blob와 config
  let blob = excelFile.getBlob();
  let config = {
    title: "[Google Sheets] " + excelFile.getName(), // filename
    parents: [{id: excelFile.getParents().next().getId()}], //id
    mimeType: MimeType.GOOGLE_SHEETS // type
  };

  let spreadsheet = Drive.Files.insert(config, blob);
  return spreadsheet.id;
}

// 데이터를 불러올 시트
function importDataFromSpreadsheet(spreadsheetId, sheetName) {
  let spreadsheet = SpreadsheetApp.openById(spreadsheetId);
  let currentSpreadsheet = SpreadsheetApp.getActive();
  let newSheet = currentSpreadsheet.insertSheet();
  let dataToImport = spreadsheet.getSheetByName(sheetName).getDataRange();
  let range = newSheet.getRange(1,1,dataToImport.getNumRows(), dataToImport.getNumColumns());
  range.setValues(dataToImport.getValues());
  return newSheet.getName();
}

본 코드는 아래 링크에서 거의 가져왔습니다.

https://spreadsheet.dev/automatically-convert-excel-spreadsheets-to-google-sheets-using-apps-script

 

Automatically convert Excel spreadsheets to Google Sheets using Apps Script

Automatically convert Excel spreadsheets to Google Sheets using Apps Script Microsoft Excel is the lingua franca of the business world! If you've worked for any business of any size, you've probably used Excel in some form or another. Even if your school o

spreadsheet.dev

검색을 하다보면 감사하게도 이렇게 공개한 코드들이 많습니다.

대부분 영어라서 문제죠...

 

지금 코드가 다른점이 있다면 

1. 설명을 한글로 변환한 점

2. 복사한 스프레드시트가 남는데 그걸 자동으로 지워지도록 하였습니다.

3. 확장자(.xlsx)를 작성할 필요가 없이 파일명만 넣으면 되도록 하였습니다.

 

주의: 구글 드라이브에 있는 엑셀 파일만 인식할 수 있습니다.

'오피스 > 구글시트' 카테고리의 다른 글

XLOOKUP, XMATCH, LAMBDA를 조합하여 검색하기  (0) 2022.09.14
구글폼과 구글시트 연동  (0) 2022.08.16
합계 반복 계산하기  (0) 2022.07.12
구글 시트 시작  (0) 2022.06.13

관련글 더보기

댓글 영역