質問編集履歴

1

質問内に記載するコードを全般的に見直しました。試してみたコードについては削除してしまったため、エラーコードの確認はできませんでした。

2022/08/03 12:46

投稿

chocolatxx
chocolatxx

スコア22

test CHANGED
File without changes
test CHANGED
@@ -29,35 +29,85 @@
29
29
 
30
30
  ### 該当のソースコード
31
31
 
32
- ```html
32
+ ```index.html
33
- //メインページ内に以下のリンクを作成
33
+ <!DOCTYPE html>
34
+ <html>
35
+ <head>
34
- //pの値で doGetで呼び出すhtmlを指定
36
+ <base target="_top">
37
+ <?!= HtmlService.createHtmlOutputFromFile('css').getContent(); ?>
35
- //nの値で IDを指定
38
+ </head>
39
+ <body>
40
+ <div class='contents'>
41
+ <div class='main'>
42
+ <h3><?=name?>の管理</h3>
43
+
44
+ <div class='table_Layout'>
45
+ <p>業務1</p>
46
+ <table id='業務1'></table>
47
+ </div>
48
+
49
+ </div><br>
50
+ <div class="link">
36
- <a id="link" href="<?= getAppUrl() ?>?p=page&n=ID">田中</a>
51
+ <a id="link" href="<?= getAppUrl() ?>?p=manage&n=hogehoge">このリンクから他の人のページに移動したい</a>
37
- ```
52
+ </div>
53
+ </div>
54
+ </body>
55
+ </html>
38
56
 
57
+ <!--jQueryのCDN読み込み-->
39
- ```script
58
+ <script
59
+ src="https://code.jquery.com/jquery-3.6.0.slim.min.js"
60
+ integrity="sha256-u7e5khyithlIdTpu22PHhENmPcRdFiHRjhAuHcs05RI="
61
+ crossorigin="anonymous">
62
+ </script>
40
63
 
64
+ <script>
65
+  
66
+  //webページの読み込み時に実行
41
- window.onload = function(){
67
+ window.onload = function(){
42
68
  //エクセルDBからアサイン状況を表示
43
69
  google.script.run.withSuccessHandler(function(dt) {
44
70
  for(var i = 0; i<dt.length - 1; i++) {
71
+ var date = new Date(dt[i][0]);
72
+ var dateText = `${date.getMonth() + 1}月${date.getDate()}日`;
45
- $('#test').append(`<input type="button"
73
+ $('#業務1').append(`<input type="button"
46
74
  id="${dt[i][3]}"
47
- value="${dt[i][1]}">`);
75
+ value="${dateText + '_' + 業務名をDB(スプレッドシート)から取得)'}"
76
+ onclick="window.open('<?= getAppUrl();?>?p=assign&d=${date}&f=${dt[i][1]}&n=${dt[i][2]}','_blank','width=280,height=400')">`);
48
77
  }
49
78
  }).values1get();
50
79
  ```
51
80
 
52
- ```gas
81
+ ```gs doGet
82
+ if(page == 'index' || page == null) {
83
+ const ssID = SpreadsheetApp.openById('1HCaDY19PHQLkWMKH7YqNlgyLX-GNSF4v6GKB8sRbLvQ');
84
+ const sheetID = ssID.getSheetByName('ID');
85
+
86
+ const rowCountID = sheetID.getLastRow();
87
+ const regAccountID = sheetID.getRange(2,3,rowCountID - 1,1).getValues();
88
+ var userID = Session.getActiveUser().getEmail();
89
+ const regssDBName = sheetID.getRange(2,2,rowCountID - 1,1).getValues();
53
90
 
91
+ for(let i = 0; i<= rowCountID - 1; i++) {
92
+ if(regAccountID[i] == userID) {
54
- //DBからmainページへのデータ反映
93
+ var ssDBName = regssDBName[i];
94
+ break;
95
+ }
96
+ }
97
+ let htmlOutput = HtmlService.createTemplateFromFile('index');
98
+ htmlOutput.name = ssDBName;
99
+ return htmlOutput.evaluate().setTitle('業務管理').addMetaTag('viewport', 'width=device-width,initial-scale=1');
100
+
101
+ }
102
+
103
+ ```
104
+
105
+ ```gs values1get()
55
106
  function values1get() {
56
107
  //ログイン中のgmailアカウントを元に、IDファイルからデータベースのIDを取得
57
- //IDのスプレッドシートの取得
58
- const ssID = SpreadsheetApp.openById('スプレッドシートのID');
108
+ const ssID = SpreadsheetApp.openById('全担当者のIDを保存しているスプレッドシートのID');
59
109
  const sheetID = ssID.getSheetByName('ID');
60
- //全IDを配列に入れ、ログイン中のgmailアカウントをキーとしてアカウントに紐づくスプレッドシートを取得
110
+
61
111
  let rowCountID = sheetID.getLastRow();
62
112
  const regAccountID = sheetID.getRange(2,3,rowCountID - 1,1).getValues();
63
113
  const userID = Session.getActiveUser().getEmail();
@@ -84,15 +134,10 @@
84
134
  }
85
135
  }
86
136
  ```
87
- ### したこと
137
+ ### 実現したこと
88
138
 
89
- よく事例のある、e.parameterで受け渡しができないかと思って試したところ、
90
- リンクから開いたhtml自体にはIDを受け渡すことはできました。
91
- ただ、html内の google.script.run.withSuccessHandler(function(){}).values1get();
92
- で呼び出す values1get() にはIDが受け渡すことができませんでした。
93
-
94
- 現状、Session.getActiveUser().getEmail();取得していIDを
139
+ indes.html内に仮『n=hogehoge』と入れていますが、何らかの形でリンクを踏む際に担当者のID情報受け渡す。
95
- で受け渡すことはできないょうか?
140
+ values1get()の関数で呼び出すスプレッドシートのIDをgetEmail()によるログイン中のIDを、リンクを踏んだ際に受け渡されたID情報を元に参照る担当者DBを設定たい。
96
141
 
97
142
  ご教授いただけますと幸いです。
98
143