[MFC] MFC์์ XLNT๋ฅผ ์ด์ฉํ ์์ (Excel)ํ์ผ ์ฝ๊ณ ์ฐ๊ธฐ (์์ ํฌํจ)
์๊ฐ
C#
์์๋ Microsoft.Office.Interop.Excel
dll์ ์ฌ์ฉํ์ฌ ๊ฐํธํ๊ฒ ์์
ํ์ผ์ ์ ๊ทผํ๊ณ , ๋ฐ์ดํฐ ์ฝ๊ณ ์ฐ๊ธฐ๊ฐ ํธ๋ฆฌํฉ๋๋ค. ํ์ง๋ง C++
์ด๋ MFC
๋ ์ ๊ณต๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์๋ค ๋ณด๋ ๋๋ฌด๋๋ ๋ถํธํฉ๋๋ค. ๊ตฌ๊ธ์ ๊ฒ์ํด๋ณด๋ฉด ๋๋ถ๋ถ Automation class(CXLEzAutomation)
๋ฅผ ์ฌ์ฉํ ๋ฐฉ๋ฒ๋ค์ด ๋์ค๋๋ฐ์. Github
์ฃผ์๋ ๊ฐ๋ฐ์ ๋งํฌ๊ฐ ์์ด ์
๋ฐ์ดํธ๋ ๋๋ ๊ฑด์ง, ๋ฒ๊ทธ๋ ์๋์ง ์ ์๊ฐ ์์ต๋๋ค. ๋๋ ์ง์ ํ์ผ์ ์ ๊ทผํ์ฌ ์ปค์คํฐ๋ง์ด์ฆ ๋ ํด๋์ค๋ฅผ ์ ๊ณตํ๋ ๊ฒ์๋ฌผ๋ ๋ณด์๋๋ฐ์. ์ด๊ฒ ์ญ์ ์ ์ฌ์ ์ธ ๋ฒ๊ทธ๋ผ๋ ๊ฐ, ๋ ์ด์ ์
๋ฐ์ดํธ๊ฐ ์์ด ๋ฒ์ฉ์ฑ์ด ๋ถ์กฑํ ๊ฒฝ์ฐ๋ ์์ต๋๋ค.
์ ์ญ์ ์ด๊ฒ ์ ๊ฒ ์๋ํด๋ณด๋ค๊ฐ XLNT ๋ผ์ด๋ธ๋ฌ๋ฆฌ
๋ฅผ ์๊ฒ๋์๊ณ , ๊ฐํธํ๊ฒ ์์
ํ์ผ ์ฝ๊ณ ์ฐ๊ธฐ ์์
์ด ๊ฐ๋ฅํ์ต๋๋ค. ์ด XLNT
๋ ์คํ์์ค ๊ธฐ๋ฐ์ C++
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก, ํฌ๋ก์ค ํ๋ซํผ
๊ฐ๋ฐ์ด ๊ฐ๋ฅํฉ๋๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์์ธํ ๋ด์ฉ์ ์๋ Github์ ์ ์ํ์ฌ ํ์ธํ์ธ์.
XLNT: https://github.com/tfussell/xlnt
๋ณธ๋ฌธ์ ์ํ ์ฝ๋๋ ํ๋จ์ ์ฒจ๋ถ๋์ด ์์ต๋๋ค.
์ค๋น ๋จ๊ณ
๋ณธ๋ฌธ์ ํ๋ก์ ํธ๋ Visual Studio 2017 x64
ํ๊ฒฝ์ MFC Dialog ํ๋ก์ ํธ
๋ก ์งํ๋ฉ๋๋ค. Visual Studio 2015
์์๋ ๋์ํ๋ ๊ฒ์ ํ์ธํ์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ XLNT
๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ CMake
ํ๋ก๊ทธ๋จ์ด ํ์ํฉ๋๋ค. ์ผ๋ฐ์ ์ธ ์์ฉ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ .Net
๋๋ C++
์ฉ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(dll, h, lib)
๋ฅผ ์ ๊ณตํ๋๋ฐ์. ์ด๋ฌํ ์คํ ์์ค ๊ธฐ๋ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ CMake
๋ฅผ ์ด์ฉํ์ฌ ๊ฐ๋ฐ์์ ํ๊ฒฝ์ ๋ง๊ฒ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋น๋ํด์ผ ํฉ๋๋ค.
CMake
๋ ์๋ ๋งํฌ์์ ๋ค์ด๋ก๋ ๊ฐ๋ฅํฉ๋๋ค.
๋งํฌ: https://cmake.org/download/
๋ง์ฝ, CMake
๊ฐ ๋ฌด์์ธ์ง ๋ชจ๋ฅด๊ฒ ๊ณ Visual Studio 2017 x64
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ง ํ์ํ๋ค๋ฉด, ์ ๊ฐ ๋ฏธ๋ฆฌ ๋น๋ํด ๋์ ํ์ผ์ ๋ค์ด๋ก๋ํ์ฌ ์ฌ์ฉํ์ธ์.
CMake๋ก XLNT ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ฑํ๊ธฐ
๋ฐ๋ผ ํ๊ธฐ ์ ์, ํ๋ ์ฃผ์์ฌํญ์ด ์์ต๋๋ค. XLNT
๋ฅผ ๋น๋ํ๋ ๊ณผ์ ์ค Compile Error
๊ฐ ๋ฐ์ํ๋๋ฐ์. ์ถ์ธกํ๊ธฐ๋ก๋ ์์ค ํ์ผ ์ผ๋ถ๊ฐ UTF-8๊ณผ ๊ด๋ จ๋ ๊ฒ์ผ๋ก ๋ณด์
๋๋ค. ํด๋น ์์ค ํ์ผ์ ๊ฐ์ ๋ก UTF-8๋ก ์ ์ฅํ๋ฉด ๋ฌธ์ ์์ด ๋น๋๋๊ณ , ์์ฑ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋๋ฐ ๋ฌธ์ ๋ ์์ต๋๋ค๋ง, ์กฐ๊ธ ์ฐ์ฐํ ๋ถ๋ถ์ด๊ธด ํฉ๋๋ค.
๊ทธ๋ผ, ์์ํ๊ฒ ์ต๋๋ค. XLNT Github์ ์ ์ํ์ฌ Source code (zip)
ํ์ผ์ ๋ค์ด๋ก๋ํ ํ ์์ถ์ ํด์ ํฉ๋๋ค. (์ ๋ XLNT 1.5๋ฅผ ๋ค์ด๋ก๋ํ์์ต๋๋ค.)
CMake
ํ๋ก๊ทธ๋จ์ ์คํํ๊ณ ์๋์ ์ค๋ช
์ฒ๋ผ ๊ฒฝ๋ก๋ฅผ ์ง์ ํฉ๋๋ค.
ํญ๋ชฉ | ์ค๋ช |
Where is the source code | Library์ Source code ๊ฒฝ๋ก๋ฅผ ์ ๋ ฅํฉ๋๋ค. |
Where to build the binaries | Build๋ ํ์ผ์ด ์์ฑ๋๋ ๊ฒฝ๋ก๋ฅผ ์ ๋ ฅํฉ๋๋ค. |
Configure
๋ฒํผ์ ํด๋ฆญํ๋ฉด ๊ฐ๋ฐ ํ๊ฒฝ์ ์
๋ ฅํ๋ ์ฐฝ์ด ํ์๋ฉ๋๋ค. ์์ ์ ๊ฐ๋ฐ ํ๊ฒฝ์ ๋ง์ถฐ ์
๋ ฅํ ํ Finish
๋ฒํผ์ ํด๋ฆญํฉ๋๋ค.
๊ฐ๋ฐ ํ๊ฒฝ์ ์ ๋ ฅํ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ๋น๋ ์์ฑ์ ๋ณ๊ฒฝํ๋ ํ๋ฉด์ด ๋ณด์ ๋๋ค. ์๋์ ์ค๋ช ์ฒ๋ผ ๊ฒฝ๋ก๋ฅผ ์์ ํฉ๋๋ค.
ํญ๋ชฉ | ์ค๋ช |
CMAKE_INSTALL_PREFIX | ๊ธฐ๋ณธ ๊ฒฝ๋ก์ ${BUILD_TYPE} ์ ๋ถ์ด๋ฉด Debug, Release ๋ชจ๋ ํด๋ ๋ณ๋ก ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์์ฑ. |
์
๋ ฅ์ ๋ง์ณค์ผ๋ฉด Generate
๋ฒํผ์ ํด๋ฆญํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ Where to build the binaries
์ ์
๋ ฅํ ๊ฒฝ๋ก์ ๋ค์ด๊ฐ ๋ณด๋ฉด ํ๋ก์ ํธ๊ฐ ์์ฑ๋์ด ์์ต๋๋ค. xlnt_all.sln
์ ์คํํฉ๋๋ค.
ALL_BUILD
ํ๋ก์ ํธ๋ฅผ ์ ํํ ํ ๋น๋ํฉ๋๋ค.
์์ ์๊ธฐํ ๋ฐ์ ๊ฐ์ด ๋น๋ ์คํจ๊ฐ ๋ฉ์์ง๊ฐ ๋ณด์ ๋๋ค.
์๋์ ์์น์์ ์๋ฌ๊ฐ ๋ฐ์ํ๋๋ฐ์.
์๋ฌ๊ฐ ๋ฐ์ํ ์์ค ํ์ผ์ ๋ฉ๋ชจ์ฅ์ผ๋ก ์ด์ ํ ๋ค์ ๋ฎ์ด์ฐ๊ธฐ๋ก ์ ์ฅํฉ๋๋ค.
์๋์ฒ๋ผ ๋ฉ๋ชจ์ฅ์ผ๋ก ์ด๊ณ '๋ค๋ฅธ ์ด๋ฆ์ผ๋ก ์ ์ฅ'์ ํด๋ฆญํ ํ ๋ฎ์ด์ฐ๊ธฐ๋ก ์ ์ฅํฉ๋๋ค.
๋ค์ Visual Studio๋ก ๋์์ค๋ฉด ์๋์ ๊ฒฝ๊ณ ๋ฉ์์ง๊ฐ ํ์๋ฉ๋๋ค. '๋ชจ๋ ์' ๋ฒํผ์ ํด๋ฆญํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋ค์ ๋น๋๋ฅผ ํ๋ฉด ์ฑ๊ณตํฉ๋๋ค.
๋ค์์ผ๋ก INSTALL
ํ๋ก์ ํธ๋ฅผ ์ ํํ๊ณ ๋น๋ํฉ๋๋ค. INSTALL ํ๋ก์ ํธ๋ ๋ณ๋ฌธ์ ์์ด ๋น๋์ ์ฑ๊ณตํฉ๋๋ค.
ํ๋ก์ ํธ ๋น๋ ์๋ฃ ํ binaries
๊ฒฝ๋ก์ installed
ํด๋๊ฐ ์์ฑ๋์ด ์์ต๋๋ค.
์ฌ๊ธฐ๊น์ง, ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ฑ ๊ณผ์ ์ด์์ต๋๋ค.
MFC์์ XLNT ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉํ๊ธฐ
MFC Dialog ํ๋ก์ ํธ
์์ฑ ํ, ์ด์ ์ ์์ฑํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ์ผ์ ๋ณต์ฌํ์ฌ ๋ถ์ฌ ๋ฃ์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ํ๋ก์ ํธ์ ์์ฑ์ ๋ณ๊ฒฝํฉ๋๋ค. ๋จผ์ , dll
์์น๋ฅผ ์ค์ ํฉ๋๋ค.
ํญ๋ชฉ | ๊ฐ |
๊ตฌ์ฑ ์์ฑ > ๋๋ฒ๊น > ํ๊ฒฝ | PATH=$(ProjectDir)\bin;%PATH% |
ํค๋ ํ์ผ
๊ฒฝ๋ก๋ฅผ ์ค์ ํฉ๋๋ค.
ํญ๋ชฉ | ๊ฐ |
๊ตฌ์ฑ ์์ฑ > C/C++ > ์ผ๋ฐ > ์ถ๊ฐ ํฌํจ ๋๋ ํฐ๋ฆฌ | $(ProjectDir)include; |
๋ง์ฐฌ๊ฐ์ง๋ก ๋ผ์ด๋ธ๋ฌ๋ฆฌ
๊ฒฝ๋ก๋ ์ค์ ํฉ๋๋ค.
ํญ๋ชฉ | ๊ฐ |
๊ตฌ์ฑ ์์ฑ > ๋ง์ปค > ์ผ๋ฐ > ์ถ๊ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋๋ ํฐ๋ฆฌ | $(ProjectDir)lib |
๋ง์ง๋ง์ผ๋ก ๋ถ๋ฌ์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
ํ์ผ์ ์
๋ ฅํฉ๋๋ค.
ํญ๋ชฉ | ๊ฐ |
๊ตฌ์ฑ ์์ฑ > ๋ง์ปค > ์ ๋ ฅ > ์ถ๊ฐ ์ข ์์ฑ | xlntd.lib |
์ฌ๊ธฐ๊น์ง ํ๋ก์ ํธ์ ์์ฑ ์ค์ ์ด์๊ณ , ์ด์ ํค๋ ํ์ผ์์ ๋ค์๊ณผ ๊ฐ์ด ํ์ผ์ include
ํฉ๋๋ค.
#include <xlnt/xlnt.hpp>
์ ๋ฐ๋ผ์ค์ จ๋์? ํ๋ก์ ํธ ์ค์ ๋จ๊ณ๊ฐ ๋ง์ ๋ณด์ด์ง๋ง, ๊ธฐ๋ณธ์ ์ผ๋ก ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฑฐ์น๋ ๋จ๊ณ์ด๋ฏ๋ก ๊ผญ ์์งํ์๊ธธ ๋ฐ๋๋๋ค.
์, ์ด์ ํ๋ก์ ํธ์ ๋ฒํผ ๋ ๊ฐ๋ฅผ ์ถ๊ฐํ๊ณ , ๊ฐ ๋ฒํผ ์ด๋ฒคํธ์ ์์ ๋ฐ์ดํฐ๋ฅผ ์์ฑํ๋ ์ฝ๋์ ์ฝ์ด์ค๋ ์ฝ๋๋ฅผ ์์ฑํด ๋ณด๊ฒ ์ต๋๋ค.
// ์์
ํ์ผ ์์ฑ ์์
void CExamXLNTDlg::OnBnClickedBtnCreate()
{
xlnt::workbook wb;
xlnt::worksheet ws = wb.active_sheet();
ws.cell("A1").value(5);
ws.cell("B2").value("string data");
ws.cell("C3").formula("=RAND()");
ws.merge_cells("C3:C4");
ws.freeze_panes("B2");
wb.save("example.xlsx");
}
// ์์
ํ์ผ ์ฝ์ด์ค๋ ์์
void CExamXLNTDlg::OnBnClickedBtnRead()
{
xlnt::workbook wb;
wb.load("example.xlsx");
xlnt::worksheet ws = wb.active_sheet();
int val = ws.cell("A1").value<int>();
}
์์
๋ฐ์ดํฐ ์์ฑ ๋ฒํผ์ ํด๋ฆญํ๋ฉด example.xlsx
ํ์ผ์ด ์์ฑ๋๊ณ , ํ์ผ์ ์ด๋ฉด ์๋์ ๊ฐ์ ๋ฐ์ดํฐ๊ฐ ์
๋ ฅ๋์ด ์์ต๋๋ค.
์์
๋ฐ์ดํฐ ๋ถ๋ฌ์ค๊ธฐ ๋ฒํผ์ ํด๋ฆญํ๋ฉด A1
์
์ ๊ฐ์ธ 5
๊ฐ ๋ฐํ๋ ๊ฒ์
๋๋ค.
๋ง์ฝ, ํ๋ก๊ทธ๋จ ์ข
๋ฃ ํ ์ถ๋ ฅ ์ฐฝ์ ๋ฉ๋ชจ๋ฆฌ ๋์
๋ฉ์์ง๊ฐ ๋ณด์ธ๋ค๋ฉด ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด MFC ์ฌ์ฉ
์ ์ ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ MFC ์ฌ์ฉ
์ผ๋ก ๋ณ๊ฒฝํด ๋ณด์ธ์. C++
์์๋ ๋ฐ์ํ์ง ์๊ณ , MFC
์์๋ง ๋ฐ์ํ๋ ๊ฒ์ผ๋ก ๋ณด์ False Memory
๋ก ์ถ์ธก๋ฉ๋๋ค.
๋ณธ๋ฌธ์ ์ํ ์ฝ๋๋ ์๋ ์ฒจ๋ถ ํ์ผ์ ์ฐธ๊ณ ํ์ธ์.
'Programming > MFC' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋๊ธ
์ด ๊ธ ๊ณต์ ํ๊ธฐ
-
๊ตฌ๋
ํ๊ธฐ
๊ตฌ๋ ํ๊ธฐ
-
์นด์นด์คํก
์นด์นด์คํก
-
๋ผ์ธ
๋ผ์ธ
-
ํธ์ํฐ
ํธ์ํฐ
-
Facebook
Facebook
-
์นด์นด์ค์คํ ๋ฆฌ
์นด์นด์ค์คํ ๋ฆฌ
-
๋ฐด๋
๋ฐด๋
-
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
-
Pocket
Pocket
-
Evernote
Evernote
๋ค๋ฅธ ๊ธ
-
[MFC] ๊ทธ๋ฆผํ(mspaint) ๋ง๋ค๊ธฐ ํ๋ก์ ํธ #2
[MFC] ๊ทธ๋ฆผํ(mspaint) ๋ง๋ค๊ธฐ ํ๋ก์ ํธ #2
2021.01.04 -
[MFC] ๊ทธ๋ฆผํ(mspaint) ๋ง๋ค๊ธฐ ํ๋ก์ ํธ #1
[MFC] ๊ทธ๋ฆผํ(mspaint) ๋ง๋ค๊ธฐ ํ๋ก์ ํธ #1
2020.12.31 -
[MFC] CFormView ๊ธฐ๋ฐ Dynamic Layout ์ ์ฉํ์ฌ ์ปจํธ๋กค Resizingํ๊ธฐ(์์ ํฌํจ)
[MFC] CFormView ๊ธฐ๋ฐ Dynamic Layout ์ ์ฉํ์ฌ ์ปจํธ๋กค Resizingํ๊ธฐ(์์ ํฌํจ)
2020.05.19 -
[MFC] Dynamic Layout ์ ์ฉํ์ฌ ์ปจํธ๋กค Resizingํ๊ธฐ(์์ ํฌํจ)
[MFC] Dynamic Layout ์ ์ฉํ์ฌ ์ปจํธ๋กค Resizingํ๊ธฐ(์์ ํฌํจ)
2020.05.16