구글 스프레드시트 데이터 구글 문서(docs)로 변경하는 2가지 방법 (feat. 설문)

구글 설문으로 받은 데이터들은 스프레드시트나 엑셀 문서로 확인하려면 많이 불편하죠. 항목이 많으면 많을 수록 가로 길게 펼쳐져 있기 때문에 자기소개나 지원동기 같은 것이 포함된 설문조사라면 내용을 읽기는 것은 쉽지 않습니다. 그래서 문서로 변환해서 확인하는 것이 가장 좋은 방법인데요. 2가지 방법으로 구글 스프레드시트를 구글문서로 바로 저장하는 방법을 알려드립니다.

 

 


 

이글의 구성

  • 구글스프레드시트 부가기능 설치하기
  • Save As Doc 이용방법
  • 구글스프레드시트 Apps Script
  • 구글드라이브 경로확인하기
  • 스크립트 실행하기

 

 

구글시트(SHEET) 바로가기

 

구글 DOCS 바로가기

 

구글 드라이브 바로가기

 

 

구글 스프레드시트 부가기능 설치하기

구글 스프레드시트는 마이크로소프트 엑셀과 같은 프로그램입니다. 브라우저에서 별도의 프로그램 설치없이 이용할 수 있는 앱이라 개인적으로 많이 사용하고 있는데요. 회사에서 설문조사나 참가자 모집 같은 이벤트를 진행하게 되면 데이터 수집을 구글 forms를 이용하는 경우가 많아서 forms- 스프레드시트-구글 docs 간에 연동이 필요하곤 합니다.

 

예를 들어 아래와 같은 정보를 수집했거나 데이터베이스가 있다고 가정하면요. 비록 예시에는 2개 데이터 뿐이지만 때로는 수백 수천개의 수집된 라인이 있을 수도 있죠. 

 

 

부가기능 설치하기

구글 스프레드시트에는 구글의 확장프로그램 처럼 부가기능을 설치할 수 있습니다.

 

 

스프레드시트를 doc으로 변경하는 프로그램은 Save As Doc이라는 확장 프로그램입니다. 부가기능설치하기를 눌러서 'Save As Doc'를 검색하면 아래와 같이 여러가지 앱이 나오는데요. 첫번째 노란색 바탕화면의 부가기능을 설치해줍니다. 저는 미리 설치를 해두었기 때문에  설치됨으로 표시되어 있구요.

 

 

 

Save As Doc - Google Workspace Marketplace

리뷰, 프로필 이름, 사진이 Google 서비스에 공개적으로 표시됩니다. 리뷰는 Google Workspace Marketplace 댓글 가이드라인 및 리뷰 정책을 준수해야 합니다. 자세히 알아보기

workspace.google.com

 

 

설치가 완료되면 실행을 시켜줘야하는데요.

화면이 아래와 같이 되어 있는 경우는 부가기능이 보이지 않습니다. 버전이 다른 것인지 확장 프로그램 메뉴 옆에 부가기능 메뉴가 있는 경우도 있던데 저처럼 보이지 않는 경우는 우측 하단의 화살표 모양을 클리해주세요.

 

 

클릭하면 사이드 메뉴가 나타나고 아래쪽에 노란색  Save As Doc 버튼이 보입니다. 클릭해주세요.

 

Save As Doc 사용방법

사이즈메뉴가 나타나면 몇가지 옵션을 설정해줄 수 있습니다.

 

 

1. Select all data를 선택하면 전체 데이터를 문서로 만들겠다는 것인데요. 불필요한 부분을 빼고 부분적으로만 문서를 만들려면 선택하지 않습니다.

 

2. Saved Doc File Name
문서로 저장될 파일명을 입력해줍니다. 예를 들어 'test'라고 입력하거나 '설문대상' 등과 같이 저장될 이름을 입력해줍니다.

 

3. include Headings 

두가지 옵션을 선택할 수 있는데요.

- First row of sheet contains headings

- First row of selection contains headings

 

첫번째 옵션을 선택하고 필요한 셀을 선택하면 맨 윗줄을 항목명으로 처리를 해줍니다.

