1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

GASで便利なスクリプト集

Last updated at Posted at 2023-05-10

スプレッドシートをPDF化するスクリプト

// 関数を実行するタブをメニューバーに追加
function onOpen() {
  var ui = SpreadsheetApp.getUi();
  var menu = ui.createMenu('効率化');
  menu.addItem('アクティブなスプレッドシートのPDF化', 'createPdf');
  menu.addToUi();
}

/**
 * 現在開いているシートよりPDFを出力
 */
function createPdf() {

  // アクティブなスプレッドシートIDを取得
  const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  const spreadsheetId = spreadsheet.getId();

  // アクティブなシートID
  const gid = spreadsheet.getActiveSheet().getSheetId();

  // スプレッドシートのあるフォルダ
  const folder = DriveApp.getFileById(spreadsheetId).getParents().next();

  // シート名を取得
  const name = spreadsheet.getName().replace('.xlsm', '');

  // 出力するPDFファイル名
  const fileName = `${name}_${Utilities.formatDate(new Date(), 'JST', 'yyyyMMdd')}.pdf`;
  
  // 出力オプション
  var opts = {
    'exportFormat' : 'pdf',    // ファイル形式の指定 (pdf / csv / xls / xlsx)
    'format'       : 'pdf',    // ファイル形式の指定 (pdf / csv / xls / xlsx)
    'size'         : 'A4',     // 用紙サイズの指定 (legal / letter / A4)
    'portrait'     : 'true',   // 用紙の向き (true : 縦向き / false : 横向き)
    'fitw'         : 'true',   // 幅を用紙に合わせるか (true : 合わせる / false : 合わせない)
    'sheetnames'   : 'false',  // シート名をPDF上部に表示するか (true : 表示する / false : 表示しない)
    'printtitle'   : 'false',  // スプレッドシート名をPDF上部に表示するか (true : 表示する / false : 表示しない)
    'pagenumbers'  : 'false',  // ページ番号の有無 (true : 表示する / false : 表示しない)
    'gridlines'    : 'false',  // グリッドラインの表示有無 (true : 表示する / false : 表示しない)
    'fzr'          : 'true',   // 固定行の表示有無 (true : 表示する / false : 表示しない)
    'top_margin'   : 0.8,
    'bottom_margin': 0.8,
    'left_margin'  : 0.7,
    'right_margin' : 0.7,
  };

  let urlExt = [];
  
  // オプション名と値を「=」で繋げて配列に格納
  for( optName in opts ){
    urlExt.push( optName + '=' + opts[optName] );
  }

  // 各要素を「&」で繋げる
  const options = urlExt.join('&');

  // API使用のためのOAuth認証用トークン
  var token = ScriptApp.getOAuthToken();

  // URLの組み立て
  const url = `https://docs.google.com/spreadsheets/d/${spreadsheetId}/export?gid=${gid}&${options}`;

  // PDF作成
  var response = UrlFetchApp.fetch(
    url, {
      headers: {'Authorization': 'Bearer ' +  token}
    }
  );

  // Blob を作成する
  var blob = response.getBlob().setName(fileName);

  // PDFを指定したフォルダに保存
  folder.createFile(blob);
}

スプレッドシートにデータを書き込む関数

/*
 * sheet:スプレッドシート
 * data:連想配列データ(項目名:回答)
 **/
function setDataToSheet(sheet, data) {
  let lastrow = sheet.getLastRow();
  if (lastrow == 0) {
    //記入先シートにデータが無い場合は、1行目の項目(key)をセット
    sheet.appendRow(Object.keys(data));
    lastrow++;
  }
  const firstRowDatas = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues()[0];
  let entries = Object.entries(data);

  //データのエントリーを1つずつ精査
  for (entrie of entries) {
    //A1からデータがある最終列までの値を取得
    for (firstRowDataPos in firstRowDatas) {
      const itemName = removespace(firstRowDatas[firstRowDataPos]);
      //項目名と一致するエントリーの回答をセットする。
      if (itemName == entrie[0]) {
        //入力先のセルを文字列表示させる。
        sheet.getRange(lastrow + 1, parseInt(firstRowDataPos) + 1).setNumberFormat('@');
        //回答をセルにセット
        sheet.getRange(lastrow + 1, parseInt(firstRowDataPos) + 1).setValue(entrie[1]);
        break;
      }
    }
  }
}
1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?