Google App Script

一つ上へ

スプレッドシート

スプレッドシートのIdを指定して開く

var spreadsheet = SpreadsheetApp.openById(<spread sheet ID>);
var sheet = spreadsheet.getSheetByName("<sheet_name>");

指定したシートのデータを取得する。 流れは

  1. スプレッドシートのIDを指定して開く
  2. シート名を指定して開く
  3. データ領域の大きさを取得
  4. 領域のデータを取得

という流れになる。コードは以下の通り。

var spreadsheet = SpreadsheetApp.openById(<spread sheet ID>);
var sheet = spreadsheet.getSheetByName("<sheet_name>");
var range = sheet.getDataRange(); // これで、データがある領域のrectangle を取得できる。
var values = range.getValues();

配列

配列の中に特定の値が含まれているかどうかの判定

配列に対してincludes(“value”) を指定すると、値が含まれている場合はtrue、含まれない場合はfalse を返す。 column_nameが含まれる場合にヘッダーを追加する場合は以下のようになる

if(headerRows.includes("column_name")) {
  headerRows.push("header1","header2",...);
}

ループ処理

for of 文

配列の中身をすべて処理したい場合は for of を使用する。

for(変数 of 配列){
  //配列の要素数だけ繰り返し、毎回変数に配列値を格納
  //for ofループで実行する処理を記述
 
}

シートの範囲を指定する

getRange(row, column, numRows, numColumns)
項目説明
row範囲の開始行のインデックスを指定。
column範囲の開始列のインデックスを指定。
numRows範囲に含まれる行の数を指定。
numColumns範囲に含まれる列の数を指定。

ヘッダー行のみを取得する

const headerRow = sheet.getRange(1,1,1,sheet.getLastColumn()).getValues()[0];

シートのA2からデータのある最後の行までのデータを取得する

var values = sheet.getRange(2,1,sheet.getLastRow()-1,1).getValues(); // A2から最後の行までのデータを読み込む。

文字列と数値の変換

文字列から数値に変換するには

var string = '123456';
var num = Number(string);
var inum = parseInt(string);

を使用する。逆に、数値から文字列に変換するには

var num = 123456;
var str = num.toString();

のように記載する。

文字列操作

置換

文字列を置換するには、replace()メソッドを使用する。 これは、第1引数の文字を第2引数の文字に置換する。 例えば、123,456 からカンマを取り除く場合は

var str = '123,456';
var str2 = str.replace(",","")

正規表現を使うことも可能。RegExpオブジェクトを用いる。gオプションを付けると複数回の置換も一度で行うことができる。

let replaceWord = /aaa/g;
doc = doc.replace(replaceWord, "bbb");

日付を文字列に変換

//実行した日付のオブジェクトをtoday変数に格納する
let today = new Date();
//Dateオブジェクトのtoday変数をログ出力する
Logger.log(today);
//formatDateメソッドで日付の表示形式を変換する
today = Utilities.formatDate(today, "JST", "yyyy/MM/dd");
//formatDateメソッドで変換後をログ出力する
Logger.log(today);

文字列の連結

文字列を連結するには、+ 演算子かconcat()メソッドを使用する。

let str1 = "String1";
let str2 = "String2";
let str3 = str1 + str2;

あるいは

let str1 = "String1";
let str2 = "String2";
let str3 = str1.concat(str2);

CSVコンテンツの作成

まず、mutablelist の最初の要素を取得する。この要素はキーと値を持つオブジェクトになっているので、 Object.keys(mutableList[0]) によってそのキーを配列として取得することが出来る。 これに対して.joni(“,”)を作用させることで、各キーをカンマ区切りの文字列とすることが出来る。

const headerRow = Object.keys(mutableList[0]).join(",");

次に

const dataRows = mutableList.map(rowData => {
  return Object.values(rowData).map(value => {
    if (typeof value === "string" && value.includes(",")) {
      return '"' + value.replace(/"/g, '""') + '"';
    }
    return value;
  }).join(",");
});

の各処理の内容について。 mutableList.map(rowData ⇒ {…})

Object.values(rowData).map(value ⇒ {…}) については、 rowData でオブジェクト内の各値(プロパティの値)に対してループ処理を行う。 Object.values(rowData) は rowData 内の値を配列として取得する。 value はループ内で扱う各値を示す。

if (typeof value === “string” && value.includes(“,”)) {…} については、 value が文字列であり、かつカンマ , を含む場合にCSV内で特殊文字として扱われる可能性のあるカンマをエスケープする。 例えば、文字列内にカンマがある場合、ダブルクォーテーションで囲むことでエスケープする。 また、既にダブルクォーテーションが含まれている場合は、二重のダブルクォーテーションに変換する。

プログラム例

function exportToCSV() {
  var spreadsheetId = "<spread sheet ID>"; // スプレッドシートのIDを指定
  var spreadsheet = SpreadsheetApp.openById(spreadsheetId); // スプレッドシートIDを指定して開く。
  var sheet = spreadsheet.getSheetByName("tb01"); // シートの名前を指定
 
  var range = sheet.getDataRange(); 指定したシートのデータ領域を取得
  var values = range.getValues(); その領域のデータを取得
 
// values 各行列のデータをもとにCSVを作成
  var csvContent = "";
  for (var row = 0; row < values.length; row++) {
    var rowData = values[row];
    for (var col = 0; col < rowData.length; col++) {
      var cellValue = rowData[col];
      if (cellValue !== null && cellValue !== undefined) {
        // セルの値が文字列になるようにエスケープ処理
        cellValue = '"' + cellValue.toString().replace(/"/g, '""') + '"';
      } else {
        cellValue = "";
      }
      csvContent += cellValue;
      if (col < rowData.length - 1) {
        csvContent += ",";
      }
    }
    csvContent += "\n";
  }
 
  // CSVファイルをエクスポートする
  var fileName = "export.csv";
  var mimeType = "text/csv";
  var blob = Utilities.newBlob(csvContent, mimeType, fileName); // blob を作成
  DriveApp.createFile(); // blobを指定してファイルをエクスポートする
}