CSV形式でダウンロードするとUTF-8になる

Google SheetでシートをCSV形式でダウンロードするとき文字コードはUTF-8固定になる。

Windowsアプリケーションで利用する場合などでShift JISでエンコードされている必要がある場合がある。

GASで文字コードを変換してダウンロードする

下記のコードをGoogle App Scriptに実装することでシートを開いたときにDownloadメニューが追加される。

メニューをクリックするとモーダルが表示されてDownloadリンクからシート名がファイル名になったCSVファイルがダウンロードできる。

// download.gs
function onOpen() {
  const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  spreadsheet.addMenu("Download", [
    {
      name: "CSV (Shift JIS)",
      functionName: "download",
    },
  ]);
}

function download() {
  const sheet = SpreadsheetApp.getActiveSheet();
  const template = HtmlService.createTemplateFromFile("download");
  template.values = JSON.stringify(sheet.getDataRange().getValues());
  template.name = sheet.getName();
  SpreadsheetApp.getUi().showModalDialog(
    template.evaluate(),
    "CSV (Shift JIS)"
  );
}
<!-- download.html -->
<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
  </head>
  <body>
    <a id="download" href="#" download="<?= name ?>.csv" target="_blank">Download</a>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/PapaParse/5.3.2/papaparse.min.js"
      integrity="sha512-SGWgwwRA8xZgEoKiex3UubkSkV1zSE1BS6O4pXcaxcNtUlQsOmOmhVnDwIvqGRfEmuz83tIGL13cXMZn6upPyg=="
    crossorigin="anonymous"
 referrerpolicy="no-referrer"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/encoding-japanese/2.0.0/encoding.min.js"
      integrity="sha512-AhAMtLXTbhq+dyODjwnLcSlytykROxgUhR+gDZmRavVCNj6Gjta5l+8TqGAyLZiNsvJhh3J83ElyhU+5dS2OZw=="
    crossorigin="anonymous"
 referrerpolicy="no-referrer"></script>
    <script>
      const values = JSON.parse(<?= values ?>);
      const csv = Encoding.convert(Papa.unparse(values), {
        from: "UNICODE",
        to: "SJIS",
        type: "array"
      });
      const blob = new Blob([new Uint8Array(csv)], { type: "text/csv" });
      window.URL = window.URL || window.webkitURL;
      document.getElementById("download").href = window.URL.createObjectURL(blob);
    </script>
  </body>
</html>