[document][GAS]業務マニュアルとアセスメントシートを作ろう-その4-

GAS

どうも。つじけ(tsujikenzo)です。このシリーズでは「業務マニュアルとアセスメントシートを(同時に)作ろう」についてお送りしています。全7回の予定で、今日は第4回目です。

前回のおさらい

前回は「マニュアルの見出しスタイルを抽出しよう」ということでDocument APIのParagraphクラスを操作して、[TITLE]や[HEADING2]などの[見出しスタイル]を取得できました。

[document][GAS]業務マニュアルとアセスメントシートを作ろう-その3-
どうも。つじけ(tsujikenzo)です。このシリーズでは「業務マニュアルとアセスメントシートを(同時に)作ろう」についてお送りしています。全7回の予定で、今日は第3回目です。前回のおさらいさて、前回は「マニュアルの作成の仕...

今回は、ドキュメントからスプレッドシートを新規作成したいと思います。前半は「ドキュメントから2次元配列用の配列を作成」し、後半では「スプレッドシートを新規作成」します。

アセスメントシートとは

今回の目的は、マニュアルの作業を1つずつ評価する(アセスメントを取る)為のスプレッドシートを作成することです。

作業をリスト化して、「担当」「業務アプリ」「自動化できそうか」などの評価を社内で行う為のシートです。

マニュアル(ドキュメント)から自動で引っ張ってくるデータはA列の[Style]C列の[Heading]のみです。[B列]のNoは自動で生成します。

【注意事項】ドキュメントからのインポートは一方通行で、常に新規のスプレッドシートが作成されますので、必要に応じてコピペなどを行ってください。

シート作成の準備

ドキュメントからシートを作成する為に、下記3つのデータが必要です。

  • タイトル
  • Style
  • Heading

ドキュメントからどのように取得するのか、それぞれ確認していきましょう。

前回作成したコード

前回は、スタンドアロンスクリプトに下記のコードを書きました。(変数[title]を復活させていますのでご注意ください)

