アレルギー対策、自宅でできる効果的な方法とは?

googleappsのフォームのsubmitのイベント処理に
スクリプトを書いていてそこで
ログインユーザのe-mailアドレスを取得したいのです


var to = Session.getActiveUser.getEmail()

これでテストしてみたところ自分のe-mailアドレスが取得できたので
できたと思ってほかの人にフォーム入力をしてもらったところ
取得した値は私のe-mailアドレスでした・・・・
これってスクリプトを作成者の情報を取得する!?


ためしにgetEffectiveUser メソッド,getUserメソッドも試してみましたが
同じ結果です

googleappsフォームを入力した人のe-mailを取得するスクリプトはどのようにしたらいいでしょうか?

このQ&Aに関連する最新のQ&A

A 回答 (2件)

フォームの設定でログインを強制しても動作は同じですか? まずはそれを確認して下さい。

フォームは、他のスプレッドシートやドキュメントなどのように利用を許可された人間だけがログインして使うのでなく、誰でもアクセスできるので、そのままではActiveUserがとれないのかも知れません。ログインを強制するよう設定してください。
    • good
    • 0
この回答へのお礼

フォームの設定でログインを強制しても同じ動作でした

お礼日時:2014/06/21 05:56

>取得した値は私のe-mailアドレスでした・・・・



これって、どういう形で確認しています? 例えば、Loggerでログ出力させているとかですか。だとすると、例えばスクリプトが動作しておらず、最後に実行した結果が残っているということも考えられますが……。

ユーザーのログイン情報の取得は、基本的にSession.getActiveUser.getEmailでいいはずです。getEffectiveUserは確かdeprectedなので使わないで下さい。

これで取れるはずですが、しかし当たり前ですがログインできてないとスクリプトは正常に動きません。Google Appsユーザーなら、一番上の「フォームの設定」のところに、「このフォームを表示する際に○○へのログインを求める」というチェックがありますので、これをONにしてください。これで、フォームにアクセスすると強制的にログインされます。結果、Session.getActiveUser.getEmailで正常にメールアドレスが取れるようになるはずです。
    • good
    • 0
この回答へのお礼

お返事ありがとうございます

値の確認は自分に向けて取得した値をメールしています
MailApp.sendEmail("自分のメールアドレス", "test", Session.getActiveUser().getEmail());


自分でフォームをサブミットすれば当然メールの本文には自分のメールアドレスがセットされていますが
他の人がフォームを開いてサブミットしてもその人のメールアドレスではなく自分のメールアドレスが
セットされています

お礼日時:2014/06/19 21:34

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QGoogle Apps Scriptの日付の比較

日付の比較を行うには、

どのようにしたらよろしいでしょうか?

比較対象セルには、
yyyy/mm/dd表示形式が設定されています。

単純に、d1 == d2
だと、できません。

よろしくお願いします。

Aベストアンサー

前に確か回答したと思いますが……。

2つのセルに日付のフォーマットが設定されているのでしたら、それをもとにDateオブジェクトを作成し、そこからgetTimeでミリ秒換算した値を取り出して引き算すればいいです。得られた結果を1日のミリ秒数で割れば日数が得られます。

function testfunc(e) {
var sheet = SpreadsheetApp.getActiveSheet(); // とりあえずアクティブシートを指定
var r1 = sheet.getRange(1, 1); // 1つ目のセル
var r2 = sheet.getRange(2, 1); // 2つ目のセル
var d1 = new Date(r1.getValue()); // Dateを作成
var d2 = new Date(r2.getValue()); // Dateを作成
var dt = Math.abs(d1.getTime() - d2.getTime()); // ミリ秒数値を引き算
var d = dt / (1000 * 60 * 60 * 24); // 1日のミリ秒数で割り算
Logger.log(d + "日 "); // ログに出力
}

前に確か回答したと思いますが……。

2つのセルに日付のフォーマットが設定されているのでしたら、それをもとにDateオブジェクトを作成し、そこからgetTimeでミリ秒換算した値を取り出して引き算すればいいです。得られた結果を1日のミリ秒数で割れば日数が得られます。

