[.Net] C#์์ ์์ (Excel) ํ์ผ ๋ค๋ฃจ๋ ๋ฐฉ๋ฒ (์์ ํฌํจ)
C#์์ ์ฝ๊ฒ ์์ (Excel) ์ฌ์ฉํ๊ธฐ
์ด์ ์ MFC
์์ XLNT ๋ผ์ด๋ธ๋ฌ๋ฆฌ
๋ฅผ ์ฌ์ฉํ ์์
ํ์ผ ๋ค๋ฃจ๋ ๋ฐฉ๋ฒ์ ์๊ฐํ ์ ์ด ์์ต๋๋ค.
[MFC] MFC์์ XLNT๋ฅผ ์ด์ฉํ ์์ (Excel)ํ์ผ ์ฝ๊ณ ์ฐ๊ธฐ (์์ ํฌํจ)
MFC
์์๋ XLNT ๋ผ์ด๋ธ๋ฌ๋ฆฌ
๋ฅผ CMake
๋ก ๋น๋ํ๊ณ , ํ๋ก์ ํธ์ ์ค์ ํ๋ ๋ฑ์ ๊ณผ์ ์ด ๊ท์ฐฎ์์ต๋๋ค. ํ์ง๋ง C#์ ๋ค๋ฆ
๋๋ค. ๋๊ฒ(NuGet)
์์ Excel dll
๋ง ์ค์นํ๋ฉด ๋ฐ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
๊ทธ๋ผ, ๋ณธ๋ฌธ์์ ๋ณธ๊ฒฉ์ ์ผ๋ก C#์์ ์์ ํ์ผ์ ๋ค๋ฃจ๊ธฐ ์ํ ๋ฐฉ๋ฒ์ ์ค๋ช ํ๊ฒ ์ต๋๋ค.
๋ณธ๋ฌธ์ ์ํ ์ฝ๋๋ ํ๋จ์ ์ฒจ๋ถ๋์ด ์์ต๋๋ค.
์ค๋น ๋จ๊ณ
ExamWinformExcel
์ด๋ผ๋ ์ด๋ฆ์ WinForm ํ๋ก์ ํธ๋ฅผ ์์ฑํ๊ณ , NuGet ํจํค์ง ๊ด๋ฆฌ ๋ฉ๋ด๋ฅผ ํด๋ฆญํฉ๋๋ค.
์ฐพ์๋ณด๊ธฐ ํญ์์ Excel์ ๊ฒ์ํ๊ณ , Microsoft.Office.Interop.Excel
ํญ๋ชฉ์ ์ ํํ ํ ์ค์น ๋ฒํผ์ ํด๋ฆญํฉ๋๋ค.
์ค์น๊ฐ ์๋ฃ๋๋ฉด ์๋์ ๋ค์ ์คํ์ด์ค๋ฅผ ์ ์ํฉ๋๋ค.
using Microsoft.Office.Interop.Excel;
Excel ํ์ผ ๋ถ๋ฌ์ค๊ธฐ
์ปดํจํฐ์ ์กด์ฌํ๋ ์์ ํ์ผ์ ๋ถ๋ฌ์ค๋๋ก ํ๊ฒ ์ต๋๋ค.
using Microsoft.Office.Interop.Excel;
using System.Runtime.InteropServices;
private void buttonOpen_Click(object sender, EventArgs e)
{
Microsoft.Office.Interop.Excel.Application application = null;
Workbook workBook = null;
try
{
OpenFileDialog dlg = new OpenFileDialog();
if (dlg.ShowDialog() != DialogResult.OK)
return;
//Excel ํ๋ก๊ทธ๋จ ์คํ
application = new Microsoft.Office.Interop.Excel.Application();
//Excel ํ๋ฉด ๋์ฐ๊ธฐ ์ต์
application.Visible = true;
//ํ์ผ๋ก๋ถํฐ ๋ถ๋ฌ์ค๊ธฐ
workBook = application.Workbooks.Open(dlg.FileName);
}
catch(Exception exc)
{
MessageBox.Show(exc.Message);
}
finally
{
//๋ณ๊ฒฝ์ ์ ์ฅํ๋ฉด์ ๋ซ๊ธฐ
workBook.Close(true);
//Excel ํ๋ก๊ทธ๋จ ์ข
๋ฃ
application.Quit();
//์ค๋ธ์ ํธ ํด์
ReleaseExcelObject(workBook);
ReleaseExcelObject(application);
}
}
private void ReleaseExcelObject(object obj)
{
try
{
if (obj != null)
{
Marshal.ReleaseComObject(obj);
obj = null;
}
}
catch (Exception ex)
{
obj = null;
throw ex;
}
finally
{
GC.Collect();
}
}
์ ์ฝ๋๋ฅผ ๋ณด๋ฉด, Application
๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ Workbook
๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ์์์
๋๋ค. ํด์ ํ ๋๋ ๋ฐ๋๋ก Workbook
๊ฐ์ฒด๋ฅผ ๋ซ๊ณ Application
๊ฐ์ฒด๋ฅผ ์ข
๋ฃํ์ฃ . ๋ฉ๋ชจ๋ฆฌ ํด์ ์์๋ ๋์ผํฉ๋๋ค. ์ด ์์๋ฅผ ๊ผญ ์ง์ผ์ผ ์์ธ ๋ฉ์์ง๊ฐ ๋ฐ์ํ์ง ์์ต๋๋ค.
์ฝ๋์์ 10๋ฒ์งธ ์ฝ๋๋ Excel ํ๋ฉด์ ๋์ธ์ง์ ๋ํ ์ต์
์
๋๋ค. ์ด ์ฝ๋ ํ ์ค์ด ์คํ๋๋ฉด ์๋์ ๊ฐ์ด ๋น์ด์๋ ์์
ํ๋ก๊ทธ๋จ์ด ์คํ๋ฉ๋๋ค. ๋ง์ฝ, ์
๋ฌด ์๋ํ ํ๋ก๊ทธ๋จ์ด๋ผ๋ฉด ๊ตณ์ด ๋์ธ ํ์๊ฐ ์๊ฒ ์ฃ ? ๊ทธ๋ด ๊ฒฝ์ฐ์๋ false
๋ก ์ค์ ํ๋ฉด ๋ฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ 12๋ฒ์งธ ์ฝ๋๊ฐ ์คํ๋๋ฉด ํน์ ๊ฒฝ๋ก์ ํ์ผ์ ์ ์์ ์ผ๋ก ๋ถ๋ฌ์ต๋๋ค.
Excel ํ์ผ ์ ์ฅํ๊ธฐ
์ ์ฅํ๋ ๊ณผ์ ์ ๋ถ๋ฌ์ค๋ ๊ณผ์ ๊ณผ ์ ์ฌํฉ๋๋ค.
private void buttonSave_Click(object sender, EventArgs e)
{
Microsoft.Office.Interop.Excel.Application application = null;
Workbook workBook = null;
try
{
SaveFileDialog dlg = new SaveFileDialog();
dlg.Filter = "xlsx files|*.xlsx";
if (dlg.ShowDialog() != DialogResult.OK)
return;
application = new Microsoft.Office.Interop.Excel.Application();
application.Visible = true;
//Workbook ์์ฑ
workBook = application.Workbooks.Add();
//ํน์ ๊ฒฝ๋ก์ ์์
ํ์ผ๋ก ์ ์ฅ
workBook.SaveAs(dlg.FileName, XlFileFormat.xlWorkbookDefault);
}
catch (Exception exc)
{
MessageBox.Show(exc.Message);
}
finally
{
workBook.Close(true);
application.Quit();
ReleaseExcelObject(workBook);
ReleaseExcelObject(application);
}
}
๋ถ๋ฌ์ค๊ธฐ์ ๋ค๋ฅธ ๋ถ๋ถ์ 13๋ฒ์งธ, 15๋ฒ์งธ ์ฝ๋์
๋๋ค. 13๋ฒ์งธ ์ฝ๋๋ ๋น์ด์๋ Application
์ ์๋ก์ด Workbook
์ ์ถ๊ฐํ๋ ๊ฒ์ด๊ณ , 15๋ฒ์งธ ์ฝ๋๋ ํน์ ๊ฒฝ๋ก์ ์์
ํ์ผ๋ก ์ ์ฅํ๋ ๊ฒ์
๋๋ค. ์ ์ฅํ๋ ๊ณผ์ ๋ ์์ฃผ ๊ฐ๋จํฉ๋๋ค.
์ํธ(Sheet) ์ถ๊ฐ ๋ฐ ์ด๋ฆ ๋ณ๊ฒฝํ๊ธฐ
์ด๋ฒ์๋ ์๋ก ๋ง๋ ์์
ํ์ผ์ Sheet
๋ฅผ ์ถ๊ฐํ๊ณ ์ด๋ฆ์ ๋ณ๊ฒฝํด ๋ณด๊ฒ ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ํน์ ์
์ ๋ฐ์ดํฐ๋ ์
๋ ฅํด ๋ณด๊ฒ ์ต๋๋ค.
private void buttonEditSave_Click(object sender, EventArgs e)
{
Microsoft.Office.Interop.Excel.Application application = null;
Workbook workBook = null;
Worksheet workSheet = null;
try
{
SaveFileDialog dlg = new SaveFileDialog();
dlg.Filter = "xlsx files|*.xlsx";
if (dlg.ShowDialog() != DialogResult.OK)
return;
application = new Microsoft.Office.Interop.Excel.Application();
application.Visible = true;
workBook = application.Workbooks.Add();
//๋ง์ง๋ง ์ํธ ๋ค์ ์๋ก์ด ์ํธ ์ถ๊ฐ
workSheet = workBook.Worksheets.Add(After: workBook.Worksheets.Item[workBook.Worksheets.Count]);
//์ํธ ์ด๋ฆ ๋ณ๊ฒฝ
workSheet.Name = "ํ
์คํธ ์ํธ";
//1ํ 1์ด์ ๋ฌธ์์ด "ํ
์คํธ" ์
๋ ฅ
Range cell1 = workSheet.Cells[1, 1];
cell1.Value = "ํ
์คํธ";
//2ํ 1์ด์ ์ซ์ "1234" ์
๋ ฅ
Range cell2 = workSheet.Cells[2, 1];
cell2.Value = "1234";
//2ํ 2์ด์ ๋ฌธ์์ด "ABCDโป" ์
๋ ฅ
Range cell3 = workSheet.Cells[2, 2];
cell3.Value = "ABCDโป";
workBook.SaveAs(dlg.FileName, XlFileFormat.xlWorkbookDefault);
}
catch (Exception exc)
{
MessageBox.Show(exc.Message);
}
finally
{
workBook.Close(true);
application.Quit();
ReleaseExcelObject(workBook);
ReleaseExcelObject(application);
}
}
์ํธ๋ฅผ ๊ทธ๋ฅ ์ถ๊ฐํด์๋ ์๋๊ณ , 20๋ฒ์งธ ์ฝ๋์ฒ๋ผ ์ด๋ ์์น ์ดํ(After)
๋๋ ์ด์ (Before)
์ผ๋ก ์ถ๊ฐํด์ผ ์ํธ๊ฐ ์ฝ์
๋ฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๋ฆ ๋ณ๊ฒฝ์ 22๋ฒ์งธ ์ฝ๋์ฒ๋ผ ๊ฐ๋จํฉ๋๋ค. ๋ง์ง๋ง์ผ๋ก ์
์ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ๋ ๋ฐฉ๋ฒ๋ ์์ฃผ ๊ฐ๋จํฉ๋๋ค.
์ ์ฝ๋๋ฅผ ์คํํ ๊ฒฐ๊ณผ๋ ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ต๋๋ค.
์์ธํ ๋ด์ฉ์ ์๋ ์ฒจ๋ถ๋ ์์ ์ฝ๋๋ฅผ ์ฐธ๊ณ ํ์ธ์.
'Programming > .Net' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋๊ธ
์ด ๊ธ ๊ณต์ ํ๊ธฐ
-
๊ตฌ๋
ํ๊ธฐ
๊ตฌ๋ ํ๊ธฐ
-
์นด์นด์คํก
์นด์นด์คํก
-
๋ผ์ธ
๋ผ์ธ
-
ํธ์ํฐ
ํธ์ํฐ
-
Facebook
Facebook
-
์นด์นด์ค์คํ ๋ฆฌ
์นด์นด์ค์คํ ๋ฆฌ
-
๋ฐด๋
๋ฐด๋
-
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
-
Pocket
Pocket
-
Evernote
Evernote
๋ค๋ฅธ ๊ธ
-
[.Net] C#์์ JPEG, PNG๋ฅผ WebP๋ก ๋ณํํ๋ ๋ฐฉ๋ฒ (์์ ํฌํจ)
[.Net] C#์์ JPEG, PNG๋ฅผ WebP๋ก ๋ณํํ๋ ๋ฐฉ๋ฒ (์์ ํฌํจ)
2021.08.30 -
[.Net] C# Syntax Highlighting ์๋ํฐ๋ฅผ ์ํ ScintillaNET ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ
[.Net] C# Syntax Highlighting ์๋ํฐ๋ฅผ ์ํ ScintillaNET ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ
2021.08.05 -
[.Net] C#์ผ๋ก ๋์ ์ฆ๊ถ ์ฃผ์ ์๋ ๋งค๋งค ํ๋ก๊ทธ๋จ ๋ง๋ค๊ธฐ - ํฌ๋ ์จ ํ๋ฌ์ค ์ค๋น ๋จ๊ณ
[.Net] C#์ผ๋ก ๋์ ์ฆ๊ถ ์ฃผ์ ์๋ ๋งค๋งค ํ๋ก๊ทธ๋จ ๋ง๋ค๊ธฐ - ํฌ๋ ์จ ํ๋ฌ์ค ์ค๋น ๋จ๊ณ
2021.04.12 -
[.Net] C#์ผ๋ก ๋์ ์ฆ๊ถ ์ฃผ์ ์๋ ๋งค๋งค ํ๋ก๊ทธ๋จ ๋ง๋ค๊ธฐ
[.Net] C#์ผ๋ก ๋์ ์ฆ๊ถ ์ฃผ์ ์๋ ๋งค๋งค ํ๋ก๊ทธ๋จ ๋ง๋ค๊ธฐ
2021.04.09