[ライブラリ][GAS]CreateAssessmentSheet

GAS

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

前回のおさらい

スタンドアロンスクリプトにコードを作成してきました。説明は割愛しましたが、「CreateAssessmentSheet」としてライブラリ化も行いました。

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

最終回は「CreateAssessmentSheet」のマニュアルをご紹介させていただきます。

Overview

CreateAssessmentSheet 1.0

(c) 2020-2021 Kenzo Tsuji all rights reserved

GitHub Repository

coming soon

Introduction

This library creates a spreadsheet that lists the title and paragraphs in a Google Docs.

Sample Document

Create Spreadsheet

You can specify a folder to save the spreadsheet.Pass the Google drive folder ID as an argument.

Script ID

Script ID : 1Dd9d99GQIUy0z130EGUPDj5udlFYDqnYwQRLU5qAAW_IoZ8nJ_kZZVuD

Methods

.createcreateAssessmentSheet(Document ID, Folder ID)

@param{string} Document ID
@param{string} Folder ID
@Returns {object} Spreadsheet Object

const docId = 'Document ID';
const folderId = 'Folder ID';

CreateAssessmentSheet.createAssessmentSheet(docId , folderId);

README File

coming soon

Sources

 /**
* ドキュメントから新規スプレッドシートを作成する
* 
* @param {string} ドキュメントID
* @param {string} スプレッドシートの保存先フォルダID

*/
function createAssessmentSheet(docId, folderId){

  //引数が無い時は下記2行をコメントインしてください
  //docId = 'マニュアルのドキュメントID';
  //folderId = '保存先のドライブID';

  const array = documentConverter_(docId);
  cosnt ss = createSS_(array[0], array[1], folderId)

 let [arg1, arg2, arg3, arg4, arg5] = ['#073763','#000000','#000000','#ffffff','#f3f3f3'];
  const backGroundColors= setConditionalFormatRule_(ss, arg1, arg2, arg3, arg4, arg5);

  [arg1, arg2, arg3, arg4, arg5] = ['#ffffff','#ffffff','#ffffff','#000000','#000000'];
  const fontColors = setConditionalFormatRule_(ss, arg1, arg2, arg3, arg4, arg5);

  [arg1, arg2, arg3, arg4, arg5] = ['bold','normal','normal','normal','normal'];
  const fontWeights = setConditionalFormatRule_(ss, arg1, arg2, arg3, arg4, arg5);

  [arg1, arg2, arg3, arg4, arg5] = ['left','left','left','left','left'];
  const alignments = setConditionalFormatRule_(ss, arg1, arg2, arg3, arg4, arg5);

  ss.getActiveSheet().getRange(1, 1, backGroundColors.length, backGroundColors[0].length)
    .setBackgrounds(backGroundColors)
    .setFontColors(fontColors)
    .setFontWeights(fontWeights)
    .setHorizontalAlignments(alignments);

  return ss;

}



/**
* ドキュメントIDを渡すと2次元配列を返す
* 
* @param {string} ドキュメントトID
* @return  {array} [title,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次元配列から新規スプレッドシートを作成する
* 
* @param {string} ドキュメントのタイトル
* @param {array} ドキュメントの2次元配列
* @param {string} 保存先のフォルダID

* @return  {object} 新規作成したスプレッドシートオブジェクト
*/
function createSS_(title, array, folderId){

const ss  = SpreadsheetApp.create(title);
const SSID = ss.getId();
const file = DriveApp.getFileById(SSID);

const folder = DriveApp.getFolderById(folderId);

file.moveTo(folder);

ss.getActiveSheet().getRange(1,1,array.length, array[0].length).setValues(array);

//[No]列を補完する
array = setParagraphNumbers_(SSID);
ss.getActiveSheet().getRange(1,1,array.length, array[0].length).setValues(array);

return ss;
}



/**
* スプレッドシートオブジェクトを渡すとNoを補完した2次元配列を返す
* 
* @param {object}  スプレッドシート
* @return  {array} Noを補完した2次元配列
*/
function setParagraphNumbers_(ss) {

  let titles = ss.getActiveSheet().getDataRange().getValues();


//empty array
  const addNums = [];

  //count var
  let countHeading2 = 0;
  let countHeading3 = 0;
  let countHeading4 = 0;

  //def flag
  let flag1 = false;
  let flag2 = false;
  let flag3 = false;
  let flag4 = false;

  for (const title of titles) {

    //set a flag on
    switch (title[0]) {
      case 'TITLE':
        flag1 = true;
        break;
      case 'HEADING2':
        if (flag2 === false && flag3 === false && flag4 === false) flag2 = true;
        if (flag2 && flag3 && flag4 === false) {
          countHeading3 = 0;
          flag3 = false;
        }
        if (flag2 && flag3 && flag4) {
          countHeading3 = 0;
          countHeading4 = 0;
          flag3 = false;
          flag4 = false;
        }
        break;
      case 'HEADING3':
        if (flag2 && flag3 && flag4) {
          countHeading4 = 0;
          flag4 = false;
        }
        flag3 = true;
        break;
      case 'HEADING4':
        flag4 = true;
        break;
    }

    if (flag1) addNums.push(['1']);
    flag1 = false;

    //append nums
    if (flag2 && flag3 === false && flag4 === false) {
      countHeading2++;
      addNums.push([`1.${countHeading2}`]);
    }

    if (flag2 && flag3 && flag4 === false) {
      countHeading3++;
      addNums.push([`1.${countHeading2}.${countHeading3}`]);
    }

    if (flag2 && flag3 && flag4 === true) {
      countHeading4++;
      addNums.push([`1.${countHeading2}.${countHeading3}.${countHeading4}`]);
    }

  }

  titles.shift();
   titles = titles.map((element, index) => [element[0], addNums[index][0], element[2]]);
   titles.unshift(['Style', 'No', 'Heading']); 

 return titles;

}



/**
* セルの書式設定の要素を持つ2次元配列を返す
* 
* @param {object} スプレッドシートオブジェクト
* @param {string} Styleの書式設定
* @param {string} TITLEの書式設定
* @param {string} HEADING2の書式設定
* @param {string} HEADING3の書式設定
* @param {string} HEADING4の書式設定
* @return  {array} 2次元配列
*/
function setConditionalFormatRule_(ss, arg1, arg2, arg3,arg4, arg5){

  const values = ss.getActiveSheet().getDataRange().getValues();

  let copy = '';
  const rules = values.map(record => record.map(element => {

    switch (record[0]) {
      case 'Style':
        copy = arg1;
        break;
      case 'TITLE':
        copy = arg2;
        break;
      case 'HEADING2':
        copy = arg3;
        break;
      case 'HEADING3':
        copy = arg4;
        break;
      case 'HEADING4':
        copy = arg5;
        break;
    }

    return copy;

  })
  );

  return rules;

}

まとめ

以上で、[CreateAssessmentSheet ver1.0]のマニュアルになります。ライブラリのバージョンは常に最新版をお使いください。今後とも末永くよろしくお願いいたします。

このシリーズの目次

  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をコピーしました