연동 안됨
총 입금액
— 건
현 평가액
조회 중...
총 분배금 수령
— 건
총 수익률
평가손익 / 총입금액
전체 거래내역
거래일자 구분 원본거래종류 종목코드 종목명 수량 단가 거래금액 수수료

⚙ 설정에서 구글 스프레드시트를 연동하면 데이터가 표시됩니다

0 건
엑셀 업로드 증권사 거래내역 엑셀을 업로드하면 자동 파싱됩니다

엑셀 파일을 드래그하거나 클릭해서 업로드

.xlsx 형식 지원 (증권사 거래내역 원본)
📌 업로드 방법: 증권사 앱/HTS → 거래내역 → 엑셀 다운로드 → 여기에 업로드
📌 파싱 후 구글 스프레드시트에 자동으로 추가됩니다
📌 중복 거래일자는 자동으로 건너뜁니다
거래 추가
새 거래 입력 구글 스프레드시트 '전체거래내역' 시트에 자동 추가됩니다
포트폴리오
종목명 종목코드 보유수량 매입평균단가 총매수금액 총분배금 수익률

데이터를 불러오는 중...

분배금 내역
총 분배금 수령
수령 건수
분배금/입금 수익률
수령일자 종목코드 종목명 수령금액 누적합계 연도

데이터를 불러오는 중...

입금 내역
입금일자 거래종류 입금금액 누적입금 연도

데이터를 불러오는 중...

설정
구글 스프레드시트 연동
📋 연동 방법 (Google Apps Script)

1. 구글 스프레드시트 열기 → 확장 프로그램 → Apps Script
2. 아래 코드를 붙여넣고 저장
3. 배포 → 새 배포 → 유형: 웹앱 → 액세스: 모든 사용자
4. 생성된 URL을 위에 입력
function doGet(e) { const sheet = SpreadsheetApp.getActiveSpreadsheet(); const action = e.parameter.action; if (action === 'read') { const sheetName = e.parameter.sheet || '전체거래내역'; const ws = sheet.getSheetByName(sheetName); const data = ws.getDataRange().getValues(); return ContentService .createTextOutput(JSON.stringify({ ok: true, data: data })) .setMimeType(ContentService.MimeType.JSON); } if (action === 'prices') { const codes = e.parameter.codes.split(','); const prices = {}; codes.forEach(code => { try { const price = FinanceApp.getStockInfo(code).price; prices[code] = price; } catch(err) { // GOOGLEFINANCE 함수로 조회 try { const formula = '=GOOGLEFINANCE("' + code + '","price")'; const temp = sheet.getSheetByName('전체거래내역'); prices[code] = 0; } catch(e2) {} } }); return ContentService .createTextOutput(JSON.stringify({ ok: true, prices: prices })) .setMimeType(ContentService.MimeType.JSON); } if (action === 'append') { const sheetName = e.parameter.sheet || '전체거래내역'; const ws = sheet.getSheetByName(sheetName); const row = JSON.parse(e.parameter.row); ws.appendRow(row); return ContentService .createTextOutput(JSON.stringify({ ok: true })) .setMimeType(ContentService.MimeType.JSON); } } function doPost(e) { const sheet = SpreadsheetApp.getActiveSpreadsheet(); const body = JSON.parse(e.postData.contents); if (body.action === 'append_batch') { const ws = sheet.getSheetByName(body.sheet || '전체거래내역'); body.rows.forEach(row => ws.appendRow(row)); return ContentService .createTextOutput(JSON.stringify({ ok: true, added: body.rows.length })) .setMimeType(ContentService.MimeType.JSON); } if (body.action === 'prices') { const codes = body.codes; const prices = {}; // 임시 셀에 GOOGLEFINANCE 수식으로 조회 const ws = sheet.getSheetByName('전체거래내역'); codes.forEach((code, i) => { try { const cell = ws.getRange(1000 + i, 20); cell.setFormula('=GOOGLEFINANCE("' + code + '","price")'); SpreadsheetApp.flush(); prices[code] = cell.getValue(); cell.clear(); } catch(err) { prices[code] = 0; } }); return ContentService .createTextOutput(JSON.stringify({ ok: true, prices: prices })) .setMimeType(ContentService.MimeType.JSON); } }