두번째 옵션을 선택하면 임의로 선택하는 줄을 항목명으로 해서 처리를해줍니다. 제 경우는 위와 같이 첫번째 라인이 항목명으로 되어 있어서 첫번째 옵션을 선택했습니다.

 

4. Add a pagebreak after each row는 체크가 되어 있는데요.

데이터가 행으로 쌓여 있기 때문에 한행에 해당하는 데이터를 하나의 페이지로 만들고 다음 데이터는 그다음 페이지에 이어서 만들어 나가도록 한다는 뜻입니다. 

 

5. Remember these settings는 체크하시면 앞으로는 별도의 설정이 없으면 계속해서 같은 설정으로 작업한다는 뜻이 되겠습니다. 

 

이렇게 세팅된 상태로 save as doc 버튼을 눌러주면 설정된 제목으로 문서가 만들어집니다.

 

* 제가 사용해보니 항목이 너무 많거나 데이터가 너무 많으면 제대로 생성을 못하는 경우도 있는 것 같습니다. 그럴 때는 적당히 선택해서 일부만 생성하는 방식으로 나눠서 해야할 것 같아요.

 

 

 

Apps Script 로 변환하기

Apps Script는 일종의 배치 프로그램 스크립트로 자동화 작업을 해주도록 하는 것입니다. 스프레드시트 확장 프로그램 메뉴에 Apps Script 메뉴가 있는데요. 실행하면 스크립트를 입력할 수 있는 화면이 나타납니다.

 

 

저는 이미 스크립트를 넣어서 오른쪽 화면에 스크립트가 채워져 있는데요. 아무것도 없는 비어 있는 화면이 나타납니다.

 

여기에 스크립트를 넣어주면 되는데요. 아래 스크립트를 참고해주세요.

상단의 헤더를 저는 number, name, contact, motivation.. 등으로 했는데요.

function createGoogleDocsFromSpreadsheet() {
  Logger.log('Script started');

  // 스프레드시트와 시트 정보
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var data = sheet.getDataRange().getValues();
  Logger.log('Sheet data loaded. Rows: ' + data.length);
  
  // 저장할 폴더 ID
  var folderId = '구글드라이브 저장할 폴더명(예 1dasfdsfdsfdsaf)'; // 폴더 ID를 문자열로 입력
  
  // 데이터의 첫 번째 행은 헤더이므로 제외하고 반복
  for (var i = 1; i < data.length; i++) {
    Logger.log('Processing row: ' + (i + 1));
    var number = data[i][0];
    var name = data[i][1];
    var contact = data[i][2];
    var motivation = data[i][3];
    var introduction = data[i][4];
    
    try {
      // 구글 독스 문서 생성
      Logger.log('Creating new document for: ' + name);
      var doc = DocumentApp.create(name + "'s Introduction");
      Logger.log('Document created with ID: ' + doc.getId());
      
      var body = doc.getBody();
      Logger.log('Accessing document body');
      
      // 표 생성 (2열짜리 표, 각 행은 항목과 데이터)
      var table = body.appendTable();
      Logger.log('Table appended to document');
      
      // 각 행을 개별적으로 생성하고, 각 셀을 추가
      var rowData = [
        ["Number:", number],
        ["Name:", name],
        ["Contact:", contact],
        ["Motivation:", motivation],
        ["Introduction:", introduction]
      ];
      
      rowData.forEach(function(row, index) {
        var tableRow = table.appendTableRow();
        tableRow.appendTableCell(row[0]);
        tableRow.appendTableCell(row[1].toString());
        Logger.log('Row ' + (index + 1) + ' added to table');
      });
      
      // 표의 열 너비 조정
      var tableWidth = body.getPageWidth() - body.getMarginLeft() - body.getMarginRight();
      table.setColumnWidth(0, tableWidth * 0.2); // 왼쪽 열을 20%로 설정
      table.setColumnWidth(1, tableWidth * 0.8); // 오른쪽 열을 80%로 설정
      Logger.log('Table column widths adjusted');
      
      // 문서 저장 및 닫기
      doc.saveAndClose();
      Logger.log('Document saved and closed');
      
      // 생성된 문서의 파일 객체 가져오기
      var docFile = DriveApp.getFileById(doc.getId());
      Logger.log('File object retrieved');
      
      // 파일을 지정한 폴더로 이동
      try {
        docFile.moveTo(DriveApp.getFolderById(folderId));
        Logger.log('File moved to destination folder');
      } catch (moveError) {
        Logger.log('Error moving file: ' + moveError.toString());
        // 파일 이동에 실패했더라도 URL은 추가합니다.
      }
      
      // 생성된 문서의 URL 가져오기
      var url = doc.getUrl();
      Logger.log('Document URL retrieved: ' + url);
      
      // 스프레드시트에 생성된 문서의 URL 추가
      sheet.getRange(i + 1, data[0].length + 1).setValue(url);
      Logger.log('URL added to spreadsheet');
      
    } catch (error) {
      Logger.log('Error occurred for row ' + (i + 1) + ': ' + error.toString());
      sheet.getRange(i + 1, data[0].length + 1).setValue('Error: ' + error.toString());
    }
  }
  
  Logger.log('Script completed');
}

 

