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

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

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

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

Google API

Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

Google Apps Script

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

Q&A

0回答

1218閲覧

GoogleスプレッドシートをurlFetchAppでPDF化したいが、401エラーになる

ravioli0521

総合スコア0

Google スプレッドシート

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

Google API

Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

Google Apps Script

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

0グッド

2クリップ

投稿2020/06/04 19:33

前提・実現したいこと

Googleスプレッドシートで見積書を作成してもらい、
メールでPDFファイルを飛ばす仕組みを作りたいと考えています。
デバイスの操作があまり得意でない人のために、
スクリプトをボタンに登録してワンタッチで送る仕組みです。

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

Exception: https://docs.google.com のリクエストに失敗しました(エラー: 401)。サーバー応答の一部: <HTML> <HEAD> <TITLE>Unauthorized</TITLE> </HEAD> <BODY BGCOLOR="#FFFFFF" TEXT="#000000"> <H1>Unauthorized</H1> <H2>Error 401</H2> </BODY> </HTML> (応答の全文を見るには muteHttpExceptions オプションを使用してください)

該当のソースコード

Google Apps Scriptでコーディングしています

function sendMail(){

var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var key = spreadsheet.getId();
var sheetName = spreadsheet.getSheetByName("見積計算書");
var gid = sheetName.getSheetId();
var token = ScriptApp.getOAuthToken();

var url = "https://docs.google.com/spreadsheets/d/" + key + "/export?gid=" + gid + "&format=pdf&portrait=true&size=A4&gridlines=false&fitw=true";
var customerStr = sheetName.getRange(2, 3).getValue();

//この行に問題があると考えています
var pdf = UrlFetchApp.fetch(url, {headers : {'Authorization': 'Bearer ' + token}}).getBlob().setName("見積計算書" + customerStr + ".pdf"); 

var to = "okinawa.vegetable@gmail.com";
var subject = "見積計算書"+customerStr;
var body ="正式な見積と発注をしてください";

GmailApp.sendEmail(to, subject, body, {attachments: pdf});
}

試したこと

スプレッドシートを作ったアカウントAと、
スクリプトを作ったアカウントBが違うので、
スプレッドシートのオーナーをアカウントB変更して同じにしたが
変化なし

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

ここにより詳細な情報を記載してください。

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

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

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

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

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

CHERRY

2020/06/04 22:32

401 エラーなので、認証周りと思いますが、認証情報は正しいでしょうか?
ravioli0521

2020/06/04 22:53

認証情報が正しいかどうかの判断の仕方が分かりません。必要な情報の見方があれば教えていただきたいです。
sawa

2020/06/05 04:20

複数アカウントの競合エラーみたいなもんじゃないでしょうか? スプレッドシートをコピーして、そちらで試してみてはどうでしょう。
hiroshi0240

2020/06/05 08:25

スクリプトの実行はアカウントBの権限で行っていますか?
ravioli0521

2020/06/08 04:20

スプレッドシートのコピーは、アプリの認証(urlFetchAppのことだと思いますが)画面も出て、ログインアカウントを変えながら試してみましたが、問題は変わりませんでした。
ravioli0521

2020/06/08 04:26

Googleのログインアカウントは切り替えながら試していますが、問題に変化はありません。 一応、デフォルトアカウントがアカウントBで、スクリプトエディタの起動はアカウントBだけできる状態です。 スクリプトの実行アカウントが現在どちらになっているのか確認する方法はありますか?
sawa

2020/06/08 04:29

一度アカウントをログアウトして片方だけでログインしなおすか、 シークレットブラウザ等で 一つのアカウントだけログインの状態を作って実行ください。
ravioli0521

2020/06/08 06:52

ChromeのシークレットウィンドウでアカウントA,Bともに単独ログインして試してみましたが、問題に変化ありません。
sawa

2020/06/08 12:23 編集

うーん、そうすると申し訳ないですが、私には原因がわかりません。 この手の問題は、 ・単独アカウントで で実行 を試す。 ・単独アカウントでログインした状態で スプレッドシートを コピーして スクリプトを実行 あたりで解決するのですが。。 ちなみにコードはコピペして検証したので、私の環境では動きました。
ravioli0521

2020/06/10 01:26

検証ありがとうございます。 アカウントを単独で使うためのPC用意して再度作ってみたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問