以下のようなCSVがあったとします。
その中で金額の値を合算するJavaScriptのサンプルです。
ID,社名,種類,商品,金額,評価
1,A社,入力機器,マウス,5000,A
2,B社,入力機器,マウス,6000,B
3,A社,入力機器,キーボード,2500,B
4,B社,入力機器,キーボード,8000,A
3,A社,出力機器,ディスプレイ,2500,B
4,C社,出力機器,ディスプレイ,8000,A
HTMLはこちら
<input type="file" name="select" id="demo_btn">
<div id="demo_result"></div>
JSはこちら
// 読み込みボタンがchangeになったら実行
var read_btn = document.querySelector("#demo_btn");
read_btn.addEventListener("change", file_read, false);
function file_read(event) {
// 読み込まれたファイルの情報をセット
var file = event.target.files[0];
var name = file.name;
var pattern = '.csv';
// csvファイルのチェック
if(name.indexOf(pattern) > -1){
// readerオブジェクトを作成
var reader = new FileReader();
// ファイル読み取り
reader.readAsText(file);
// 読み込まれたファイルデータを渡す
reader.onload = function(e) {
//make_view(e.target.result);
make_view2(e.target.result);
};
// 読み込みに失敗した場合
reader.onerror = function() {
alert("ファイルが読み取れません");
};
}
}
function make_view2(csvarr){
//改行ごとに配列にする
var tmp = csvarr.split("\n");
var data = [];
for (var i = 0; i < tmp.length; i++) {
data[i] = tmp[i].split(",");
}
//一列目削除
data.shift();
//2カラム取得
var c2 = [];
for (var i = 0; i < data.length; i++) {
c2[i] = data[i][1];
}
c2_uniq = uniq(c2);
$("#demo_result").append('< div id="demo_all">< /div>');
$("#demo_all").append('< div>会社別合計< /div>');
for (var i = 0; i < c2_uniq.length; i++) {
res = sumif(data,4,c2_uniq[i],1);
append_view("#demo_all",c2_uniq[i],res);
}
$("#demo_result").append('< div id="demo_a">< /div>');
$("#demo_a").append('< div>評価Aのみ< /div>');
for (var i = 0; i < c2_uniq.length; i++) {
res = sumif(data,4,'A',5,c2_uniq[i],1);
append_view("#demo_a",c2_uniq[i],res);
}
}
//配列の値をユニークにする関数
function uniq(array) {
const uniquedArray = [];
for (const elem of array) {
if (uniquedArray.indexOf(elem) < 0)
uniquedArray.push(elem);
}
return uniquedArray;
}
//エクセルのsumifのような関数 2つまで追加条件が可能
//エクセルのセルのように二次元配列をdataに渡すとsum_xを足してくれる
//searchは探す値、search_xは探す列
function sumif(data,sum_x,search,search_x,search2,search_x2){
sum_result = 0;
for (var i = 0; i < data.length; i++) {
if(data[i][search_x] == search){
if(search_x2 && search_x2){
if(data[i][search_x2] == search2){
sum_result += Number(data[i][sum_x]);
}
}else{
sum_result += Number(data[i][sum_x]);
}
}
}
return sum_result;
}
//csvデータでHTMLを組む
function append_view(id,title,value) {
$(id).append('< div class="flex">'
+'< div>' + title + '< /div>'
+'< div>' + value + '< /div>'
+'< /div>');
}