Google スプレッドシートの先頭シートをPDF変換しGoogleドライブに保存すると同時にプリンターに印刷する。
実現方法の概要
- Google Apps Script の作成: スプレッドシートに紐付いたGASプロジェクトを作成します。
- スクリプトの記述: PDFとして出力するURLを生成し、PDFファイルを作成して指定のGoogleドライブフォルダに保存するスクリプトを記述します。
- スクリプトの手動実行: Apps Script エディタから直接スクリプトを実行します。
- Google Drive の保存先フォルダーを「クラウド対応自動印刷」の監視フォルダーに設定し自動印刷する。
具体的な手順とスクリプトの例
- スプレッドシートを開く: PDF化したいGoogleスプレッドシートを開きます。
- Apps Script エディタを開く:
- メニューバーから「拡張機能」>「Apps Script」を選択します。新しいタブでApps Scriptエディタが開きます。
- スクリプトの記述:
エディタに表示されているデフォルトのコード(myFunction
など)を削除し、以下のコードを貼り付けます。
// 「印刷」メニューを追加する
function onOpen() {
var ui = SpreadsheetApp.getUi();
ui.createMenu('印刷')
.addItem('現在のシートをPDFで保存', 'saveSheetAsPdfManually')
.addToUi();
}
function saveSheetAsPdfManually() {
// PDFを保存するGoogleドライブのフォルダIDを指定してください。
// 例: '12345abcdefg_YourFolderID_hijklmn'
// フォルダIDは、Googleドライブでフォルダを開いたときのURLに含まれる文字列です。
var folderId = 'あなたのフォルダIDをここに貼り付けてください'; // ★ここを編集★
var ss = SpreadsheetApp.getActiveSpreadsheet(); // アクティブなスプレッドシート
var sheet = ss.getActiveSheet(); // アクティブなシート
// 空白行を除外する。
// ★追加: データが入力されている最終行と最終列を取得し、印刷範囲を決定★
var lastRow = sheet.getLastRow();
var lastColumn = sheet.getLastColumn();
// データが全くない場合は、A1のみを範囲とするか、エラー処理を検討
if (lastRow === 0) {
Browser.msgBox('情報', 'シートにデータがありません。PDFは作成されません。', Browser.Buttons.OK);
return; // スクリプトを終了
}
var rangeToPrint = sheet.getRange(1, 1, lastRow, lastColumn).getA1Notation(); // 例: "A1:Z100"
// PDFファイル名を決定 (例: スプレッドシート名_シート名_日付.pdf)
var fileName = ss.getName() + '_' + sheet.getName() + '_' + Utilities.formatDate(new Date(), ss.getSpreadsheetTimeZone(), "yyyyMMdd_HHmmss") + '.pdf';
// スプレッドシート全体をPDFとして出力する場合
var url = 'https://docs.google.com/spreadsheets/d/' + ss.getId() + '/export?format=pdf' +
'&gid=' + sheet.getSheetId() + // 特定のシートのみをPDF化する場合
'&exportFormat=pdf&format=pdf' +
'&size=A4' + // 用紙サイズ (A4, Letter, Legalなど)
'&portrait=true' + // 縦向き (true:縦, false:横)
'&fitw=true' + // 幅をページに合わせる
'&sheetnames=false&printtitle=false&pagenumbers=false' + // ヘッダー・フッターの表示設定
'&gridlines=false' + // グリッド線の表示
'&fzr=false'; // 固定された行や列を印刷に含めるかどうか (true:含める, false:含めない)
try {
var response = UrlFetchApp.fetch(url, {
headers: {
Authorization: 'Bearer ' + ScriptApp.getOAuthToken()
}
});
var blob = response.getBlob().setName(fileName);
var folder = DriveApp.getFolderById(folderId);
folder.createFile(blob);
Logger.log('PDFが正常に作成されました: ' + fileName);
Browser.msgBox('PDF保存完了', 'PDFファイルがGoogleドライブに保存されました: ' + fileName, Browser.Buttons.OK);
} catch (e) {
Logger.log('PDFの作成中にエラーが発生しました: ' + e.toString());
Browser.msgBox('エラー', 'PDFの作成中にエラーが発生しました: ' + e.toString(), Browser.Buttons.OK);
}
} - フォルダIDの取得と設定:
- Googleドライブで、PDFを保存したいフォルダを開きます。
- ブラウザのURLバーに表示されているURLを確認します。URLは通常
https://drive.google.com/drive/folders/あなたのフォルダID
のようになっています。「あなたのフォルダID」の部分をコピーします。 - 上記のスクリプトの
var folderId = 'あなたのフォルダIDをここに貼り付けてください';
の部分を、コピーしたフォルダIDに置き換えます。
- スクリプトの保存:
- Apps Scriptエディタで、フロッピーディスクのアイコン(プロジェクトを保存)をクリックするか、「ファイル」>「保存」を選択します。プロジェクト名を求められたら、分かりやすい名前(例:
SpreadsheetToPdfManual
)を付けます。
- Apps Scriptエディタで、フロッピーディスクのアイコン(プロジェクトを保存)をクリックするか、「ファイル」>「保存」を選択します。プロジェクト名を求められたら、分かりやすい名前(例:
- スクリプトの手動実行:
- Apps Scriptエディタの上部にあるツールバーで、実行したい関数名(この場合は
saveSheetAsPdfManually
)が選択されていることを確認します。 - 実行ボタン(▶︎のアイコン)をクリックします。
- 初回実行時には、Googleアカウントの認証を求められます。指示に従ってアクセスを許可してください。これは、スクリプトがGoogleドライブにアクセスしたり、スプレッドシートを操作したりするために必要です。
- 実行が完了すると、スプレッドシート上に「PDF保存完了」というメッセージボックスが表示されます。
- Apps Scriptエディタの上部にあるツールバーで、実行したい関数名(この場合は
スクリプトの解説
function saveSheetAsPdfManually()
: 関数名。これはトリガーと紐付けないため、任意の分かりやすい名前にできます。var ss = SpreadsheetApp.getActiveSpreadsheet();
: 編集イベントからスプレッドシートを取得する代わりに、現在開いているアクティブなスプレッドシートを取得します。Browser.msgBox(...)
: スクリプトの実行結果をユーザーに通知するために、メッセージボックスを表示する行を追加します。
補足
- 特定のシートをPDF化したい場合: 上記のスクリプトは、実行時にアクティブになっているシートをPDF化します。もし、常に特定のシート(例: 「集計」シート)をPDF化したい場合は、
var sheet = ss.getActiveSheet();
の行をvar sheet = ss.getSheetByName('シート名');
のように変更し、'シート名'
の部分をPDF化したいシートの名前に置き換えてください。 - メニューから実行する: より便利にするために、スプレッドシートのカスタムメニューにこのスクリプトを追加しています。
- スクリプトに以下の関数を追加しています。
function onOpen() { var ui = SpreadsheetApp.getUi(); ui.createMenu('印刷') .addItem('現在のシートをPDFで保存', 'saveSheetAsPdfManually') .addToUi(); }
- この
onOpen()
関数は、スプレッドシートを開いたときに自動的に実行され、「PDF出力」というカスタムメニューが追加されます。 onOpen()
関数を追加したら、Apps Script エディタでonOpen
を選択して一度実行してください(または、スプレッドシートを一度閉じて開き直してください)。- これで、スプレッドシートのメニューバーに「印刷」という項目が表示され、そこから「現在のシートをPDFで保存する」スクリプトを実行できるようになります。
- スクリプトに以下の関数を追加しています。
- これで、Google のマイドライブ\自動印刷 フォルダーに保存されたPDFファイルは「クラウド対応自動印刷」により自動的に印刷されます。