見出し画像

#100 複数のGoogle スプレッドシートを一度に印刷する方法


職場で見かけたプログラム

今回のプログラムは、職場で案内されていた「複数のGoogle スプレッドシートを一度に印刷する方法」という以下の GAS によるプログラム。

const ss = SpreadsheetApp.getActiveSpreadsheet();
const files = DriveApp.getFolderById("対象のフォルダIDを入力").getFiles();
for (let i = 0; files.hasNext(); i++) {
  let file = files.next();
  let mimetype = file.getMimeType();
  if (mimetype.match(/spreadsheet/)) {
    let ss_copy = SpreadsheetApp.openById(file.getId());
    let sheets_copy = ss_copy.getSheets();
    for (let j = 0; j < sheets_copy.length; j++) {
      sheets_copy[j].copyTo(ss);
    }
  }
}

スクリプトエディタを開いたら、初期状態で作成されている 

function Myfunction(){

}

の中にコピペして使うもののようでした。このプログラムを用いて、指定したフォルダ内のスプレッドシート内のシートを集約し、「印刷」の項目で [ワークブック] を選択すれば、まとめて印刷できるというものでした。

気になったところ

このプログラムは、目的としている「複数のGoogle スプレッドシートを一度に印刷する方法」というニーズは満たしていると思うのですが、以下のような点が気になります。

  1. クラスの課題をまとめて印刷しようとした場合、集約されるスプレッドシートのシート名はすべて同じになってしまい、連番だらけになってしまう。

  2. 結合される順序や対象が制御できない。
    ・どんな順序で集約されるのかがわからない。
    ・集約したくないシートがある。

  3. 集約するスプレッドシート(プログラムが埋め込まれたシート)が、指定されたフォルダに保存されていた場合、その時点の内容も重複してコピーされてしまう。

  4. スプレッドシートが保存されているフォルダの ID を、プログラム中で指定している。また、スクリプトエディタから処理を実行しなければならない。 ※プログラムが苦手な人には抵抗を感じてしまうのでは?

いずれも、そういった挙動をすることがわかっていれば対応できるのかもしれませんが、その辺りを意識しなくても使えるようにした方が、もっと使ってもらえるのではないか?と思いました。

作成したプログラム

作成した GAS のプログラムは、下図のような Google スプレッドシートに埋め込んであります。

作成した Google スプレッドシート+ GAS

このスプレッドシートは、以下 URL にアクセスして、画面右上の「テンプレートを使用」ボタンを押すと、自身の Google にコピーを作成できます。

プログラムをはじめて実行する際には、アカウントによる確認作業が必要になります。詳しくは以下の投稿をご覧ください。

操作手順

  1. セル B1 に結合する Google スプレッドシートが保存されているフォルダの「フォルダ ID」を設定します。
    「フォルダ ID」については、↓ の URL での説明を参照ください。
    https://blog.take-it-easy.site/gas/how-to-check-folder-id/

  2. 「一覧を作成」ボタンを押して、指定したフォルダ内のスプレッドシート内にあるシートの一覧を作成します。

  3. 前項で一覧になったシートの内、集約する必要のない行は削除し、意図した順序に並び替えます。

  4. セル F1 ~ I1 で集約した際のシート名を選択します。チェックボックスを用いているので複数選択可能ですが、下図の大きな選択肢が優先されます。 ※どれも選択されていない場合には ① が選択されているとします。
    ①:ファイル名
    ②:シート名
    ③:オーナー名
    ④:②シート名+③オーナー名

  5. 集約するシートが整理できたら、「リストから集約」ボタンを押します。

上記のような操作で、プログラミングが苦手な人でも GAS のプログラムを操作することなく、前述の権限確認さえ行えれば、操作できます。

注意事項

このプログラムでは、前述の 4. で説明しているように、集約した際のシート名を選択できるようになっています。しかしながら、選択肢によっては集約したときに同じシート名になってしまう場合があります。

今回のプログラムでは、集約した際のシート名が重複する場合にはエラーとなりそこで処理が終了してしまいます。以下のように、選択肢を変えて、再実行してください。

  1. シート名が重複しない選択肢を選び直す。

  2. 「余分なシート 削除」ボタンを押して、前回の処理で中途半端になったシートをすべて削除する。 ※シート「管理」以外を削除します。

  3. 再度「リストから集約」ボタンを押して集約する。

最後に

今回のプログラムは、Google Classroom で配布・回収した Google スプレッドシートの課題を、集約して 1つのスプレッドシートにまとめるプログラムです。そもそもの質問をした人は、「まとめて印刷したい」という要望だったものの、このプログラムで 1つのスプレッドシートに集約できれば、印刷しなくても大丈夫かもしれません。
こういったところから、デジタルらしい使い方がはじまっていけばいいな、と思います。

最後に、お決まりのフレーズなどを書いておきます。

  • 一応の動作確認は行っているものの、不慮のトラブルによって損害等が生じても、責任はとれませんので予めご了承ください。

  • コメントを含めても 160行くらいのスクリプトであり、実行に際して目的外の場所への書き出しや収集などは行っていません。

  • 特別なエラー処理は行っていないので、意図しないケースでエラーが発生してしまうかもしれません。どうにもならない場合には、ご連絡ください。

わたし自身にしてみると、このような「スクリプトを作ること」が目的になっているような感じですが、このスクリプトが何かの役に立てば幸いです。
「スキ ♡」を押してもらえると、このようなプログラム作成の励みになります。😍

この記事が気に入ったらサポートをしてみませんか?