총 입금액
—
— 건
현 평가액
조회 중...
총 분배금 수령
—
— 건
총 수익률
—
평가손익 / 총입금액
전체 거래내역
| 거래일자 | 구분 | 원본거래종류 | 종목코드 | 종목명 | 수량 | 단가 | 거래금액 | 수수료 |
|---|---|---|---|---|---|---|---|---|
|
⚙ 설정에서 구글 스프레드시트를 연동하면 데이터가 표시됩니다 |
||||||||
0 건
엑셀 업로드
증권사 거래내역 엑셀을 업로드하면 자동 파싱됩니다
엑셀 파일을 드래그하거나 클릭해서 업로드
.xlsx 형식 지원 (증권사 거래내역 원본)
📌 업로드 방법: 증권사 앱/HTS → 거래내역 → 엑셀 다운로드 → 여기에 업로드
📌 파싱 후 구글 스프레드시트에 자동으로 추가됩니다
📌 중복 거래일자는 자동으로 건너뜁니다
📌 파싱 후 구글 스프레드시트에 자동으로 추가됩니다
📌 중복 거래일자는 자동으로 건너뜁니다
거래 추가
새 거래 입력
구글 스프레드시트 '전체거래내역' 시트에 자동 추가됩니다
포트폴리오
| 종목명 | 종목코드 | 보유수량 | 매입평균단가 | 총매수금액 | 총분배금 | 수익률 |
|---|---|---|---|---|---|---|
데이터를 불러오는 중... | ||||||
분배금 내역
총 분배금 수령
—
수령 건수
—
분배금/입금 수익률
—
| 수령일자 | 종목코드 | 종목명 | 수령금액 | 누적합계 | 연도 |
|---|---|---|---|---|---|
데이터를 불러오는 중... | |||||
입금 내역
| 입금일자 | 거래종류 | 입금금액 | 누적입금 | 연도 |
|---|---|---|---|---|
데이터를 불러오는 중... | ||||
설정
구글 스프레드시트 연동
📋 연동 방법 (Google Apps Script)
1. 구글 스프레드시트 열기 → 확장 프로그램 → Apps Script
2. 아래 코드를 붙여넣고 저장
3. 배포 → 새 배포 → 유형: 웹앱 → 액세스: 모든 사용자
4. 생성된 URL을 위에 입력
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);
}
}