どうも。つじけ(tsujikenzo)です。このシリーズでは「業務マニュアルとアセスメントシートを(同時に)作ろう」についてお送りしています。全7回の予定で、今日は第4回目です。
前回のおさらい
前回は「マニュアルの見出しスタイルを抽出しよう」ということでDocument APIのParagraphクラスを操作して、[TITLE]や[HEADING2]などの[見出しスタイル]を取得できました。
今回は、ドキュメントからスプレッドシートを新規作成したいと思います。前半は「ドキュメントから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)を付けてマイドライブ直下にスプレッドシートを作成します。また、作成したスプレッドシートオブジェクトを戻り値とします。
引数(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次元配列の流し込み」についてお届けします。お楽しみに!