【GAS】スプレッドシート上のデータをPHPのマップ(key-value)に変換するスクリプト

gasの環境構築やライブラリとして登録する方法については以下の記事を参照ください。本記事では、これまでに紹介した記事に沿って実際に作成したいくつかのコードを紹介します。

Vscodeでclaspを使用してGASのTypescript開発環境を構築する
本記事では、Vscodeでclaspを使用してGASのTypescript開発環境を構築する手順について紹介しています。スクリプトエディタが少し使いづらいため、Vscode上で補完を効かせながら効率的に開発を行うためには必須の作業かと思いますので、ぜひ試してみてください。
GASをライブラリとして共通化し、使いまわせるようにする方法
本記事では、GASをライブラリとして共通化し、どこからでも使いまわせるようにする方法について紹介しています。Standalone Scriptsとしてスクリプトを登録することで様々な場所からスクリプトを呼び出すことができとても便利なのでぜひ試してみてください

環境

  • windows10
  • node v14.17.4
  • npm 6.14.14
  • TypeScript 4.4.4
  • VsCode
  • gitbash 2.32.0.1

ソースコード

リポジトリ

GitHub - masayan1126/my-gas: gas置き場です
gas置き場です. Contribute to masayan1126/my-gas development by creating an account on GitHub.

内容

こういったスプレッドシートがあった場合、A列の値をkey、B列の値をvalueとした、PHPの連想配列を作成することが可能です。

エクセルとかスプレッドシートでデータをもらった際にそれをプログラム上で使用したい場合に便利です。

app\src\programs\outPutValuesToPhpMap.ts

やっていることは大きく以下です。

  1. 対象シートの最終行を取得(引数は、対象シート・対象シート開始列・対象シートの終了列・キー値にするカラム・バリュー値にするカラム)
  2. 対象シートの対象範囲のセルの値を取得
  3. phpのマップ形式に変換
  4. 出力
/**
 * ValuesをPHPのマップ(key-value)に変換して出力します
 * @param  {GoogleAppsScript.Spreadsheet.Sheet} targetSheet
 * @param  {number} startRow
 * @param  {number} inputColumnOnTargetSheet
 * @param  {number} lastColumn
 * @param  {number} keyColumn
 * @param  {number} valueColumn
 * @returns void
 */

function outPutValuesToPhpMap(
  targetSheet: GoogleAppsScript.Spreadsheet.Sheet,
  startRow: number,
  inputColumnOnTargetSheet: number,
  lastColumn: number,
  keyColumn: number,
  valueColumn: number
): void {
  const lastRowOverallOnTargetSheet = targetSheet.getLastRow();

  // 最終行の取得
  const theLastRowOnTargetSheet = gainLastRow(
    targetSheet,
    lastRowOverallOnTargetSheet,
    inputColumnOnTargetSheet
  );

  // 対象シート側の範囲セルをすべて取得
  const rangeValuesOnTargetSheet = gainValues(
    targetSheet,
    startRow, // ヘッダーが1行目にあると想定して2行目から開始
    inputColumnOnTargetSheet,
    theLastRowOnTargetSheet,
    lastColumn
  );

  const newMap = convertValuesToPhpMap(rangeValuesOnTargetSheet, keyColumn, valueColumn);
  writeValues(targetSheet, newMap, startRow, lastColumn + 1);
}

以上です。

コメント

タイトルとURLをコピーしました