Google 스프레드시트에서 JSON 출력

소개



게임에서 사용하는 몬스터의 파라미터를 편집하여 JSON에 출력하고 싶습니다.
하지만 Excel이 없기 때문에 Google 스프레드 시트에서 시도했습니다.

스프레드 시트를 열고 메뉴의 도구 -> 스크립트 편집기에서
Google Apps Script(GAS)라는 JavaScript 기반 언어를 작성할 수 있습니다.

데이터 적으로 이것은


이렇게



방법



스크립트 편집기를 열면 생성 된 매크로 .gs 및
스크립트 편집기 메뉴의 파일 -> 새로 만들기 -> HTML 파일
에서 dialog.html을 만듭니다.

내용은 각각

매크로.gs
function main() {
  var html = HtmlService.createTemplateFromFile("dialog").evaluate();  
  SpreadsheetApp.getUi().showModalDialog(html, "ファイルダウンロード");
}

function getData() {  
  var sheet = SpreadsheetApp.getActiveSheet();
  var maxRow = sheet.getLastRow();//行数 -
  var maxColumn = sheet.getLastColumn();//列数 |
  var keys = [];
  var ret = [];

  //1列目のkeyの名前取得
  for (var x = 1; x <= maxColumn; x++) {
    keys.push(sheet.getRange(1, x).getValue());
  }

  //データ
  for (var y = 2; y <= maxRow; y++) {
    var json = {};
    for (var x = 1; x <= maxColumn; x++) {
      json[keys[x-1]] = sheet.getRange(y, x).getValue();
    }
    ret.push(json);
  }

  //整形してテキストに
  return JSON.stringify(ret, null, '\t');  
}


function onOpen() {
  // メニューバーにカスタムメニューを追加
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var entries = [{
    name : "jsonで出力",
    functionName : "main"
  }];
  spreadsheet.addMenu("マクロ", entries);
};

dialog.html
<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
    <script type='text/javascript'>
      function handleDownload() {
        var content = <?= getData(); ?>;
        var blob = new Blob([ content ], { "type" : "application/json"});
        document.getElementById("download").href = window.URL.createObjectURL(blob);
      }
  </script>
  </head>
  <body>
    <a id="download" href="#" download="test.json" onclick="handleDownload()">ダウンロード</a>
  </body>
</html>

이러한 파일을 만들고 스프레드시트로 돌아가면
메뉴에 매크로라는 항목이 추가되어 있으므로 선택하여 실행합니다.

GAS는 붙어 구이 칼날이므로 작법이 별로 좋지 않을지도…

실패한 방법



파일 출력은 다음과 같은 방법으로 할 수 있다고 했습니다만, 내 환경에서는
Invalid argument: parent.mimeType
그리고 나서 잘 가지 않았다.
이 버그 제대로 쫓지 않습니다 ...

매크로.gs
function outputJson() {  
  var sheetfile = "myFileName";
  var destfolder = "フォルダのID";
  var sheet = SpreadsheetApp.create(sheetfile);
  var file = DriveApp.getFileById(sheet.getId());
  var destfolder = DriveApp.getFolderById(destfolder).addFile(file);
  var docfile = file.getParents().next().removeFile(file);
}

function onOpen() {
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var entries = [{
    name : "シートをjsonで出力",
    functionName : "outputJson"
  }];
  spreadsheet.addMenu("CUSTOM MENU", entries);
};


기사를 쓸 때의 환경



Google 크롬 74.0.3729.108
Windows 10

참고

좋은 웹페이지 즐겨찾기