출처-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();
}



블로그 이미지

은호아빠

여행, 맛집, 일상, 프로그래밍, 개발자, 윈도우, 웹, jsp, spring, db, mysql, oracle, c#

,