function testfunc(e) {
var sheet = SpreadsheetApp.getActiveSheet(); // とりあえずアクティブシートを指定
var r1 = sheet.getRange(1, 1); // 1つ目のセル
var r2 = sheet.getRange(2, 1); // 2つ目のセル
var d1 = new Date(...続きを読む

Q(google apps script)スプレッドシートを配列取り込みした時のエラーメッセージ

google apps scriptをスプレッドシートでマクロ代わりに使用しています。

スプレッドシートの内容全体を配列取り込みし、
for文で上のセルから検索文字列に合うものを別の配列に追加するスクリプトを書きたいのですが、

var sheet_values = sheet.getDataRange().getValues();
var arry = [];
var s = '検索文字列';

for( i = 0 ; i < lastRow ; i++){
var v = sheet_values[i][15]; //15は検索したい列です
if( v === s ) {
arry.push(i);
}
}

のように記述すると
「TypeError: undefined からプロパティ「15」を読み取れません。」
というエラーメッセージが出ます。

var clmn_values = sheet.getDataRange(1,16,lastRow,1).getValues();
var arry = [];
var s = '検索文字列';

for( i = 0 ; i < lastRow ; i++){
var v = clmn_values[i]; //15は検索したい列です
if( v === s ) {
arry.push(i);
}
}

以上のように検索列単体で取り込みしてfor文にする場合このエラーメッセージは出ないのですが、
列で取り込むものがかなり多くなってしまうのでできれば全体から検証したいです。

何卒お答えいただけますと幸いです。よろしくお願いします。

google apps scriptをスプレッドシートでマクロ代わりに使用しています。

スプレッドシートの内容全体を配列取り込みし、
for文で上のセルから検索文字列に合うものを別の配列に追加するスクリプトを書きたいのですが、

var sheet_values = sheet.getDataRange().getValues();
var arry = [];
var s = '検索文字列';

for( i = 0 ; i < lastRow ; i++){
var v = sheet_values[i][15]; //15は検索したい列です
if( v === s ) {
arry.push(i);
}
}

のように...続きを読む

Aベストアンサー

こんにちは

google apps scriptは存じませんので、ご質問文を見た範囲での回答となっており、はずしているかも知れませんが・・・

>「TypeError: undefined からプロパティ「15」を読み取れません。」
とのことなので、 sheet_values[i]がundefinedかあるいは読み取れないなどと推測できます。

データを読み込んで解析するのに、いきなり「lastRow」や「15」を指定して読み出そうとなさっていますが、元データに空の行があったり、空のセルがある場合に、そもそも、どのような値が返されてくる仕様になっているのでしょうか?
通常で考えれば、(どこか他で決めている?)lastRowではなく、sheet_values.length等を用いてループするのが妥当ではないかと思いますが…

googleのリファレンスで見てみると、データサイズは当該配列のサイズを参照してループしていますし、個々のセルの値についても存在をチェックして処理を行うようにしているようです。
https://developers.google.com/apps-script/reference/spreadsheet/sheet#getDataRange%28%29

こんにちは

google apps scriptは存じませんので、ご質問文を見た範囲での回答となっており、はずしているかも知れませんが・・・

>「TypeError: undefined からプロパティ「15」を読み取れません。」
とのことなので、 sheet_values[i]がundefinedかあるいは読み取れないなどと推測できます。

データを読み込んで解析するのに、いきなり「lastRow」や「15」を指定して読み出そうとなさっていますが、元データに空の行があったり、空のセルがある場合に、そもそも、どのような値が返されてくる仕様になってい...続きを読む

Qスプレッドシートでドロップダウンリストの内容を自動更新させたい

http://office-qa.com/Excel/ex68.htm
こちらのサイトの方法をスプレッドシートで行いたいのですが上手くいきません。

A列に記入(月に何度か追加される)したものを、B列のプルダウンの項目に反映させて記入がしたいです。
A1にあるりんごをB列だとB2に表示させなければいけない時があるため、A列にあるものを隣のB列にそのまま反映させたいわけではないです。

A列       B列(プルダウン)
1.りんご     もも
2.ばなな     りんご
3.もも      ばなな
4.かき(追加)

Aベストアンサー

関数を使ったリストではなく、[名前付き範囲]を使ってみては。

設定例:A列にリストに表示させる項目が追加される場合
メニューの[データ]→[名前付き範囲]を選択。
表示された[名前付き範囲]ウィンドウの「名前付けされた範囲1」を
適当な名前「果物」にします。リストの範囲が[ 'シート1'!A1 ]に
なっていたら、[ 'シート1'!A1:A1000 ]のように追加される品数で
用意し[完了]で決定します。

プルダウンを表示したい範囲を選択して、データ→入力規則から
[データの入力規則]を出し、[セル範囲]をB列の範囲を指定します。
[条件]を[リストの範囲]で指定にして、範囲を「果物」とします。
[保存]ボタンを押すと、プルダウンがB列の範囲に表示されます。

A列で入力されていない範囲はプルダウンに表示されません。
A列にデータを追加をすると、プルダウンのリストも増えます。

QExcelのセルにユーザー名を表示する方法

こんにちわ。Excelのセルに使用しているユーザー名を表示する関数はありませんか?お知りの方、宜しくお願いします。

Aベストアンサー

ユーザー名とは、コンピュータにログオンしているユーザ名か、ツール>オプション>全般の「ユーザー名」で指定されているユーザ名かどちらでしょう。(後者はOfficeをインストールするときに指定するので、ログオンユーザ名と同じとは限りません)

どちらにしろ、標準の関数では無理なので、ユーザ定義関数を作ります。
Alt+F11でVBAの画面を開き、「挿入」>「標準モジュール」を選択します。Module1というのができて、右側にそのモジュールの入力画面になります。

ここで、右側に、

Function LoginName() As String
  LoginName = CreateObject("WScript.Network").UserName
End Function

Function ExcelUserName() As String
  ExcelUserName = Application.UserName
End Function

をコピーし、Excelに戻ります。

任意のセルで、
=LoginName()
とするとログオンユーザ名が表示され、
=ExcelUserName()
とするとExcelに登録されているユーザ名が表示されます。

ユーザー名とは、コンピュータにログオンしているユーザ名か、ツール>オプション>全般の「ユーザー名」で指定されているユーザ名かどちらでしょう。(後者はOfficeをインストールするときに指定するので、ログオンユーザ名と同じとは限りません)

どちらにしろ、標準の関数では無理なので、ユーザ定義関数を作ります。
Alt+F11でVBAの画面を開き、「挿入」>「標準モジュール」を選択します。Module1というのができて、右側にそのモジュールの入力画面になります。

ここで、右側に、

Function LoginNa...続きを読む

QJavaScriptde途中で、「exit」するには?

function kensaku(){
s_data = document.kaiin_form.input_name.value;

if(!s_data){ alert("キーワードを入れて下さい!"); }

if(s_data != dumy){ ...... }
for(i=st_no;i<=n;i++){
......省略.................;
.......省略................}
}

----------------------------------
3行目で表示されたアラートをOKで閉じても、4行目以下が実行されてしまいます。
3行目でexitするにはどうすれば良いでしょうか?

Aベストアンサー

>関数(kensaku())からは抜けられませんでした。
そうですね、勘違いしていました、f(^^;
すみません。
if(!s_data){
alert("キーワードを入れて下さい!");
return;
}
ですね。

QonClickに複数の関数を挿入する方法

初心者なのですがアニメーションの関数anime1、anime2、anime3を作成し、onClickに下記のように設定しました。
クリックするとアニメーション2つの設定ではは動くのですが、3つ目を設定すると動かなくなります。
通常はこのような設定はしないものなのでしょうか?
教えてください。
よろしくお願いします。
<INPUT type="button" value="START" onClick="anime1(), anime2()">・・・OKです。
<INPUT type="button" value="START" onClick="anime1(), anime2(),anime3()">・・・動きません。

Aベストアンサー

セミコロンでつなぐのが常道ですが、3つ以上なら
別途function化したほうが、可読性が高くなると
思います。

QGoogleスプレッドシートでセルの文字数の関数

こんにちは。
エクセル系にあまり詳しくないもので教えてください。

現在Googleスプレッドシートを使っているのですが、
セルに入力した文字の「文字数」を表示したいです。

例えばA1セルに500文字日本語を入力していると、
A2セルに「500」と出るようにしたいのですが、
この場合どのような関数を書けばよいでしょうか?

詳しい方ご伝授いただけると助かります。
宜しくお願い致します。

Aベストアンサー

=len(セルの番号)でできませんか?

QGoogle Apps Scriptで自動印刷

GASでDocumentファイルをPDFに変換保存し(ここまではスクリプトを組み、問題なく動作している)、最後に同PDFを印刷するコードを組もうと色々試したのですが、どうも印刷メソッドが見当たりません。
コンテンツアシストからそれっぽいものを片っ端から探し、書籍「Google Apps Script クイックリファレンス」の関係なさそうなとこまで探し、JavaScriptのprint()を試し、もちろんWebで検索をかけ、英文のサイトも探し、結局辿り着いたのは「印刷メソッドはない」という情報でした(英文フォーラム投稿)。
不存在の確証というのは得づらく、Googleがアップデートしてメソッドを追加してやしないか、そもそもあの情報を書いた人が知らなかっただけではないか、と諦め切れません。

また、もし印刷のGAS内での処理が無理ならばそこだけ外部アプリケーションに頼ることもやぶさかではないので(ただし、スクリプト組みはGAS内に留めたい)、とりあえずデスクトップへのダウンロードまでスクリプトで組もうとしたところ、downloadAsFile()というメソッドがTextファイルでしか働かず(TextOutput.downloadAsFileでしか呼び出せない)、元々のDocumentが書式設定されたもののためにPDFどころか元のDocumentのダウンロードにすら使えない状態です。

そこで、以下をご存知でしたら教えて頂きたい。

・Google Drive上のPDFまたはDocumentをWebブラウザ上から直接印刷するためのGASのコード
・.txt形式以外でファイルをダウンロードするコード
・その他、生成したファイルを一括して印刷またはダウンロードするのに便利な方法
(Driveのリストからチェックを複数入れてプレビュー→印刷は一つしか印刷対象にならずダメ。チェックからダウンロードはZip化されて少々鬱陶しい。)

以上よろしくお願いします。

GASでDocumentファイルをPDFに変換保存し(ここまではスクリプトを組み、問題なく動作している)、最後に同PDFを印刷するコードを組もうと色々試したのですが、どうも印刷メソッドが見当たりません。
コンテンツアシストからそれっぽいものを片っ端から探し、書籍「Google Apps Script クイックリファレンス」の関係なさそうなとこまで探し、JavaScriptのprint()を試し、もちろんWebで検索をかけ、英文のサイトも探し、結局辿り着いたのは「印刷メソッドはない」という情報でした(英文フォーラム投稿)。
不存在の確...続きを読む

Aベストアンサー

わかる部分だけ。

>・Google Drive上のPDFまたはDocumentをWebブラウザ上から直接印刷するためのGASのコード

ウェブの仕組みとして、原理的に無理です。
サーバー上のプログラムからブラウザを通してクライアントPCのブラウザの外に何かさせるのは無理。
プラグインなどをブラウザにインストールすれば可能ですので、Googleからそういうプラグインかアドオンが出れば可能。

QGASスプレッドシートの編集した行を取得

Googleappsのスプレッドシートのスクリプトで
何か文字を入力したらその行を取得したいのです
onEditイベントにて

function onEdit(event)
{
var sheet = event.source.getActiveSheet();
var range = event.source.getActiveRange();
var rowidx = range.getRow();
 sheet.getRange(rowidx, 1, 1, 4).setBackgroundColor('#a9a9a9');
}

このようにすると編集した行の色が変わるので確かにrowidxに編集した行を取得できていると
思います・・・
でも編集した行と1行目の2つの色がかわってるので色を変えたことにより
もういっかい編集イベントが発生してしまっているのかな???

でここからが本題なのですが
Logger.log(rowidx);を最後の行に追加して確認すると
1.0という値がセットされているのです
スプレッドシートを編集したのは10行目だとしても・・・

もしかしてイベントが2回発生していてログには最後に実行されたものしか
セットされてないから1.0になっているのかなと想像し

最後の行に以下のように記述して値を確認しました
MailApp.sendEmail("hogehoge@xxxxx.xx", "test", rowidx);
飛んでくるメールは1通だけ(イベントは2回発生していない?)
値は1.0がセットされています

スプレッドシートの何か値を変更したらその行番号の値を
取得するにはどうしたらいいでしょうか?

Googleappsのスプレッドシートのスクリプトで
何か文字を入力したらその行を取得したいのです
onEditイベントにて

function onEdit(event)
{
var sheet = event.source.getActiveSheet();
var range = event.source.getActiveRange();
var rowidx = range.getRow();
 sheet.getRange(rowidx, 1, 1, 4).setBackgroundColor('#a9a9a9');
}

このようにすると編集した行の色が変わるので確かにrowidxに編集した行を取得できていると
思います・・・
でも編集した行と1行目の2つの色がかわってるので色を変...続きを読む

Aベストアンサー

onEditイベントでは、渡されるEventオブジェクトのrangeプロパティで、onEditイベントが発生したRangeが取得できます。

var rowidx = event.range.getRow();

ただし、質問にあったスクリプトでも問題はないように思えます。実際、コピペして動かしてみましたが、こちらでは問題なく動きました。ですので、このスクリプト単体の問題ではないように思えます。

例えばですが、何か他にトリガーを使った処理などがあって、それと干渉しているようなことはないでしょうか。新たにスプレッドシートを作って、このスクリプトだけをonEditに設定しても動作は同じですか。

QJavaScriptにおいてPOSTで送信されたデータを取得出来ますか

<form action="自分" method="POST">
<input type="hidden" name="abc" value="1">
<input type="submit" name="OK" value="OK">
</form>

上記のように、POST渡しで送信したとき、Javascriptにて、hiddenのデータを取得することができるのでしょうか?

出来るのであればその方法を教えてくださいませんか。
よろしくお願いします。

Aベストアンサー

POSTで渡された変数をJavaScriptで取得することができません。
でも、action先は自分自身なんですよね?
だったら、submitボタンを押下されたときに、hiddenの値を参照すればいいのでは?
わざわざPOSTデータを参照する必要があるのでしょうか?


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報