どうも。つじけ(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次元配列の流し込み」についてお届けします。お楽しみに!
Comments