728x90

C# dagaGridView 에서 데이터를 엑셀로 내보내기하는 걸 테스트를 해보고 정상 저장되는 걸 확인하고 적어둔다.

// 엑셀로 데이터를 내보내기
// SaveFileDialog 를 사용해야 폴더 특성을 타지 않고 저장이 가능하다.
// @"C:\test.xls" 라고 직접 파일명을 적어주면 파일 저장권한이 없다고 에러가 발생한다.


export_to_excel.cs


Microsoft.Office.Interop.Excel https://msdn.microsoft.com/ko-kr/library/dd264733.aspx 다.





private void submiExcel_Click(object sender, EventArgs e)
{
    SaveFileDialog sfd = new SaveFileDialog();
    sfd.Title = "Save as Excel File";
    sfd.Filter = "Excel Files(2003)|*.xls|Excel Files(2007)|*.xlsx";
    sfd.FileName = "";
    if (sfd.ShowDialog() == DialogResult.OK)
    {
        dataGridView_ExportToExcel(sfd.FileName, dataGridView1);
    }
}

// using System.Data;
// using Excel = Microsoft.Office.Interop.Excel;
private void dataGridView_ExportToExcel(string fileName, DataGridView dgv)
{
    Excel.Application excelApp = new Excel.Application();
    if (excelApp == null)
    {
        MessageBox.Show("엑셀이 설치되지 않았습니다");
        return;
    }
    Excel.Workbook wb = excelApp.Workbooks.Add(true);
    Excel._Worksheet workSheet = wb.Worksheets.get_Item(1) as Excel._Worksheet;  
    workSheet.Name = "C#";

    if (dgv.Rows.Count == 0)
    {
        MessageBox.Show("출력할 데이터가 없습니다");
        return;
    }

    // 헤더 출력
    for (int i = 0; i < dgv.Columns.Count - 1; i++)
    {
        workSheet.Cells[1, i + 1] = dgv.Columns[i].HeaderText;
    }

    //내용 출력
    for (int r = 0; r < dgv.Rows.Count; r++)
    {
        for (int i = 0; i < dgv.Columns.Count - 1; i++)
        {
            workSheet.Cells[r + 2, i + 1] = dgv.Rows[r].Cells[i].Value;
        }
    }


    workSheet.Columns.AutoFit(); // 글자 크기에 맞게 셀 크기를 자동으로 조절


    // 엑셀 2003 으로만 저장이 됨
    wb.SaveAs(fileName, Excel.XlFileFormat.xlWorkbookNormal, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
        Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlExclusive, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);

    wb.Close(Type.Missing, Type.Missing, Type.Missing);
    excelApp.Quit();
    releaseObject(excelApp);
    releaseObject(workSheet);
    releaseObject(wb);
}

#region 메모리해제
private static void releaseObject(object obj)
{
    try
    {
        System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
        obj = null;
    }
    catch (Exception e)
    {
        obj = null;
    }
    finally
    {
        GC.Collect();
    }
}
#endregion


블로그 이미지

Link2Me

,