C# dagaGridView 에서 데이터를 엑셀로 내보내기하는 걸 테스트를 해보고 정상 저장되는 걸 확인하고 적어둔다.
// 엑셀로 데이터를 내보내기
// SaveFileDialog 를 사용해야 폴더 특성을 타지 않고 저장이 가능하다.
// @"C:\test.xls" 라고 직접 파일명을 적어주면 파일 저장권한이 없다고 에러가 발생한다.
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
'C# > dataGridView' 카테고리의 다른 글
C# dataGridView OleDB 를 이용하여 엑셀로 내보내기 (0) | 2015.10.08 |
---|---|
C# dataGridView 에 엑셀 읽어들이기 (0) | 2015.10.07 |
C# dataGridView 행 삭제 (0) | 2015.10.05 |
C# dataGridView 현재 Row의 셀값 읽어내기 (KeyUp), CurrentCell (0) | 2015.09.21 |
C# dataGridView ContentClick 이벤트, MouseDown 이벤트 (0) | 2015.09.19 |