LoginSignup
0
2

More than 1 year has passed since last update.

GASでよく使うスプレッドシート操作まとめ

Posted at

社内の業務効率化にお役立ちのGAS。
社内でちょっとしたお困りごとを相談される際によく使う内容をまとめました。

スプレッドシート内の特定のシートをPDF化して保存したい

createPdf
const folderId = ""; //保存したいフォルダーのId
const ssId = ""; //スプレッドシートのId
const shId = ""; //保存したいシートのId
const fileName = ""; //保存するファイル名

//下記コードでアクティブなスプレッドシートから取得もできる
//const ssId = SpreadsheetApp.getActiveSpreadsheet().getId();
//const shId = SpreadsheetApp.openById(ssId).getActiveSheet();

createPdf(folderId, ssId, shId, fileName);

function createPdf(folderId, ssId, shId, fileName){

  let baseUrl = "https://docs.google.com/spreadsheets/d/"
                + ssId
                + "/export?exportFormat=pdf&gid="
                + shId;
  
  let pdfOptions =  "&size=A4" //用紙サイズ (A4)
                + "&portrait=true"  //用紙の向き true: 縦向き / false: 横向き
                + "&fitw=true"  //ページ幅を用紙にフィットさせるか true: フィットさせる / false: 原寸大
                + "&top_margin=0.50" //上の余白
                + "&right_margin=0.20" //右の余白
                + "&bottom_margin=0.00" //下の余白
                + "&left_margin=0.20" //左の余白
                + "&horizontal_alignment=CENTER" //水平方向の位置
                + "&vertical_alignment=TOP" //垂直方向の位置
                + "&printtitle=false" //スプレッドシート名の表示有無
                + "&sheetnames=false" //シート名の表示有無
                + "&gridlines=false" //グリッドラインの表示有無
                + "&fzr=false" //固定行の表示有無
                + "&fzc=false" //固定列の表示有無;
  
  let url = baseUrl + pdfOptions;

  let token = ScriptApp.getOAuthToken();

  let options = {
    headers:{
      'Authorization':'Bearer ' + token
    }
  }

  let blob = UrlFetchApp.fetch(url, options).getBlob().setName(fileName);
  let folder = DriveApp.getFolderById(folderId);
}

1枚のシートをPDF化したいだけなのに、なぜかPDF化すると空白のペーパーが挟まって2枚のファイルになってしまう、という場合はスプレッドシート側で不要なセルを全て削除して、オプションで余白を調整する

let options部のheader内'Bearer 'は、末尾に半角スペースがひとつ入っているので注意!写経して勉強している方は見落としがち

PDFを結合したい

特定のフォルダ内にあるPDFファイルを全て結合して新しいファイルを作成する。

mergePdf
function mergePdf(){
  const folderId = ""; //結合したいPDFを保存しているフォルダ名

  let folder = DriveApp.getFolderById(folderId);
  let itemList = folder.getFiles();
  
  let mergeList = [];
  let pattern = /.*\.pdf$/; //pdfファイルのパターン

  while(itemList.hasNext()){ //pdfファイルのみ抽出
    let file = itemList.next();
    if(pattern.test(file.getName())){
      pdfList.publish(file);
    }
  }

mergeFile = mergePdfs(folder, "filename", pdfList);
}

スプレッドシート内のシートをシート名で検索したい

findSheetByName
const ssId = "" ;//スプレッドシートのファイルID
const sheetName = "" ;//検索したいシート名

function findSheetByName(ssId, sheetName){
  let ss = SPreadsheetApp.openById(ssId);
  let sheets = ss.getSheets(); //ファイル内のシートを取得
  
  for(var i = 0; i < sheets.length; i++){
    let sheet = sheets[i];
    if(sheet.getName()==sheetName){
      return sheet;
    }
  }
  return null;
}

該当するシートがあれば、そのシート名が返される。
なければ、nullが返ってくる。

随時更新します

0
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
0
2