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で収支の計算をする記録にて