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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google ドライブ

Google ドライブは、Google社が提供するオンラインストレージサービス。オンラインストレージ上に、画像や動画、テキスト、Word/PDFのファイルなどさまざまなファイル保存することができます。また、他のユーザーと共有することも可能です。

Google Apps Script

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

Q&A

解決済

1回答

1147閲覧

スプレッドシートの特定行(可変)を非表示にしてPDF化したいが、非表示が効かない

coool

総合スコア29

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google ドライブ

Google ドライブは、Google社が提供するオンラインストレージサービス。オンラインストレージ上に、画像や動画、テキスト、Word/PDFのファイルなどさまざまなファイル保存することができます。また、他のユーザーと共有することも可能です。

Google Apps Script

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

0グッド

0クリップ

投稿2022/05/27 07:16

実現したいこと

基本的な質問で恐縮ですが、お力をお借りできれば嬉しいです。。

ある特定の可変最終行から下の空白行(今回の例では10から200行まで)を非表示にして、PDFとしてGoogleDriveのフォルダに保存したいと考えています。

発生している問題・エラーメッセージ

hideRowsで一部行を非表示に設定しているにも関わらず、非表示にならずにそのままPDF化されてしまいます。

該当のソースコード

GAS

1function sendmail(){ 2//スプレッドシートは全体公開済 3var ssurl ="https://docs.google.com/spreadsheets/d/19RgDljf6rcNwd9GGvTawQMI3FHLMlVlmVJrwemoy_-g/edit#gid=0";  4 var sh = SpreadsheetApp.openByUrl(ssurl); 5 var sheet = sh.getSheetByName("TEST"); 6 var today = sheet.getRange("B2").getValue(); 7 var today = Utilities.formatDate(new Date(today), 'JST', "yyyy/MM/dd"); 8 var lastRow = sheet.getRange("B5").getNextDataCell(SpreadsheetApp.Direction.DOWN).getRow(); 9 var name = sheet.getRange("F2").getValue(); 10 11 console.log(lastRow) 12 13 sheet.hideRows(lastRow+1,200-lastRow); 14 15 exportSheetToPDF(sh,name,today); 16 17 sheet.showRows(lastRow+1,200-lastRow); 18 19} 20 21 22 23function exportSheetToPDF(sh,name,today){ 24 25 // PDF出力するシートを指定 26 const ssId = "19RgDljf6rcNwd9GGvTawQMI3FHLMlVlmVJrwemoy_-g"; 27 const sheetId = sh.getSheetByName("TEST").getSheetId(); 28 29 30 31 // スプレッドシートをPDF出力するためのURL 32 const url = 'https://docs.google.com/spreadsheets/d/' + ssId + '/export?' 33 34 // PDF出力のオプションを設定 35 36 const options = 'exportFormat=pdf&format=pdf' 37 + '&gid=' + sheetId //PDFにするシートの「シートID」 38 + '&portrait=true' //true(縦) or false(横) 39 + '&size=A4' //印刷サイズ 40 + '&fitw=true' //true(幅を用紙に合わせる) or false(原寸大) 41 + '&gridlines=false' //グリッドラインの表示有無 42 + '&range=A1%3AF200' //★POINT★セル範囲を指定 // %3A はコロン(:)を表す 43 + '&top_margin=0.3' //TOPの調整 44 + '&bottom_margin=0.1' //BOTTOMの調整 45 + '&left_margin=0.25' //左側の調整 46 + '&right_margin=0.25' //右側の調整 47 48 49 const requestUrl = url + options ; 50 51 //API使用のためのOAuth認証 52 const token = ScriptApp.getOAuthToken(); 53 54 const params = { 55 'headers' : {'Authorization':'Bearer ' + token}, 56 'muteHttpExceptions' : true 57 }; 58 59 const response = UrlFetchApp.fetch(requestUrl, params); 60 61 //Blobオブジェクトを作成 62 const blob = response.getBlob(); 63 blob.setName( "【テスト】" +today+"_"+ name +'.pdf'); //PDFファイル名を設定 64 65 //指定のフォルダにPDFファイルを作成 66 const folder = DriveApp.getFolderById("任意のフォルダID"); 67 folder.createFile(blob) 68 var staySecond = 2; 69 Utilities.sleep(staySecond * 1000); 70}

試したこと

sheet.hideRows(lastRow+1,200-lastRow);
の直後にスクリプトを強制停止すると、はじめて非表示がスプレッドシートに反映されるようです。

可変最終行から下を非表示にし、PDF化するという数式は以前自分で組んだことがありますが、そちらは問題なく機能しております。
まったく同じとはいかなくとも、似たような式で組んでいるこちらがうまくいかない理由が分からず、困惑しています。

基本的な内容で大変申し訳ありませんが、何卒よろしくお願いいたします!

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

SpreadsheetApp.flush();

を PDF化関数の前に追記してみましょう。

参考
https://yukoagena.com/gas-flush/

投稿2022/05/28 00:45

sawa

総合スコア3002

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

coool

2022/05/29 23:49

sawa様 確認が遅くなり申し訳ありません。。 ありがとうございます!!できました! 保留中のすべてのスプレッドシートの変更を適用するためのAPIなんですね…… 知らなかったので、本当に助かりました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問