-
C# DataGridView 엑셀 출력 빠르게 하기 (복사&붙여넣기)닷넷/WinForms 2018. 7. 20. 16:13반응형
이전에 포스팅한
2017/05/24 - [프로그래밍/C#] - C# DataGridView 데이터 엑셀파일에 저장 using oledb
은 데이터그리드뷰의 데이터를 엑셀파일로 출력할 때 속도가 느리다는 단점이 있다.
어떻게 하면 빠르게 출력할 수 있을까...
데이터그리드뷰 자체를 복사해서 엑셀파일에 그대로 옮겨놓을 수 있을까...
하다가 찾아낸 방법이다.
아래의 ExportExcel 메소드를 사용하면 된다.
private void ExportExcel(string filename) { // Copy from DataGridView // 데이타그리드뷰를 전체선택하고, dataGridView1.SelectAll(); // 클립보드에 복사한다. DataObject dataObj = dataGridView1.GetClipboardContent(); if (dataObj != null) Clipboard.SetDataObject(dataObj); // Paste in Excel object misValue = System.Reflection.Missing.Value; // Excel.Application 개체 생성 Excel.Application xlApp = new Excel.Application(); // xlApp.Visible = true를 하면 실시간으로 생성한 엑셀파일이 열리고, 데이터가 붙여넣기 되는 장면을 볼 수 있다. // 엑셀파일에 저장되는 과정을 사용자가 보지 못 하게 하려면 주석처리 한 채로 냅둔다. // xlApp.Visible = true; // Workbook 생성 Excel.Workbook xlWorkBook = xlApp.Workbooks.Add(misValue); // xlApp.Workbooks.Add는 엑셀파일을 생성 하는 것으로 // 이미 존재 하는 파일에 데이터를 붙여넣기 하고자 한다면 Open 사용 // Workbook 열기 // xlApp.Workbooks.Open("@C:\example.xlsx"); // Worksheet 생성 or 가져오기 Excel.Worksheet xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1); // 시트에서 범위 지정 Excel.Range CR = (Excel.Range)xlWorkSheet.Cells[1, 1]; // 범위 선택 CR.Select(); // 클립보드에 있는 데이터 붙여넣기 xlWorkSheet.PasteSpecial(CR, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, true); // Excel 파일 저장 // 이미 존재 하는 파일에 저장하는 경우에는 xlWorkBook.Save(); xlWorkBook.SaveAs(filename, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlExclusive, Type.Missing, Type.Missing, Type.Missing, Type.Missing); // Excel.Application 개체 종료 xlApp.Quit(); // 사용이 끝난 엑셀의 각 객체들은 Release 한다. ReleaseExcelObject(xlWorksheet); ReleaseExcelObject(xlWorkbook); ReleaseExcelObject(xlApp); } private void ReleaseExcelObject(object obj) { try { if (obj != null) { Marshal.ReleaseComObject(obj); obj = null; } } catch (Exception ex) { obj = null; throw ex; } finally { GC.Collect(); } }
엑셀라이브러리 참조하는 방법은 아래 포스팅 참고
2018/01/10 - [프로그래밍/C#] - C# 엑셀파일 가져오기 using Microsoft.Office.Interop.Excel (DataGrdiVeiw에 바인딩 포함)
(2023-02-14 일부 수정)
반응형'닷넷 > WinForms' 카테고리의 다른 글
C# [펌] 윈도우 Timer와 스레드 Timer의 차이점 및 사용할 때 주의할 점 (0) 2018.10.01 C# MDI폼의 자식폼 최대화시 메뉴바에 나타나는 아이콘 없애기 (0) 2018.08.20 C# 텍스트박스에 숫자만 입력되게 하기 (0) 2018.06.07 C# DateTimePicker 기본값 설정하기 (0) 2018.03.27 C# 간단하게 구현한 CheckBox ComboBox (with CheckedListBox) (1) 2018.03.15