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

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

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

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

664閲覧

gasでスプレッドシートの内容を個別に呼び出して修正できるのか?

sansam

総合スコア18

Google Apps Script

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2020/02/17 21:59

編集2020/02/18 01:34

gasでスプレッドシートの内容を個別に呼び出して修正できるのか?

https://note.com/consul_addtag/n/nd581fe122540
のサイトで修正できることは確認できたが、
もっとシンプルなコードで実現したく、まだgas初心者につき、サンプルコードを提示いただきたく、投稿しました。

<スプレッドシートデータ>
No 名前 年齢
1 Aさん 20歳 
2 Bさん 33歳
3 Cさん 43歳

<HTML>
Noを入力して、検索ボタンを押すと、
画面に、検索結果がかえってきて、
入力済みフォーム(オリジナル)になっていてほしい。
内容修正後、修正ボタンを押下して、スプレッドシートに上書き修正されてほしい。

No 名前 年齢
1 Aさん 20歳 
修正ボタン

HTML

1<!DOCTYPE html> 2<html> 3 4<head> 5 <base target="_top"> 6 <?var address = Session.getActiveUser().getUserLoginId();?> 7</head> 8 9<body> 10 <h1>振込</h1> 11 こんにちは! <?!=address?> さん 12 <form method="post" action="https://script.google.com/a/XXXXXXXXX/exec"> 13 氏名:<input type="text" name="name"><br> 14 性別: 15 <input type="radio" name="gender" value="男性">男性 16 <input type="radio" name="gender" value="女性">女性<br> 17 好きな動物: 18 <input type="checkbox" name="animal" value="犬">いぬ 19 <input type="checkbox" name="animal" value="猫">ねこ 20 <input type="checkbox" name="animal" value="うさぎ">うさぎ<br> 21 <input type="submit" value="送信する" onclick="createPDF()"> 22 </form> 23</body> 24 25<script> 26function createPDF(){ 27google.script.run.withSuccessHandler().GetInfo(); 28} 29</script> 30 31</html> 32

GAS

