【GAS】スプレッドシート内の任意のシートからCSVファイルを作成する

【GAS】スプレッドシート内の任意のシートからCSVファイルを作成する

GAS(Google Apps Script)の案件を手掛ける上でよく使い回す処理をファンクション化してみました。
コピーしてそのまま使うこともできますし、一部カスタマイズして使ってください。

「複数のサイトを横断的に見ないと答えにたどり着かない。。。」
そんな思いにこたえることができれば幸いです!

さて、今回は「スプレッドシート内の任意のシートからCSVファイルを作成する」処理を紹介します。

処理概要

任意のシートからCSVファイルを作成する
(同名のCSVファイルがあった場合は削除して再作成する仕様にしています)

【引数】
fromSheet : CSVファイルに変換するシートオブジェクト
toFolder : 作成したCSVファイルの保存先となるフォルダオブジェクト
fileName : 作成したCSVのファイル名
【返り値】
なし

ファンクション

function createCSV(fromSheet, toFolder, fileName) {
  // 同名のファイルがあったら削除して再作成
  let files = toFolder.getFilesByName(fileName);
  if (files.hasNext()) {
    file.setTrashed(true);
  }
  // CSVファイルの作成対象となるデータを抽出
  let values = fromSheet.getDataRange().getValues();
  // CSVファイルを作成するために行単位のデータを改行コードで結合する
  let csv = values.join('\r\n');
  // blob形式データを取得(CSV用)し、文字コードを設定する
  let blob = Utilities.newBlob("", MimeType.CSV, fileName).setDataFromString(csv, "JIS");
  // CSVファイルを作成する
  let csvFile = toFolder.createFile(blob);
}

内部処理の説明

今回はコメントとしてそのまま書いてみましたが、

// 同名のファイルがあったら削除して再作成
let files = toFolder.getFilesByName(fileName);
if (files.hasNext()) {
  file.setTrashed(true);
}

この箇所で作成予定と同名のCSVファイルがあった場合に削除するようにしています。

// CSVファイルの作成対象となるデータを抽出
let values = fromSheet.getDataRange().getValues();

CSVファイルの作成対象となるデータをここで抽出しています。

ここではシート内のすべてを対象としてデータを取得していますので、getDataRangeの代わりにgetRangeを使用することで、
任意の箇所のデータのみに変更することも可能です。
※ 応用すれば、複数シートからデータをかき集めてきてCSV作成用のデータを作成することも可能になります

  // CSVファイルを作成するために行単位のデータを改行コードで結合する
  let csv = values.join('\r\n');

CSVファイルを作成するために行データを改行コードで結合しています。
上記の怪魚コードはWindoes用なので、各環境に合わせて作成するといいかもしれません。

以下はあくまでも参考として改行コードをいい一覧化していますので、詳細は別途確認してみてください。

OS改行コード
Windows\r\n
Linux\n
Mac OS\r
// blob形式データを取得(CSV用)し、文字コードを設定する
let blob = Utilities.newBlob("", MimeType.CSV, fileName).setDataFromString(csv, "JIS");

PDF化の際にも出てきましたが、ファイルのデータを扱うときは一旦blobという形式のデータを経由します。

ファイル名もここで指定しています。

上記コードでカスタマイズをする箇所としては、「”JIS”」となっている箇所ですね。
ここは文字コードを設定しているので、MacやLinuxであれば、「”UTF-8″」がいいでしょう。
特にこだわりがない場合は、最近ではWindowsもUTF-8が標準になりつつあるので、UTF-8のほうがいいかもしれません。

// CSVファイルを作成する
let csvFile = toFolder.createFile(blob);

最後にここで指定したフォルダに対してCSVファイルを作成しています。

まとめ

今回は「スプレッドシート内の任意のシートからCSVファイルを作成する」処理について紹介しました。

Google Apps Script は無料枠でも十分に使えとても便利です。
OSに依存せずに使えることから様々な環境で自動化・省力化してスローライフを楽しみましょう!

GASでの簡易システム制作に関するお問い合わせはこちらからお待ちしております。
LancersMENTAでも活動していますので、そちらからお仕事を依頼して頂けます。