Googleスプレッドシートをグラフごとkintoneに移行

2021/02/14のアップデートアプリのグラフの設定を操作できる APIが追加されました. 今回はこちらを利用したサンプルをご紹介します.

サンプル

Googleスプレッドシートをグラフごとkintoneに移行します.

やりかた

Google App Scriptを利用します.

kintoneに移行したいGoogleスプレッドシートから,Google App Scriptのスクリプトエディタを開きます. 詳しくはこちらなどを参考にしてください.

スクリプトエディタに下記コードを貼り付け,main関数を実行します. 2~6,9行目はkintone設定に合わせて,適宜変更してください.

functionkintoneApi(path,method,params){constdomain='\*\*\*\*.cybozu.com'//kintoneのドメインconstuser='\*\*\*\*'//kintoneのログインユーザー名constpassword='\*\*\*\*'//kintoneのログインパスワード// const basicUser = '\*\*\*\*' //kintoneのベーシック認証ユーザー名// const basicPass = '\*\*\*\*' //kintoneのベーシック認証パスワードconstheaders={'X-Cybozu-Authorization':Utilities.base64Encode(`${user}:${password}`),// 'Authorization': 'Basic ' + Utilities.base64Encode(${basicUser}:${basicPass}) //ベーシック認証ありの場合}constcontentType='application/json'if(method==='get'){returnJSON.parse(UrlFetchApp.fetch(`https://${domain}${path}.json?${Object.entries(params).map(([key, value]) =\> `${key}=${value}`).join('&')}`,{method,headers}))}returnJSON.parse(UrlFetchApp.fetch(`https://${domain}${path}.json`,{method,headers,contentType,payload:JSON.stringify(params)}))}functiongenerateAppName(sheet){returnsheet.getName()}functiongenerateProperties(sheet){returnsheet.getDataRange().getValues()[0].reduce((properties,field)=\>{properties[field]={type:'NUMBER',code:field,label:field}returnproperties},{})}functiongenerateReports(sheet){returnsheet.getCharts().map(chart=\>({type:chart.modify().getChartType().toString(),title:chart.getOptions().get('title'),headers:chart.getRanges().map(range=\>range.getValues()[0]).flat()})).reduce((reports,chart,index)=\>{console.log(chart.title)reports[chart.title]={chartType:chart.type,chartMode:'NORMAL',name:chart.title,index,groups:[{code:chart.headers[0]}],aggregations:chart.headers.slice(1).map(header=\>({type:'SUM',code:header})),sorts:[{by:'GROUP1',order:'ASC'}]}returnreports},{})}functiongenerateRecords(sheet){constvalues=sheet.getDataRange().getValues()constfields=values[0]returnvalues.slice(1).map(row=\>fields.reduce((record,field,index)=\>{record[field]={value:row[index]}returnrecord},{}))}functionmain(){constsheet=SpreadsheetApp.getActive().getActiveSheet()constapp=kintoneApi('/k/v1/preview/app','post',{name:generateAppName(sheet)}).appkintoneApi('/k/v1/preview/app/form/fields','post',{app,properties:generateProperties(sheet)})kintoneApi('/k/v1/preview/app/reports','put',{app,reports:generateReports(sheet)})kintoneApi('/k/v1/preview/app/deploy','post',{apps:[{app}]})while(1){if(kintoneApi('/k/v1/preview/app/deploy','get',{apps:app}).apps[0].status==='SUCCESS'){break;}else{Utilities.sleep(1000)}}kintoneApi('/k/v1/records','post',{app,records:generateRecords(sheet)})}

備考

  • Googleスプレッドシートのシート名が,kintoneのアプリ名に反映されます.
  • Googleスプレッドシート各グラフのタイトルが,kintoneのグラフ名に反映されます.
  • 「横棒グラフ」,「縦棒グラフ」,「折れ線グラフ」,「平滑線グラフ」,「面グラフ」,「円グラフ」,「表グラフ」のみに対応しています.
  • 「積み上げ表示」には対応しておりません.