1function doGet() { 2 3 var toppage=HtmlService.createTemplateFromFile("index"); 4 5 return toppage.evaluate(); 6 7} 8 9function doPost(postdata){ 10 11 var sh=SpreadsheetApp.openById('XXXXXXXXXX'); 12 var sheetForm=sh.getSheetByName('回答一覧'); 13 var time=new Date(); 14 15 var name=postdata.parameters.name.toString(); 16 var gender=postdata.parameters.gender.toString(); 17 var animal=postdata.parameters.animal.toString(); 18 19//セッション情報からユーザID(メールアドレス)を取得 20var objUser = Session.getActiveUser(); 21var mail = objUser.getEmail(); 22 23 sheetForm.appendRow([time,name,gender,animal,mail]); 24 25 var resultpage=HtmlService.createTemplateFromFile("result"); 26 return resultpage.evaluate(); 27 28```追記します。 29 30頂いたサンプルコードで、試しに実装してみましたが、 31私の技術力不足で、できず、丸投げするつももりはないのですが、以下のコードで 32修正すべき点をご教示いただければ幸いです。 33 34```HTML 35<!DOCTYPE html> 36<html> 37 38<head> 39 <base target="_top"> 40 <?var address = Session.getActiveUser().getUserLoginId();?> 41</head> 42 43<body> 44 <h1>本社振込</h1> 45 こんにちは! <?!=address?> さん 46 <form method="post" action="https://script.google.com/a/XXXXX/exec"> 47 ID:<input type="text" name="id" id="id"><br> 48 氏名:<input type="text" name="name" id="name"><br> 49 性別: 50 <input type="radio" name="gender" value="男性" id="gender1">男性 51 <input type="radio" name="gender" value="女性" id="gender2">女性<br> 52 好きな動物: 53 <input type="checkbox" name="animal" value="犬" id="animal1">いぬ 54 <input type="checkbox" name="animal" value="猫" id="animal2">ねこ 55 <input type="checkbox" name="animal" value="うさぎ" id="animal3">うさぎ<br> 56 <input type="submit" value="送信する" onclick="createPDF()"> 57 <input type="submit" value="修正する" onclick="sheetman(textvalue)"> 58 </form> 59</body> 60 61<script> 62function createPDF(){ 63google.script.run.withSuccessHandler().GetInfo(); 64} 65 66/////////////////////////////////////////////////////////////////////////////////////////// 67function senddata(){ 68 var textvalue = document.getElementById("id").value; 69 70 //入力内容が空の場合、アラートを出す 71 if(textvalue == ""){ 72 alert("申請時発行のNo.が入力されていませんよ。"); 73 return 0; 74 } 75 76 //editnumに要求IDを格納する 77 editnum = textvalue; 78 79 google.script.run.withSuccessHandler(onSuccess).sheetman(textvalue); 80 81 } 82 83//////////////////////////////////////////////////////////////////////////////////////////////////////////// 84//配列を受け取って表示する関数 85function onSuccess(data) { 86 //帰ってきたデータを取得する 87 var test = JSON.parse(data); 88 var chktest = Number(test[0]); 89 90Logger.log(chktest); 91 92 if(chktest == 0){ 93 alert("作成者が違う、IDが異なる、データが存在してないなどの理由でデータが見つかりませんでした。"); 94 return 0; 95 } 96 97 //datalengthを取得しループでwasabiフィールドに値を格納する(editflagを1にする) 98 editflag = 1; 99 var testlength = 63; 100 var cnt = 1; 101 102 for(var i = 0;i<testlength;i++){ 103 if(i == 0){ 104 continue; 105 } 106 107 if(i == 1){ 108 continue; 109 } 110 111 //データを反映する 112 document.getElementById(name).value = syoudata; 113 114 //カウンタを回す 115 cnt = cnt + 1; 116 } 117 } 118 119</script> 120 121</html>

Javascript

1 2//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 3//配列を渡す為のイベントハンドラから呼び出す関数 4function sheetman(textvalue){ 5 //現在のユーザ名と指定されたIDを取得しておく 6 var nowuser = String(Session.getActiveUser()); 7 var filterid = String(textvalue); 8 9 //配列と存在フラグを用意する 10 var data = []; 11 var catflag = 0; 12 13 //gassheetより該当するデータを探索する 14// var Properties = PropertiesService.getScriptProperties(); 15// var sheettaro = Properties.getProperty('XXXXXXX'); 16//スプレッドシート名指定 17 var id ='XXXXXXXXXXX'; 18 var sheet2 = SpreadsheetApp.openById(id).getSheetByName('回答一覧'); 19 var sheet=sheet2.getRange(2,1,5,6).getValue(); 20 var sheetlength = sheet.length; 21 22 23 for(var i =0;i<sheetlength;i++){ 24 //カレントデータのIDを取得し比較する 25 26 var curid = String(sheet[i][0]); 27 28 if(curid == ""){ 29 break; 30 } 31 32 if(curid != filterid){ 33 continue; 34 }else{ 35 36 } 37 38 if(nowuser == manager){ 39 //管理者の場合、メアドの照合は行わない 40 }else{ 41 var mailman = String(sheet[i][63]); 42 if(mailman != nowuser){ 43 continue; 44 } 45 } 46 47 //IDとメールアドレスが一致した場合には、存在フラグを立てて、データを配列に格納する 48 catflag = 1; 49 var curdatalength = sheet[i].length; 50 51 for(var j = 0;j<curdatalength;j++){ 52 data.push(sheet[i][j]); 53 } 54 break; 55 } 56 57 //catflagが0の場合に配列の頭に0だけ格納する 58 if(catflag == 0){ 59 data.push(0); 60 } 61 62 return JSON.stringify(data); 63 64}

Javaccript

1function doGet() { 2 3 var toppage=HtmlService.createTemplateFromFile("index"); 4 return toppage.evaluate(); 5} 6 7function doPost(postdata){ 8 9 var sh=SpreadsheetApp.openById('XXXXXXXXXXX'); 10 var sheetForm=sh.getSheetByName('回答一覧'); 11 var time=new Date(); 12 13 var id=postdata.parameters.id.toString(); 14 var name=postdata.parameters.name.toString(); 15 var gender=postdata.parameters.gender.toString(); 16 var animal=postdata.parameters.animal.toString(); 17 18//セッション情報からユーザID(メールアドレス)を取得 19var objUser = Session.getActiveUser(); 20var mail = objUser.getEmail(); 21 22 sheetForm.appendRow([time,id,name,gender,animal,mail]); 23 24 var resultpage=HtmlService.createTemplateFromFile("result"); 25 return resultpage.evaluate(); 26 27}

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

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

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

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

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

papinianus

2020/02/17 22:34

> 入力済みフォーム(オリジナル) オリジナルなもののサンプルを提示するのは無理ではないですか?
guest

回答1

0

ベストアンサー

自分が過去に社内で使っていた、論文登録用フォームで同じことをやってましたよ。
論文なので、何度も修正が必要なので、初回登録時にIDを生成して登録者に通知。以降そのIDで呼び出しと修正を行えるようにHTML Serviceで構築していました。

javascript

1//★HTML側コード 2 //GAS側へNoを送る 3 function senddata(){ 4 var textvalue = document.getElementById("kinoko").value; 5 6 //入力内容が空の場合、アラートを出す 7 if(textvalue == ""){ 8 alert("申請時発行のNo.が入力されていませんよ。"); 9 return 0; 10 } 11 12 //editnumに要求IDを格納する 13 editnum = textvalue; 14 15 google.script.run.withSuccessHandler(onSuccess).sheetman(textvalue); 16 17 } 18 19 //配列を受け取って表示する関数 20 function onSuccess(data) { 21 //帰ってきたデータを取得する 22 var test = JSON.parse(data); 23 var chktest = Number(test[0]); 24 25 if(chktest == 0){ 26 alert("作成者が違う、IDが異なる、データが存在してないなどの理由でデータが見つかりませんでした。"); 27 return 0; 28 } 29 30 //datalengthを取得しループでwasabiフィールドに値を格納する(editflagを1にする) 31 editflag = 1; 32 var testlength = 63; 33 var cnt = 1; 34 35 for(var i = 0;i<testlength;i++){ 36 if(i == 0){ 37 continue; 38 } 39 40 if(i == 1){ 41 continue; 42 } 43 44    ・・・・・中略・・・・・ 45 46 47 //データを反映する 48 document.getElementById(getman).value = syoudata; 49 50 //カウンタを回す 51 cnt = cnt + 1; 52 } 53 } 54

GAS側は受け取ったNoを元にスプレッドシートを検索して、レコードを返す

javascript

1//配列を渡す為のイベントハンドラから呼び出す関数 2function sheetman(textvalue){ 3 //現在のユーザ名と指定されたIDを取得しておく 4 var nowuser = String(GetUser()); 5 var filterid = String(textvalue); 6 7 //配列と存在フラグを用意する 8 var data = []; 9 var catflag = 0; 10 11 //gassheetより該当するデータを探索する 12 var Properties = PropertiesService.getScriptProperties(); 13 var sheettaro = Properties.getProperty("mysheetid"); 14 var sheet = SpreadsheetApp.openById(sheettaro).getSheetByName("entrylog").getRange("A2:BO").getValues(); 15 var sheetlength = sheet.length; 16 17 18 19 20 for(var i =0;i<sheetlength;i++){ 21 //カレントデータのIDを取得し比較する 22 23 var curid = String(sheet[i][0]); 24 25 if(curid == ""){ 26 break; 27 } 28 29 if(curid != filterid){ 30 continue; 31 }else{ 32 33 } 34 35 if(nowuser == manager){ 36 //管理者の場合、メアドの照合は行わない 37 }else{ 38 var mailman = String(sheet[i][63]); 39 if(mailman != nowuser){ 40 continue; 41 } 42 } 43 44 //IDとメールアドレスが一致した場合には、存在フラグを立てて、データを配列に格納する 45 catflag = 1; 46 var curdatalength = sheet[i].length; 47 48 for(var j = 0;j<curdatalength;j++){ 49 data.push(sheet[i][j]); 50 } 51 break; 52 } 53 54 //catflagが0の場合に配列の頭に0だけ格納する 55 if(catflag == 0){ 56 data.push(0); 57 } 58 59 return JSON.stringify(data); 60 61} 62

大雑把ですが、そんなに難しいものじゃないです。基本はGAS側へ送り、それを元に検索して、HTML側へ返す。これだけです。

投稿2020/02/18 00:19

officeforest

総合スコア412

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

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

sansam

2020/02/18 01:36

ありがとうございます。丸投げになっており恐縮ですが、 ご教示いただいたサンプルコードをベースに、作成してみたのですが、 私の技術力がないため、違う動きをしております。 再度、見て頂けると助かります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問