GASでSperadSheetの内容をHTML出力したいのですが、日付データがあるとうまく出力出来ません。
Vue.jsを利用しない方法では直接GAS側にライブラリを適用する方法で出力できるのですが、Vue.jsを併用するときの設定がわかりません。
ほぼこちらのサイトを参考にさせていただきました。
https://tonari-it.com/gas-vue-js-spreadsheet-values/
例えば下のコードを使った場合に'toupperはうまく出ます、ですが、同じように'moment'を設定してもエラーにはなりませんが内容が出力されません。実際のjs.htmlの中のように設定してますと今度はエラーとなります。(画面表示一部)
日付 名前 説明
{{ list[0] | moment }} {{ list[1] }} {{ list[2] }}
どうぞよろしくお願いします。
Vue
1Vue.filter('toupper', function(value) { 2 return value.toUpperCase() 3}) 4 5 Vue.filter('moment',function (date) { 6 return moment(date).format('YYYY/MM/DD HH:mm'); 7})
main.gs
GAS
1function doGet() { 2 var htmlOutput = HtmlService.createTemplateFromFile("index").evaluate(); 3 htmlOutput 4 .setTitle('GAS+Vue.js') 5 .addMetaTag('viewport', 'width=device-width, initial-scale=1'); 6 return htmlOutput; 7} 8 9function getSpreadsheetValues(){ 10 return SpreadsheetApp.getActiveSpreadsheet().getDataRange().getValues(); 11} 12
js.html
HTML
1<script src="https://cdn.jsdelivr.net/npm/vue@2.5.17/dist/vue.js"></script> 2<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.10.6/moment.js"></script> 3<script> 4google.script.run.withSuccessHandler(initializeVue).getSpreadsheetValues(); 5 6function initializeVue(values){ 7 8 new Vue({ 9 el: '#app', 10 data: { 11 tocTitle: 'GASとvue.jsとmoment', 12 tocDescription: '日付データをそのまま出力するとエラーになることを回避する方法', 13 lists: values 14 }, 15 filters: { 16 moment: function (date) { 17 return moment(date).format('YYYY/MM/DD HH:mm'); 18 } 19 20 }); 21} 22 23</script>
index.html
HTML
1<!DOCTYPE html> 2<html> 3 <head> 4 <base target="_top"> 5 <?!= HtmlService.createHtmlOutputFromFile('css').getContent(); ?> 6 </head> 7 <body> 8 <div id="app"> 9 <h2>{{ tocTitle }}</h2> 10 <p>{{ tocDescription }}</p> 11 <table> 12 <tr><th>日付</th><th>名前</th><th>説明</th></tr> 13 <tr v-for="list in lists"><td>{{ list[0] | moment }}</td><td>{{ list[1] }}</td><td>{{ list[2] }}</td></tr> 14 </table> 15 </div> 16 <?!= HtmlService.createHtmlOutputFromFile('js').getContent(); ?> 17 </body> 18</html>
ここから追記1
json形式で渡すとうまく動きます。
変更点のみ記述します。
js.html
javascript
1function initializeVue(values){ 2 console.log(values); 3 values = JSON.parse(values);
index.html
HTML
1<tr v-for="list in lists"><td>{{ list.date | moment }}</td><td>{{ list.job }}</td><td>{{ list.name }}</td><td>{{ list.client }}</td></tr>
なぜSpreadSheetの配列だとエラーになるのかわからないままです。
追記2
使用しているSpreadSheetのデータです。
日付 名前 試験内容
2019/03/13 鈴木 国語
2019/03/15 鈴木 数学
2019/03/13 鈴木 国語
2019/03/13 佐藤 理科
2019/03/15 佐藤 数学
2019/03/13 佐藤 国語
2019/03/13 佐藤 国語
デバッカーでのconsolの内容です
日付なし
userCodeAppPanel:6
(8) [Array(2), Array(2), Array(2), Array(2), Array(2), Array(2), Array(2), Array(2)]
0
:
(2) ["鈴木", "国語", ob: Observer]
1
:
(2) ["鈴木", "数学", ob: Observer]
2
:
(2) ["鈴木", "国語", ob: Observer]
3
:
(2) ["佐藤", "理科", ob: Observer]
4
:
(2) ["佐藤", "数学", ob: Observer]
5
:
(2) ["佐藤", "国語", ob: Observer]
6
:
(2) ["佐藤", "国語", ob: Observer]
length
:
7
ob
:
Observer {value: Array(7), dep: Dep, vmCount: 0}
proto
:
Array
日付あり
userCodeAppPanel:6 null
です。よろしくお願いします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/09/20 01:01