항목이 적은 경우는 이렇게 해도 되지만 항목이 많은 경우 즉 열이 많은 경우는 첫번째 행을 헤더로 사용하는 방식으로 하는 게 좋습니다.

아래와 같은 방식으로 하시면 됩니다.

function createGoogleDocsFromSpreadsheet() {
  Logger.log('Script started');

  // 스프레드시트와 시트 정보
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var data = sheet.getDataRange().getValues();
  Logger.log('Sheet data loaded. Rows: ' + data.length);

  // 저장할 폴더 ID
  var folderId = '구글드라이브 폴더명'; // 폴더 ID를 문자열로 입력
  
  // 첫 번째 행은 헤더로 사용
  var headers = data[0];
  
  // 헤더 이름에 따라 파일명을 생성하기 위해, 예를 들어 'Name'이라는 헤더 사용
  var fileNameHeader = 'Name(이름 해당열 헤더)’; // 이 헤더의 값을 파일명으로 사용

  // 'Name' 헤더의 인덱스 찾기
  var fileNameIndex = headers.indexOf(fileNameHeader);

  if (fileNameIndex === -1) {
    Logger.log('Header "' + fileNameHeader + '" not found.');
    return;
  }
  
  // 데이터의 첫 번째 행은 헤더이므로 제외하고 반복
  for (var i = 1; i < data.length; i++) {
    Logger.log('Processing row: ' + (i + 1));
    var row = data[i];
    var fileName = row[fileNameIndex]; // 헤더에 해당하는 열의 데이터

 

 

구글드라이브 폴더명 확인하기

접근이 가능한 폴더명을 정확히 입력하는 것이 중요합니다. 스프레드시트 주소가 아니라 저장될 구글드라이브의 폴더명이 필요합니다. 아래와 같이 구글드라이브의 폴더 경로는 주소창에 나타나는데요. testfolder라고 이름을 줬지만 주소창에는 1fafdasf1fafdtf3fdafdsfa 이런식의 이름이 나타나게 되어 있습니다. /folders/ 뒤에 있는 부분만 입력해주시면 됩니다.

 

 

실행해보기

Apps Script 화면 스크립트 입력창 상단에 실행버튼이 있습니다. 클릭해주면 스크립트가 데이터가 모두 변환될 때까지 계속 돌아가게 됩니다.

 

 

 

실행이 완료될 때까지 창을 닫지 말고 기다리시면 됩니다. 생성해야할 파일이 많으면 아무래도 시간이 꽤 걸립니다.

 

 

위에 있는 이미지는 생성된 파일 리스트와 파일 내용 예시입니다.

 

 

마치며,

구글 스프레드시트의 데이터를 구글 doc 워드 문서로 변환하는 방법을 소개해드렸습니다. 손쉽게 할 수 있는 방법은 아무래도 Save as Doc 부가기능을 사용하는 방법이지만 데이터가 너무 많으면 끊어서 변환해야해서 불편할 수 있는데요. 조금 번거롭더라도 스크립트를 만들어 두고 사용하면 좋을 듯합니다. 위에 소개해드린 스크립트는 본인에 맞게 변형해서 사용하시면 되고 chatGPT나 Claudeai를 활용하시면 더 쓸만한 것을 만들 수 있을거예요.

 

고맙습니다.

반응형

댓글

Designed by JB FACTORY