LoginSignup
0
0

More than 1 year has passed since last update.

GASでWebアプリ「映画鑑賞記録」を作る⑮ / 新年(2022年)に対応する

Last updated at Posted at 2022-02-16

今回やること

 2022年になりましたので、鑑賞履歴を新しくします。

今年用の「映画鑑賞記録」を作成

 新しい年になったら、新しい「映画鑑賞記録」(スプレッドシート)を準備します。
  ① 2021年の「映画鑑賞記録」をコピーして、新しいスプレッドシートファイルを
   作成します。ファイル名は任意で構いません。
  ② ①で作成した「映画鑑賞記録」の[鑑賞履歴]シートのデータをクリアします。
[鑑賞履歴]シート.png
 プログラムの設定を、2022年用に追加・修正します。

Config.gs

 YearSettingsに2022年の設定を追加します。(下図:1番上の行)
 fileIdには、前述で作成したスプレッド-シートのファイルIDを記載します。('zzzzz…zz'部分)
  ※ファイルID は、スプレッドシートのURLの…/d//edit…の間の文字列です。(上図:黄色の部分)

 const YearSettings = [
  {id: '2022', year: '2022年', fileId: 'zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz'},  // ← この行を追加
  {id: '2021', year: '2021年', fileId: 'yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy'},
  {id: '2020', year: '2020年', fileId: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'}
]

Vuejs.html

 selectedYearの値を'2022年'に変更します。画面の初期表示時に、この値(年)が使用されます。
 プログラムの処理としては、Config.gsYearSettingsyearとマッチングされます。

var app = new Vue({
  el: '#app',
  data: {
    processingType: '記録追加',
    message: 'テスト',
    subject: ' 追 加 ',
   :
    viewingTypes : [],
    selectedYear: '2022年',  // ← この値を変更する
    optionYear: []
  },
  :

 本当は、上記の作業だけで対応できる筈だったのですが、[鑑賞履歴]シートが空だと次のエラーが発生する事が分かりました。
エラー表示.png
 この不具合に対応する為、下記のプログラム修正を行いました。

プログラムの修正

ViewingRecord.gs

 getReportListBy()関数を修正します。
  ①resultsを空の配列で初期化する処理を追加します。
  ②resultsにデータをセットする処理を、lastRow3以上の時に実行する様に
   変更します。
   ([鑑賞履歴]シートにデータがある時のみ、resultsにデータをセットする。)

function getReportListBy(cond) {
  cond.type = 'viewingRecord';
  Logger.log(cond);

  var fileId = getFileIdFromYearSettings(cond.year);
  var sheet = SpreadsheetApp.openById(fileId).getSheetByName('鑑賞履歴');
  var lastRow = sheet.getLastRow();
  var results = [];   // ← この行を追加する
  if(lastRow >= 3) {  // ← この行を追加する
    results = sheet.getRange(3, 2, (lastRow - 2), 6).getValues();  // ← var を削除
  }                   // ← この行を追加する

  return JSON.stringify(results);
}
以前のコード
function getReportListBy(cond) {
  cond.type = "viewingRecord";
  Logger.log(cond);

  var sheet = SpreadsheetApp.openById(ViewingRecordID).getSheetByName('鑑賞履歴');
  var lastRow = sheet.getLastRow();
  var results = sheet.getRange(3, 2, (lastRow - 2), 6).getValues();

  return JSON.stringify(results);
}

結果

 エラーが表示されなくなりました。
結果.png
◆前の記事 GASでWebアプリ「映画鑑賞記録」を作る⑭
◆次の記事 GASでWebアプリ「映画鑑賞記録」を作る⑯

◆索引 GASでWebアプリ「映画鑑賞記録」を作る《索引》

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0