출처-C# : Excel 프로그래밍 (http://www.csharpstudy.com/Tips/Tips-excel.aspx)
1. 엑셀로 저장 - C#에서 Excel Automation 사용
엑셀 오토메이션은 COM API들이고,
C# 에서 이를 엑세스하기 위해서는 먼저 COM Interop DLL인 Microsoft.Office.Interop.Excel.dll
(Visual Studio Tools for Office)을 참조해야 한다. DLL이 참조된 후에 using
Microsoft.Office.Interop.Excel; 와 같이 Excel 네임스페이스를 참조하여 사용하게 된다. 기본적으로
Excel의 구조대로 먼저 Excel Application 객체를 얻은 후, Workbook 객체 그리고 Worksheet 객체를 얻은 후, 이
Worksheet의 Cell 혹은 Range를 지정하여 데이타를 핸들링한다. 사용 후 Excel 객체들을 Release해주여야 백그라운드에
Excel.exe가 남지 않는다.
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using Excel = Microsoft.Office.Interop.Excel;
using System.Runtime.InteropServices;
public class ExcelTest
{
public static void RunTest()
{
List<string> testData = new List<string>()
{ "Excel", "Access", "Word", "OneNote" };
Excel.Application excelApp = null;
Excel.Workbook wb = null;
Excel.Worksheet ws = null;
try
{
// Excel 첫번째 워크시트 가져오기
excelApp = new Excel.Application();
wb = excelApp.Workbooks.Add();
ws = wb.Worksheets.get_Item(1) as Excel.Worksheet;
// 데이타 넣기
int r = 1;
foreach (var d in testData)
{
ws.Cells[r, 1] = d;
r++;
}
// 엑셀파일 저장
wb.SaveAs(@"C:\temp\test.xls", Excel.XlFileFormat.xlWorkbookNormal);
wb.Close(true);
excelApp.Quit();
}
finally
{
// Clean up
ReleaseExcelObject(ws);
ReleaseExcelObject(wb);
ReleaseExcelObject(excelApp);
}
}
private static void ReleaseExcelObject(object obj)
{
try
{
if (obj != null)
{
Marshal.ReleaseComObject(obj);
obj = null;
}
}
catch (Exception ex)
{
obj = null;
throw ex;
}
finally
{
GC.Collect();
}
}
}
2.C#에서 Excel OLEDB
사용 : 데이타 읽기, 갱신, 추가 예제
Excel 파일을 OleDbConnection을 사용해
연결을 한 후에, 다른 데이타 소스들과 같이 ADO.NET의 OleDb* 클래스들을 이용해
데이타를 가져오거나 삽입, 삭제, 갱신등을 하게 된다. 아래 예제는 엑셀 파일로부터 데이타를 읽고, 수정 및 추가를 하는 예이다.
private void ExcelTest()
{
// OLEDB를 이용한 엑셀 연결
string szConn = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\x\test.xls;Extended Properties='Excel 8.0;HDR=No'";
OleDbConnection conn = new OleDbConnection(szConn);
conn.Open();
// 엑셀로부터 데이타 읽기
OleDbCommand cmd = new OleDbCommand("SELECT * FROM [Sheet1$]", conn);
OleDbDataAdapter adpt = new OleDbDataAdapter(cmd);
DataSet ds = new DataSet();
adpt.Fill(ds);
foreach (DataRow dr in ds.Tables[0].Rows)
{
string data = string.Format("F1:{0}, F2:{1}, F3:{2}", dr[0], dr[1], dr[2]);
MessageBox.Show(data);
}
// 엑셀 데이타 갱신
cmd = new OleDbCommand("UPDATE [Sheet1$] SET F2='Hello' WHERE F1='a'", conn);
cmd.ExecuteNonQuery();
cmd = new OleDbCommand("UPDATE [Sheet1$A2:C2] SET F2='World'", conn);
cmd.ExecuteNonQuery();
// 데이타 추가
cmd = new OleDbCommand("INSERT INTO [Sheet1$](F1,F2,F3) VALUES ('A3','B3','C3')", conn);
cmd.ExecuteNonQuery();
conn.Close();
}
'C#' 카테고리의 다른 글
C# String 문자열 자르기 Substring 사용법 (0) | 2020.03.05 |
---|---|
c# EXCEL 파일 읽기 (2) | 2020.02.25 |
C# 인스타그램 이미지 피드 가져오기 (0) | 2020.01.23 |
"al.exe"을(를) 찾을 수 없습니다. SdkToolsPath가 설정되었는지, 도구가 SdkToolsPath 아래의 올바른 프로세서 특정 위치에 있는지, Microsoft Windows SDK가 설치되었는지 확인하세요. (0) | 2019.04.22 |
캔디 타워 맵툴 maptool 간단하게. (0) | 2014.10.11 |