====== Google App Script ====== [[start|一つ上へ]] ===== スプレッドシート ===== ==== スプレッドシートのIdを指定して開く ==== var spreadsheet = SpreadsheetApp.openById(); var sheet = spreadsheet.getSheetByName(""); 指定したシートのデータを取得する。 流れは - スプレッドシートのIDを指定して開く - シート名を指定して開く - データ領域の大きさを取得 - 領域のデータを取得 という流れになる。コードは以下の通り。 var spreadsheet = SpreadsheetApp.openById(); var sheet = spreadsheet.getSheetByName(""); 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 => {...})'' は * mutableList 内の各オブジェクトに対してループ処理を行う。 * rowData はループ内で扱う各オブジェクト。 ''Object.values(rowData).map(value => {...})'' については、 rowData でオブジェクト内の各値(プロパティの値)に対してループ処理を行う。 Object.values(rowData) は rowData 内の値を配列として取得する。 value はループ内で扱う各値を示す。 ''if (typeof value === "string" && value.includes(",")) {...}'' については、 value が文字列であり、かつカンマ , を含む場合にCSV内で特殊文字として扱われる可能性のあるカンマをエスケープする。 例えば、文字列内にカンマがある場合、ダブルクォーテーションで囲むことでエスケープする。 また、既にダブルクォーテーションが含まれている場合は、二重のダブルクォーテーションに変換する。 ===== プログラム例 ===== * [[gas:example:checkdigit|チェックデジットの計算]] * [[gas:example:mutablelist|mutable(可変長)リストを使用してヘッダー名で参照する]] * [[gas:example:http_client|HTTPクライアントでのWebアクセス]] * [[gas:example:textcopy|処理したテキストをwebページに表示し、ボタンでクリップボードにコピーする]] * [[gas:example:mutable_to_csv|mutableリストからCSVに変換する]] function exportToCSV() { var spreadsheetId = ""; // スプレッドシートの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を指定してファイルをエクスポートする }