質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.35%

  • Google Apps Script

    1475questions

    Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

  • PDF

    323questions

    PDF(Portable Document Format)とはISOによって国際標準として制定されている電子ドキュメント用の拡張子です。

スプレッドシートで範囲を選択したセルだけPDF化する方法

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 1,639

ran_net

score 11

前提・実現したいこと

スプレッドシート上で、セルの範囲を指定した部分だけをPDF化し保存したいです。

今の段階でできていること

  • シート全体をPDF化してGoogleドライブへ保存
  • データ値が入っているセルの範囲だけを選択した状態にする

今の状態は、テキストが入っているセルの範囲の選択はできているものの
PDF化を実行させても、選択されたセルの範囲ではなくシート全体がPDF化してしまいます。

該当のソースコード

function chosepdf(){

//セルの範囲指定をする
var ss = SpreadsheetApp.getActiveSpreadsheet();
// そのスプレッドシートにある最初のシートを取得
var sheet = ss.getSheets()[0];
//データ値を持つセルの範囲を指定(空白も含まれる)
var range = SpreadsheetApp.getActiveSheet().getDataRange();
// そのシートにある A1:D10 のセル範囲を取得
//var range = sheet.getRange("B4:J61");
// そのセル範囲をアクティブに設定
range.activate();

}

function myFunction(){

   // マイドライブ直下に保存
   var root= DriveApp.getRootFolder();
   var folderid = root.getId();


  // 現在開いているスプレッドシートを取得
  var ss = SpreadsheetApp.getActiveSpreadsheet();
 // 現在開いているスプレッドシートのIDを取得
  var ssid = ss.getId();
   // 現在開いているスプレッドシートのシートIDを取得
  var sheetid = ss.getActiveSheet().getSheetId();
  var range = SpreadsheetApp.getActiveSheet().getDataRange();
// そのセル範囲をアクティブに設定 
  range.activate();

 // PDF作成関数
  createPDF( folderid, ssid, sheetid,customer_name + "_"+ timestamp ); 
}


 var ss = SpreadsheetApp.getActiveSpreadsheet();
//ファイル名になるセルの位置
 var customer_name = ss.getRange("A1").getValue();

// PDF作成関数
//引数は(folderid:保存先フォルダID, ssid:PDF化するスプレッドシートID, sheetid:PDF化するシートID, filename:PDFの名前)
function createPDF(folderid, ssid, sheetid, filename){

  //PDFファイルの保存先となるフォルダをフォルダIDで指定
  var folder = DriveApp.getFolderById(folderid);


  // スプレッドシートをPDFにエクスポートするためのURL。このURLに色々なオプションを付けてPDFを作成
  var url = "https://docs.google.com/spreadsheets/d/SSID/export?".replace("SSID", ssid);

  // PDF作成のオプションを指定
  var opts = {
    exportFormat: "pdf",    // ファイル形式の指定 pdf / csv / xls / xlsx
    format:       "pdf",    // ファイル形式の指定 pdf / csv / xls / xlsx
    size:         "A4",     // 用紙サイズの指定 legal / letter / A4
    portrait:     "false",   // true → 縦向き、false → 横向き
    fitw:         "true",   // 幅を用紙に合わせるか
    sheetnames:   "false",  // シート名をPDF上部に表示するか
    printtitle:   "false",  // スプレッドシート名をPDF上部に表示するか
    pagenumbers:  "false",  // ページ番号の有無
    gridlines:    "false",  // グリッドラインの表示有無
    fzr:          "false",  // 固定行の表示有無
    gid:          sheetid   // シートIDを指定 sheetidは引数で取得
  };

  var url_ext = [];

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

  // url_extの各要素を「&」で繋げる
  var options = url_ext.join("&");


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

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

    // 
    var blob = response.getBlob().setName(filename + '.pdf');

  //}

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

}

 // タイムスタンプを返す関数
  function getTimestamp () {
    var now = new Date();
    var year = now.getYear();
    var month = now.getMonth() + 1;
    var day = now.getDate();
    var hour = now.getHours();
    var min = now.getMinutes();
    // var sec = now.getSeconds();
    // return year + month + day + "_" + hour + min;

 }

プログラミング初心者で勉強中です。

セルの選択とPDF化がバラバラの動作になっている状態ですので
PDF化の際の、範囲の指定方法があれば教えていただきたいです。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • papinianus

    2018/12/14 17:11

    このurlによるexportは、指定できるパラメータが明示的な文書になっていないのですが、多分できないように思います

    キャンセル

  • ran_net

    2018/12/14 17:27

    上記にあるurlによるexportでは、PDFにできないということでしょうか?
    該当のソースコードで実行すると、ドライブにPDFはちゃんと保存されているのですが・・
    理解力がなくてすみません。。。。

    キャンセル

  • papinianus

    2018/12/14 18:00

    誤解を招いてもうしわけないです。記載のものは動作すると思います。シート単位では。ただ、領域選択みたいなパラメータを上手くやればできるかもしれないし、できないかもしれない、みたいなことについては、仕様をgoogleが開示していないので、今回のものはできないだろう、という意味です。

    キャンセル

  • ran_net

    2018/12/17 09:08

    そうなのですね・・
    Googleが使用を開示してないとなると、どうしようもないですね。
    ご意見ありがとうございました。

    キャンセル

回答 1

checkベストアンサー

+2

アイデアとして、選択範囲を新規に作成したシートにコピーし、その新規シートのみをPDF化してみてはどうでしょうか?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/12/14 18:31

    コピーしたあとに一度SpreadsheetApp.flush()しないとコピー後のデータが取れないと思いますので注意してください

    キャンセル

  • 2018/12/17 09:09

    まだ、コピーする方法を見出せてませんが、SpreadsheetApp.flush()忘れないようにします。
    ありがとうございます!

    キャンセル

  • 2018/12/17 09:38

    新規にシートを作る方法、コピーする方法などわからないことがあったら、具体的に質問すると良いと思います。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.35%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • Google Apps Script

    1475questions

    Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

  • PDF

    323questions

    PDF(Portable Document Format)とはISOによって国際標準として制定されている電子ドキュメント用の拡張子です。