趣味の開発ノート

ITの学習やプログラミング・ノーコードアプリ開発のことなど。

【GAS】ドライブ内のcsvの加工をスプレッドシートに入れて自動化したい

毎月の経理作業の効率化のために、GAS(Google Apps Script)でプログラムを書いている。

月毎にMFクラウドの仕訳帳を確認しながら、領収書などがちゃんと揃っているかをチェックするのを効率化したい。
そこで、MFクラウドから吐き出したcsvファイルをスプレッドシート化して、フィルタをかけて印刷できたら便利だなと思っている。

ここは手作業でやるのではなく、GASの出番。

実装の流れ

大枠の流れは、

  1. 指定したフォルダ内に新規スプレッドシートを作成する
  2. 指定したcsvファイルの内容を二次元配列で取得してスプレッドシートに書き込む
  3. 補助科目別にフィルタをかけたシートを作成する

というような流れ。

これを細かく分けて実装していく。 とりあえず今日は、2までが完了した。

作成した関数

いくつか、作成した関数をペタリ

新規スプレッドシートを指定のフォルダに作成する関数

/**
 * 〈コード要約〉
 * 新規スプレッドシートを指定のフォルダに作成する
 *
 * @param {String} fileName - 作成するファイル名
 * @param {String} folderId - 作成する対象のフォルダID
 * @return {Object} ss - Spreadsheetオブジェクト
*/
function createNewSpreadsheet_(fileName, folderId) {

  // マイドライブに新規スプレッドシート作成
  const ss = SpreadsheetApp.create(fileName);

  // 指定のフォルダに新規スプレッドシートを追加
  const file = DriveApp.getFileById(ss.getId());
  DriveApp.getFolderById(folderId).addFile(file);

  // マイドライブからスプレッドシート削除
  DriveApp.getRootFolder().removeFile(file);

  console.log(`created file:${file.getName()}.`)

  return ss;

}

ファイルIDからファイル名(拡張子除く)を取得する関数

/**
 * 〈コード要約〉
 * ファイルIDからファイル名(拡張子除く)を取得する
 *
 * @param {String} fileId - ファイル名を取得したいファイルID
 * @return {String} fileName - 拡張子を除いたファイル名
*/
function getFileNameWithoutExtend_(fileId) {

  const file = DriveApp.getFileById(fileId);
  const fileName = file.getName().split('.')[0];

  return fileName;

}

IDで指定したCSVファイルの値を二次元配列で取得する関数

/**
 * 〈コード要約〉
 * IDで指定したCSVファイルの値を二次元配列で取得する
 *
 * @param {String} csvFileId - 値を取得したいCSVファイルID
 * @return {Object[][]} csvValues - CSVの値が格納された二次元配列
*/
function getCsvValues_(csvFileId) {

  const csvFile = DriveApp.getFileById(csvFileId);
  const csvBlob = csvFile.getBlob();
  const csvText = csvBlob.getDataAsString('shift-jis'); // 引数で文字コードを指定(文字化け対策)
  const csvValues = Utilities.parseCsv(csvText);

  return csvValues;

}

参考にさせていただいたページ

tonari-it.com

スプレッドシートを指定のフォルダに新規作成する。

moripro.net