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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Google Apps Script

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

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

Q&A

0回答

1100閲覧

mime typeと異なるファイルが作成される

Kodanosuke

総合スコア42

Google Apps Script

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

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

0グッド

0クリップ

投稿2020/10/24 01:11

前提・実現したいこと

下記のコードを実行してスプレッドシートを作成したいが,ドキュメントが作成される.
スプレッドシートはcreateSSheetという関数内で実行しています.
mime typeもあっているはずですがなぜなのでしょうか・
下記サイトを参考にしています.
https://qiita.com/tanaike/items/8c82392ef2749892061c

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

エラーは特になし

該当のソースコード

GooogleAppScript

1function main() { 2 3 const ctrsheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet() 4 const folderID = ctrsheet.getRange("A2").getValue() 5 try{ 6 var pastsheet = ctrsheet.getRange(7, 1, ctrsheet.getLastRow()-6, 1).getValues().toString().split(",") 7 var pastsheetID = ctrsheet.getRange(7, 2, ctrsheet.getLastRow()-6, 1).getValues().toString().split(",") 8 9 }catch(e){ 10 var pastsheet = ctrsheet.getRange(7, 1, ctrsheet.getLastRow()-5, 1).getValues().toString().split(",") 11 var pastsheetID = ctrsheet.getRange(7, 2, ctrsheet.getLastRow()-5, 1).getValues().toString().split(",") 12 13 } 14 15 const pdfTo = ctrsheet.getRange("E2").getValue() 16 17 const today = new Date() 18 //const todayDate = today.getDate() 19 const todayDate = 1 20 21 const ssheetName = Utilities.formatDate(today, "JST", "yyyyMM") 22 23 //毎月1日に当該月のスプレッドシートを作成 24 25 if(pastsheet.includes(ssheetName) == true){ 26 //過去に同名のスプレッドシートを作ったことがあるため作成しない 27 var flag = -1 28 29 }else if (pastsheet.includes(ssheetName) == false){ 30 //過去に同名のスプレッドシートを作ったことがないため作成する 31 var flag = 1 32 33 } 34 35 //毎日当該月のスプレッドシートに日付のシートを作成 36 if(todayDate == 1 && flag == 1){ 37 const datasheet = createSSheet(folderID,ssheetName) 38 const datasheetID = datasheet.id 39 var row = ctrsheet.getLastRow()+1 40 ctrsheet.getRange(row, 1, 1, 2).setValues([[ssheetName,datasheetID]]) 41 var tgtssheetID = datasheetID 42 43 } 44 45 46 Logger.log(todayDate == -1) 47 if (flag == -1 ){ 48 49 var tgtssheetID = pastsheetID[pastsheetID.length-1] 50 51 } 52 53 const tgtssheet = SpreadsheetApp.openById(tgtssheetID) 54 const tgtsheet = tgtssheet.insertSheet(Utilities.formatDate(today, "JST", "MM/dd")) 55 const tgtsheetID = tgtsheet.id 56 57 const pdf = createPDF(folderID, tgtssheetID, tgtsheetID, ssheetName) 58 const pdfName = Utilities.formatDate(today, "JST", "yyyy/MM/dd") 59 60 //Gmail似て送信する 61 //GmailApp.sendEmail(pdfTo,ssheetName) 62 63 64 Logger.log("stop") 65 66} 67 68function createSSheet(fID,ssheetname){ 69 70 const datasheet = Drive.Files.insert({ 71 "title": ssheetname, 72 "mimeType": "application/vnd.google-apps.spreadsheet", 73 "parents": [{"id": fID}] 74 }); 75 76 return datasheet 77} 78 79// PDF作成関数 引数は(folderid:保存先フォルダID, ssid:PDF化するスプレッドシートID, sheetid:PDF化するシートID, filename:PDFの名前) 80function createPDF(folderid, ssid, sheetid, filename) { 81 82 // スプレッドシートをPDFにエクスポートするためのURL。このURLに色々なオプションを付けてPDFを作成 83 var url = "https://docs.google.com/spreadsheets/d/SSID/export?".replace("SSID", ssid); 84 85 // 範囲をURL風に変換 86 var printRange = encodeURIComponent("A1:BE45"); 87 88 // PDF作成のオプションを指定 89 var opts = { 90 exportFormat: "pdf", // ファイル形式の指定 pdf / csv / xls / xlsx 91 format: "pdf", // ファイル形式の指定 pdf / csv / xls / xlsx 92 size: "B5", // 用紙サイズの指定 legal / letter / A4 など 93 portrait: "false", // true → 縦向き、false → 横向き 94 fitw: "true", // ページをフィットさせるかどうか。trueでフィット、falseで原寸大。 95 sheetnames: "false", // シート名をPDF上部に表示するか 96 printtitle: "false", // スプレッドシート名をPDF上部に表示するか 97 pagenumbers: "false", // ページ番号の有無 98 gridlines: "false", // グリッドラインの表示有無 99 fzr: "false", // 固定行の表示有無 100 gid: sheetid, // シートIDを指定 sheetidは引数で取得 101 range: printRange, // 範囲 102 top_margin: "0", // 上余白 103 bottom_margin: "0", // 下余白 104 left_margin: "0", // 左余白 105 right_margin: "0", // 右余白 106 scale: "3" // なんか幅に合わせたり高さに合わせたりできるらしい。 107 }; 108 109 var url_ext = []; 110 111 // 上記のoptsのオプション名と値を「=」で繋げて配列url_extに格納 112 for (optName in opts) { 113 url_ext.push(optName + "=" + opts[optName]); 114 } 115 116 // url_extの各要素を「&」で繋げる 117 var options = url_ext.join("&"); 118 // API使用のためのOAuth認証 119 var token = ScriptApp.getOAuthToken(); 120 // PDFファイルの保存先となるフォルダをフォルダIDで指定 121 var folder = DriveApp.getFolderById(folderid); 122 SpreadsheetApp.flush(); 123 // PDF作成 124 var blob = UrlFetchApp.fetch(url + options, { headers: { 'Authorization': 'Bearer ' + token }, muteHttpExceptions: true }).getBlob().setName(filename); 125 // 存在するなら削除 126 delExistsFile(folder, filename); 127 // 保存 128 var newFile = folder.createFile(blob); 129 // 共有設定をする:「リンクを知っている人」が「閲覧可能」 130 newFile.setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.VIEW); 131 // ダウンロードリンクを取得 132 var newFileUrl = newFile.getUrl(); 133 // リンクを編集してPDFを埋め込むためのURLにする。そしてそれを返却。 134 return newFileUrl.slice(0, -17) + "preview"; 135} 136 137// 同じ名前のファイルが存在するなら削除する関数 138function delExistsFile(folder, fileName) { 139 var files = folder.getFilesByName(fileName); 140 141 while (files.hasNext()) { 142 var file = files.next(); 143 if(fileName == file.getName()) { 144 folder.removeFile(file); 145 return true; 146 } 147 } 148 149 return false; 150} 151 152 153

試したこと

該当の関数のみを実行した際は問題なくスプレッドシートを作成できました.
上記コード内に組み込んだ時にスプレッドシートではなくドキュメントが作成されてしまいます.
対処法をご教示いただければ幸いです.

補足情報(FW/ツールのバージョンなど)

GASのV8で実行しています.

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

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

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

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

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

Zuishin

2020/10/24 01:24

createPDF で作ってるんじゃないですか?
Kodanosuke

2020/10/24 01:31

ご指摘ありがとうございます. createSSheetで作成しています.そちらで作成したスプレッドシートをcreatePDFでpdfにしています. 確認したところ,ドキュメントファイルではなく拡張子なしのファイルが作成されていました. なにか対処方法をご存師でしたらご教示ください. よろしくお願いいたします.
Kodanosuke

2020/10/24 01:33

ご参考までに,下記のコードを単体で実行すると問題なくスプレッドシートを作成できました. Drive.Files.insert({ "title": ファイル名, "mimeType": "application/vnd.google-apps.spreadsheet", "parents": [{"id": フォルダID}] }); なにか原因があるのでしょうか.
Zuishin

2020/10/24 01:37

そうじゃなく、createPDF でドキュメントができてるんじゃないですか? これをコメントアウトしてやってみてください。
Kodanosuke

2020/10/24 02:14

すいません.そのとおりでした.ありがとうございます.
Zuishin

2020/10/24 02:31

解決したのであれば自己解決してください。
Kodanosuke

2020/10/24 02:31

ちなみにこの時作成されたファイルを消すにはどのようにしたらよろしいでしょうか. ドキュメントが作成された時点でidを取得し削除したいのですが,どの行で取得できるかおわかりでしょうか?お手数ですがよろしくおねがいします.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問