スプレッドシートで精算したい
きっかけはこの記事の最後の方
Webシステムにしたいね、なんて思ってはいたものの、
「そうするとログイン認証とかないとなあ」とか、
「万が一他の人に公開するときにハードル高そうだなあ」とか。
他の人の情報もちたくないし…………
結局だいたい今ってそのグループでスプレッドシート用意してなんかうまいことやっていると思うんだよね。
というわけで、
スプレッドシートでつくる
でも大体のことはスプレッドシートを開かなくてもできるようにする
というのを目標にしました。
途中経過
デザインセンスがないのは置いといて…

スプレッドシートの中にhtml, js, cssを入れて、スプレッドシートを開くんじゃなくてWebページで操作できるようにしました。
メニュー
精算入力
渡すリスト(精算担当別)
精算済消込
未精算品リスト
名前は後で考えましょ。
精算入力

参加者・精算担当はスプレッドシートに定義してあるメンバーから取得してチェックボックス、プルダウンに。
日付選択はflatpickrで

ログファイルを選択するか、直接ログを貼付けて整形すると…

ROのログは、ゲーム内のウィンドウの幅で改行されるので、適当に調整します。

同名のアイテムが複数ある場合はまとめて1行にしています。
精算対象にするアイテムにチェックを付けて(※)登録します。
※自分のアイテム取得も混じっていたり、一回で拾いきれないアイテムがあったりするからね。
入力したデータはスプレッドシートに書き込みしてクエリ関数で集計、ピボット化しています。
金塊なんかをスプレッドシート側にNPC売却額を入れておくとZenyに変えて集計します。

渡すリスト(精算担当別)

回廊のときは毎日精算していられなくてどんどんたまっていくので、
誰が持っているのか、誰に渡すのかをまとめて表に。
精算入力で登録されたデータがピボットテーブルになっているのでそれを取得して表示します。
精算済消込
さっきの担当別一覧は精算品を持っている人にフォーカスをあてているんですが、実際に渡すときにそれはとても不便なので、渡す相手にフォーカスをあてた表を作ります。

渡したアイテムにチェックをつけて消込ボタンを押すと、スプレッドシートのデータを更新しにいきます。
当然、渡したよっていうフラグがたつので、精算担当別の一覧や消込一覧からは消えます。
未精算品リスト
担当別や消込も未精算品が一覧になるんですが、端数だとか装備品は単純に人数割できないことが多いので、渡していないアイテムを一覧にします。
欠片とかその他のアイテムをサマって確認できたらまとめて買いますとかあるかもしれないですね(ないかもしれないけれど)。

処理中のぐるぐる
スプレッドシートへのアクセスは何かすごい待たされることがあるので、処理中はぐるぐるするようにしました。

これからやりたいこと
メンバー編集
スプレッドシートは当然直接メンバーを追加したり編集したりできるので、スプレッドシートを開かずにやりたい。
売れたアイテムを登録したい

スプレッドシートは、金額を入れたら人数割りしてZenyとして集計するようにしているので、それをWebページから入力したいですね。
スプレッドシートである意味、Webページである意味はあるか?
ここまで作っといて何なんですが話は最初に戻って、
システム化した方が動作は軽快だよね、だとか
スプレッドシートでできるからいいじゃん、だとか。
そうなんだけど、システム化すると他のユーザ情報をしなきゃ…でも絶対に管理したくない。
スプレッドシートならそのグループごとにファイルが別になるとので、誰でも簡単に使い始められる。
データがたまるとファイル自体が重くなる懸念があるため、スプレッドシートを開かずにWebページで。
一番の理由は勉強がてらやっていて楽しいから
jsからGASへアクセスするとかね。