728x90
반응형
1. 숫자 서식으로 입력
1) 엑셀 관련 클래스 생성
// HsExcel.h
class HsExcel : public CDialog
{
...
protected:
_Application* m_pApp;
Workbooks m_books;
_Workbook m_book;
Worksheets m_sheets;
_Worksheet m_sheet;
ExRange m_range;
Borders m_borders;
Outline m_outline;
}
// HsExcel.cpp
void HsExcel::SetValue(long col, long row, double v, int decimal)
{
SetRange(col, row);
SetValue(v, decimal);
}
void HsExcel::SetRange(long col, long row)
{
CString cell=L"";
cell.Format(L"%s%d", GetColName(col), row);
m_range=m_sheet.GetRange(COleVariant(cell), COleVariant(cell));
m_borders=m_range.GetBorders();
}
void HsExcel::SetValue(double v, int decimal)
{
CString decFormat=L"0.";
for(int i=0; i<decimal; i++)
{
decFormat=decFormat+L"0";
}
decFormat=decFormat+L"_ ";
m_range.SetNumberFormatLocal(COleVariant(decFormat));
m_range.SetValue2(COleVariant(v));
}
void HsExcel::SetFormula(long col, long row, CString formula)
{
SetRange(col, row);
m_range.SetFormula(COleVariant(formula));
}
2) 엑셀 클래스를 활용하여 값 입력
void ExampleCtrl::MakeTestSheet(HsExcel& ex)
{
// 데이터를 입력할 위치: 1행 1열
int col = 1, row = 1;
double fValue = 1.234;
// 마지막 인수인 3은 소수점 3자리 까지 표현한다는 의미
ex.SetValue(col, row, fValue, 3);
}
2. 텍스트 서식으로 입력
다른 방법으로는 다음과 같이 엑셀 TEXT 함수를 활용하여 값을 입력하는 방법이다.
하지만, 이러한 방법은 숫자가 아닌 텍스트로 입력하기 때문에 수식계산을 할 수 없다는 문제점이 있다.
void ExampleCtrl::MakeTestSheet(HsExcel& ex)
{
// 데이터를 입력할 위치: 1행 1열
int col = 1, row = 1;
double fValue = 1.234;
CString strFormulaText = L"";
// 서식 지정
strFormulaText.Format(L"=Text(%f, \"#0.000#\")", fValue);
// 서식 입력
ex.SetFormula(col, row, strFormulaTxt);
}
이때, 고려하지 않은 사항이 있었다.
엑셀에서 데이터를 입력할 때, 소수점 뒤에 0을 입력하지 못한다는 점이었다. 예) 1.00000 을 1.0으로 입력
즉, 사용자가 1.00000 을 입력하는 방식은, 서식을 적용하여 소수점으로 보이게 하는 방법인데
그렇게하면 데이터를 읽어올 때, 1.00000 이 아닌 1.0으로읽어오게되었다...
이를 해결하기 위해서는 서식이 무엇인지 얻어와야하는데, 이는 아직 찾지 못했다..
728x90
반응형
'응용 프로그램 개발 > C++, MFC, Windows' 카테고리의 다른 글
[C++/EXCEL] #DIV/0! 데이터 읽을 때 발생하는 오류 문제 (0) | 2021.03.05 |
---|---|
[Excel] 엑셀 파일 / 시트 / 데이터 비교 하기 ( 조건부 서식 ) (0) | 2021.02.23 |
[MFC] CString 동적 배열, 정적 배열 차이 (0) | 2021.01.26 |
[MFC] CString에서 확장자 제거 / 파일명 변경 (0) | 2020.12.23 |
[MFC] SendMessage 예제 (0) | 2020.12.22 |