function documentConverter() {

  const doc = DocumentApp.openById('作成したマニュアルのドキュメントID');
  const title = doc.getName();

  const paragraphs = doc.getBody().getParagraphs(); //[{},{},...,{}]

for (const parag of paragraphs){
  if (parag.getHeading().toJSON() !== "NORMAL"){
      console.log(parag.getHeading().toJSON());
  }

}

タイトルと見出し行

画像赤枠の2行の配列を作成します。

タイトルは既に変数[title]に格納できていますので、変数[array]を定義する時に、スプレッドシートの1行目の[見出し行][タイトル]を格納してしまいます。

  const doc = DocumentApp.openById('作成したマニュアルのドキュメントID');
  const title = doc.getName();
  const array = [['Style', 'No', 'Heading'],['TITLE','',title]];

Style列

A列の[Style]の配列を作成します。前回の記事では、見出しを取得する時は「NORMAL以外」という条件判定で良かったですが、スタイルは[HEADING2][HEADING3][HEADING4]をそれぞれ判別しなければなりません。

なので、for (const parag of paragraphs){の後に続く処理をSwitch文に書き換えます。

const paragraphs = doc.getBody().getParagraphs();

 for (const parag of paragraphs) {

    const style = parag.getHeading().toJSON();

    switch (style) {
      case 'HEADING2':
        array.push([style, '', '']);
        break;
      case 'HEADING3':
        array.push([style, '', '']);
        break;
      case 'HEADING4':
        array.push([style, '', ''’]);
        break;
      default:
    }

}

無事に2次元配列が作成できているようです。

Heading列

次は、C列の[Heading]を作成します。

変数[paragraphs]の各要素は.getText()メソッドで中身のテキスト(= Heading)を取得することができます。

const paragraphs = doc.getBody().getParagraphs();
console.log(paragraphs[0].getText());

なので、先ほどのSwitch文の中で[Heading]も一緒に格納してしまいましょう。

スタイルと見出しの間には空文字’’を挿入して、[Style, No, Heading]の配列と一致させています。

const paragraphs = doc.getBody().getParagraphs();

 for (const parag of paragraphs) {

    const style = parag.getHeading().toJSON();

    switch (style) {
      case 'HEADING2':
        array.push([style, '', parag.getText()]);
        break;
      case 'HEADING3':
        array.push([style, '', parag.getText()]);
        break;
      case 'HEADING4':
        array.push([style, '', parag.getText()]);
        break;
      default:
    }

  }

無事、作成できました。

コードのまとめとパーツ化

これまでに作成したコードをパーツ化(関数を作成する、とも言います。)します。関数を作成したら必ずドキュメンテーションコメントを付ける習慣を付けましょう。

戻り値には変数[title]と作成した2次元配列[array]を指定しました。

/**
* ドキュメントIDを渡すと2次元配列を返す関数
* 
* @param {string} ドキュメントトID
* @return  {array} [タイトル,2次元配列]
*/
function documentConverter(id){

  const doc = DocumentApp.openById(id);
  const title = doc.getName();
  const array = [['Style', 'No', 'Heading'],['TITLE','',title]];

  const paragraphs = doc.getBody().getParagraphs();

   for (const parag of paragraphs) {

    const style = parag.getHeading().toJSON();

    switch (style) {
      case 'HEADING2':
        array.push([style, '', parag.getText()]);
        break;
      case 'HEADING3':
        array.push([style, '', parag.getText()]);
        break;
      case 'HEADING4':
        array.push([style, '', parag.getText()]);
        break;
      default:
    }
  }

  return [title, array];
}
`

スプレッドシートを作成する為の2次元配列の準備はいったんここまでです。

スプレッドシートを作成する

SpreadsheetAppクラスの.creat(name)メソッドはファイル名に(name)を付けてマイドライブ直下にスプレッドシートを作成します。また、作成したスプレッドシートオブジェクトを戻り値とします。

Class SpreadsheetApp  |  Apps Script  |  Google for Developers

引数(name)には先ほど取得した変数[title]をそのまま使えますね。関数を新しく作成します。

また、作成した「スプレッドシートオブジェクト」と「スプレッドシートID」は後で使いますので、変数[ss]変数[SSID]に格納しておきます。

function createSS(title){
  const ss = SpreadsheetApp.create(title);
  const SSID = const SSID = ss.getId();
}

関数を呼び出す

先ほどパーツ化した関数documentConverter()と今作成した関数createSS()を呼び出す為の関数createAssessmentSheet()を作成します。

function createAssessmentSheet(){

  const array = documentConverter('作成したマニュアルのドキュメントID');
  createSS(array[0]);

}
createAssessmentSheet()を実行すると、マイドライブにスプレッドシートが新規作成されます。ドキュメントから取得した[タイトル]がファイル名になっていますね。

スプレッドシートを開くと中身はまだ空っぽです。

まとめ

さて、前半は「ドキュメントから2次元配列用の配列を作成」し、後半では「スプレッドシートを新規作成」しました。スプレッドシートのファイル名はドキュメントから自動で取得したものでしたね。ワクワクです。

次回は「フォルダの移動と2次元配列の流し込み」についてお届けします。お楽しみに!

このシリーズの目次

  1. [document][GAS]業務マニュアルとアセスメントシートを作ろう-その1-
  2. [document][GAS]業務マニュアルとアセスメントシートを作ろう-その2-
  3. [document][GAS]業務マニュアルとアセスメントシートを作ろう-その3-
  4. [document][GAS]業務マニュアルとアセスメントシートを作ろう-その4-
  5. [document][GAS]業務マニュアルとアセスメントシートを作ろう-その5-
  6. [document][GAS]業務マニュアルとアセスメントシートを作ろう-その6-
  7. [ライブラリ][GAS]CreateAssessmentSheet

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