質問: file.getBlob(); pdfss.insertImage(fileBlob, 1, 37, 0, 0).setWidth(100).setHeight(100);//ココでサーバーエラーになります。 ``` サーバーエラーと言われ、原因が全く把握できません。 原因と対策がわかる方、ご回答よろしくお願いいたします。 ※追記 以前から何回もいろんな記述で試行錯誤しているのですが、修正した日には上手くいったのに、翌日になると必ず「サーバーエラー」となります。記述に変更はしていないのに、です。 もし可能であれば、コチラのご回答もよろしくお願い致します。
回答: これは直接的な解決方法ではありませんので恐縮ですが、次のようなアプローチはいかがでしょうか。 例えばPDFなど、画像データ以外を挿入しようとすると`サーバー エラーが発生しました。しばらくしてからもう一度試してください。`のようなエラーが発生します。そこで、下記のように少しスクリプトを変更し、エラーが発生するときの情報を取得してみるのはいかがでしょうか。下記スクリプトでは画像貼り付け時にエラーが発生すると、ファイルのmimeType、ファイルサイズ、画像サイズ(もしも画像データ以外の場合は`undefined`が返されます)をログとして取得します。mimeTypeが画像データにもかかわらず、エラーが発生するような場合は、貼り付けに対応していない画像形式あるいはサイズである可能性が高いと思われます。ここで得た情報から具体的な解決策を検討するのはいかがでしょうか。 ### 変更したスクリプト ``` var ssid = "スプレッドシートID"; var ss = SpreadsheetApp.openById(ssid); var pdfss = ss.getSheetByName("シート名"); var folder = DriveApp.getFolderById("画像フォルダのID"); var files = folder.getFiles(); var file = files.next(); var fileBlob = file.getBlob(); // 下記を追加変更しました。 try { pdfss.insertImage(fileBlob, 1, 1, 0, 0).setWidth(100).setHeight(100); } catch(e) { var mimeType = fileBlob.getContentType(); var fileSize = fileBlob.getBytes().length; var res = UrlFetchApp.fetch("https://www.googleapis.com/drive/v3/files/" + file.getId() + "?fields=imageMediaMetadata(height%2Cwidth)&access_token=" + ScriptApp.getOAuthToken()); var imageMediaMetadata = JSON.parse(res).imageMediaMetadata; Logger.log("\nError: %s\nmimeType: %s\nfileSize: %s\nimageMediaMetadata: %s", e, mimeType, fileSize, imageMediaMetadata) } ```