dataviewJS勉強ログ-収支計算
まず表を作ってみる
どうやら配列をdv.tableメソッドに入れてあげるといいらしい
k = ["日付", ,"内訳", "収入", "支出"]
d = [
["2024-09-09", "駐輪場代", "0", "60"],
["2024-09-20", "SRA/給料", "50000", "0"]
]
dv.table(k, d)これをレンダリングするとこうなる。
const siwake = ["日付", ,"内訳", "収入", "支出"]
const siwakehyou = [
["2024-09-09", "駐輪場代", "0", "60"],
["2024-09-20", "SRA/給料", "50000", "0"]
]
dv.table(siwake, siwakehyou)なんかエラーでるあ
ちょっとforumのほういこう


スニペット集があったからこれ見ていく。
Evaluation Error: TypeError: d is not a functionこのエラーなんだ?
普通のプレインテキストだとできるけど
dv.el("b", "This is some bold text");ちょっと公式リファレンス行く

なんか再起動したらレンダリングできたしい

いいねこれ
これをいじっていい感じにしていこう
const siwake = ["日付", ,"内訳", "収入", "支出"]
const siwakehyou = [
["2024-09-09", "駐輪場代", "0", "60"],
["2024-09-20", "SRA/給料", "50000", "0"]
]
dv.table(siwake, siwakehyou)const siwake = ["日付", ,"内訳", "収入", "支出"]ここはこんな感じでいいのかな?
合計もつけるか
const column = ["日付", ,"内訳", "収入", "支出", "残金"]
const siwakehyou = [
["2024-09-09", "駐輪場代", "0", "60"],
["2024-09-20", "SRA/給料", "50000", "0"]
]
dv.table(column, siwakehyou)でこの仕訳票を作っていく
const column = ["日付", ,"内訳", "収入", "支出", "残金"]
const siwakehyou = [
["2024-09-09", "駐輪場代", "0", "60", "-60"],
["2024-09-20", "SRA/給料", "50000", "0", "49940"]
]
dv.table(column, siwakehyou)まず
#仕訳のタグがあるファイルを抜き出して日付の欄に書いてこう。
どうやらタグが含まれているファイルは以下のコードで抜き出せるらしい。
```dataviewjs
let filesWithTag = dv.pages('#仕訳');
let fileArray = Array.from(filesWithTag);
```
実際に使用してみる。
```dataviewjs
let filesWithTag = dv.pages('#仕訳');
let fileArray = Array.from(filesWithTag);
dv.el("b", fileArray[0].file.name + "日は" + fileArray[0].金額 + "円");
```
これで
let filesWithTag = dv.pages('#仕訳');
let fileArray = Array.from(filesWithTag);
dv.el("b", fileArray[0].file.name + "日は" + fileArray[0].金額 + "円");ちゃんと60が取れてる。
あとはこれを全部のノートでやっていく感じだけど
日付はまあデイリーノートからとるとして、使った内容と収入か支出かとその金額を抜き出したい。
その三つ。
もう一回2024-09-09のデータを見てみる。
let filesWithTag = dv.pages('#仕訳');
let fileArray = Array.from(filesWithTag);
dv.el("b", fileArray[0]);どうやら以下のような感じに書いても

データ上ではネストしてくれないらしい

発見した

こうかいたらネストされた!

これを使ってやっていこう。
フォーマットは
収入なら[収入::内容:金額]
支出なら[支出::内容:金額]
で行こう。
```dataviewjs
const column = ["日付", ,"内訳", "収入", "支出", "残金"];
let table = [];
let filesWithTag = dv.pages('#仕訳');
let files = Array.from(filesWithTag);
let zankin = 0;
for(let file of files){
getShunyu(file);
getSishutu(file);
}
function addListItem(fileName, utiwake, shunyu, sishutu, zankin){
let item = [fileName, utiwake, shunyu, sishutu, zankin];
table.push(item);
}
function getShunyu(file){
if(file.収入.constructor === String){
let item = file.収入.split(":");
addListItem(file.file.name, item[0], item[1], 0, zankin);
return;
}
for(let shunyu of file.収入){
let item = shunyu.split(":");
item = combineUniData(item);
addListItem(file.file.name, item[0], item[1], 0, zankin);
}
}
function getSishutu(file){
if(file.支出.constructor === String){
let item = file.支出.split(":");
addListItem(file.file.name, item[0], item[1], 0, zankin);
return;
}
for(let sishutu of file.支出){
let item = sishutu.split(":");
item = combineUniData(item);
addListItem(file.file.name, item[0], 0, item[1], zankin);
}
}
function combineUniData(item){
if(item[0].length !== 1) return item;
return item.join();
}
dv.table(column, table)
```
ようやくこんな感じでできた。
const column = ["日付", ,"内訳", "収入", "支出", "残金"];
let table = [];
let filesWithTag = dv.pages('#仕訳');
let files = Array.from(filesWithTag);
let zankin = 0;
for(let file of files){
getShunyu(file);
getSishutu(file);
}
function addListItem(fileName, utiwake, shunyu, sishutu, zankin){
let item = [fileName, utiwake, shunyu, sishutu, zankin];
table.push(item);
}
function getShunyu(file){
if(file.収入.constructor === String){
let item = file.収入.split(":");
addListItem(file.file.name, item[0], item[1], 0, zankin);
return;
}
for(let shunyu of file.収入){
let item = shunyu.split(":");
item = combineUniData(item);
addListItem(file.file.name, item[0], item[1], 0, zankin);
}
}
function getSishutu(file){
if(file.支出.constructor === String){
let item = file.支出.split(":");
addListItem(file.file.name, item[0], item[1], 0, zankin);
return;
}
for(let sishutu of file.支出){
let item = sishutu.split(":");
item = combineUniData(item);
addListItem(file.file.name, item[0], 0, item[1], zankin);
}
}
function combineUniData(item){
if(item[0].length !== 1) return item;
return item.join();
}
dv.table(column, table)あとはこれをどう編集していくかだね
これ以降はObsidianで収支の計算をする記録にて