ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [C#] dataGridView에 바인된 데이터를 Excel파일에 저장하는 방법
    Programming/C# 2010. 2. 8. 17:01

    Excel Export

    using System; 
    using System.Reflection; 
    using System.Windows.Forms; 
    private void Export2Excel(DataGridView datagridview, bool captions) 
    { 
    	object objApp_Late; 
    	object objBook_Late; 
    	object objBooks_Late; 
    	object objSheets_Late; 
    	object objSheet_Late; 
    	object objRange_Late; 
    	object[] Parameters; 
    	string[] headers = new string[datagridview.ColumnCount]; 
    	string[] columns = new string[datagridview.ColumnCount]; 
    
    	int i = 0; 
    	int c = 0; 
    	for (c = 0; c < datagridview.ColumnCount; c++) 
    	{ 
    		headers[c] = datagridview.Rows[0].Cells[c].OwningColumn.HeaderText.ToString(); 
    		i = c + 65; 
    		columns[c] = Convert.ToString((char)i); 
    	} 
    
    	try 
    	{ 
    		// Get the class type and instantiate Excel. 
    		Type objClassType; 
    		objClassType = Type.GetTypeFromProgID("Excel.Application"); 
    		objApp_Late = Activator.CreateInstance(objClassType); 
    		//Get the workbooks collection. 
    		objBooks_Late = objApp_Late.GetType().InvokeMember("Workbooks", 
    			BindingFlags.GetProperty, null, objApp_Late, null); 
    		//Add a new workbook. 
    		objBook_Late = objBooks_Late.GetType().InvokeMember("Add", 
    			BindingFlags.InvokeMethod, null, objBooks_Late, null); 
    		//Get the worksheets collection. 
    		objSheets_Late = objBook_Late.GetType().InvokeMember("Worksheets", 
    			BindingFlags.GetProperty, null, objBook_Late, null); 
    		//Get the first worksheet. 
    		Parameters = new Object[1]; 
    		Parameters[0] = 1; 
    		objSheet_Late = objSheets_Late.GetType().InvokeMember("Item", 
    			BindingFlags.GetProperty, null, objSheets_Late, Parameters); 
    
    		if (captions) 
    		{ 
    			// Create the headers in the first row of the sheet 
    			for (c = 0; c < datagridview.ColumnCount; c++) 
    			{ 
    				//Get a range object that contains cell. 
    				Parameters = new Object[2]; 
    				Parameters[0] = columns[c] + "1"; 
    				Parameters[1] = Missing.Value; 
    				objRange_Late = objSheet_Late.GetType().InvokeMember("Range", 
    					BindingFlags.GetProperty, null, objSheet_Late, Parameters); 
    				//Write Headers in cell. 
    				Parameters = new Object[1]; 
    				Parameters[0] = headers[c]; 
    				objRange_Late.GetType().InvokeMember("Value", BindingFlags.SetProperty, 
    					null, objRange_Late, Parameters); 
    			} 
    		} 
    
    		// Now add the data from the grid to the sheet starting in row 2 
    		for (i = 0; i < datagridview.RowCount; i++) 
    		{ 
    			for (c = 0; c < datagridview.ColumnCount; c++) 
    			{ 
    				//Get a range object that contains cell. 
    				Parameters = new Object[2]; 
    				Parameters[0] = columns[c] + Convert.ToString(i + 2); 
    				Parameters[1] = Missing.Value; 
    				objRange_Late = objSheet_Late.GetType().InvokeMember("Range", 
    					BindingFlags.GetProperty, null, objSheet_Late, Parameters); 
    				//Write Headers in cell. 
    				Parameters = new Object[1]; 
    				Parameters[0] = datagridview.Rows[i].Cells[c].Value.ToString(); 
    				objRange_Late.GetType().InvokeMember("Value", BindingFlags.SetProperty, 
    					null, objRange_Late, Parameters); 
    			} 
    		} 
    
    		//Return control of Excel to the user. 
    		Parameters = new Object[1]; 
    		Parameters[0] = true; 
    		objApp_Late.GetType().InvokeMember("Visible", BindingFlags.SetProperty, 
    			null, objApp_Late, Parameters); 
    		objApp_Late.GetType().InvokeMember("UserControl", BindingFlags.SetProperty, 
    			null, objApp_Late, Parameters); 
    	} 
    	catch (Exception theException) 
    	{ 
    		String errorMessage; 
    		errorMessage = "Error: "; 
    		errorMessage = String.Concat(errorMessage, theException.Message); 
    		errorMessage = String.Concat(errorMessage, " Line: "); 
    		errorMessage = String.Concat(errorMessage, theException.Source); 
    
    		MessageBox.Show(errorMessage, "Error"); 
    	} 
    } 

    datagridview 컨트롤에 저장되어 있는 데이터를 Excel로 저장하는 방법입니다.
    출처 : http://mastmanban.tistory.com/235 , http://kindtis.tistory.com/72

    'Programming > C#' 카테고리의 다른 글

    [C#] 각각의 컨트롤에 대한 크로스 스레드 작업  (0) 2010.04.08
    [C#] 열거형  (0) 2010.02.24
    [C#] String.Format 사용하기  (0) 2010.02.06
    [C#] 클래스 정의  (0) 2010.02.03
    [C#] Ini 파일 작성과 사용하기  (2) 2010.02.02
Designed by Tistory.