C#.NET Q&A

c# 그리드뷰에서 엑셀 로 데이터 이동시 서식관련 질문.. 닷지 평점: 없음 조회: 113
  아래 소스코드는 그리드뷰에 데이터를 엑셀로 옮기는 소스입니다.
그런데  엑셀에서 잘 옮겨지기는 하는데 ... 엑셀 서식이 문제가 있습니다.
데이터중에 00-00,01-01 이런데이터들이  있는데 해당 데이터가  날짜형식으로 바뀌여 버려서 깨져버립니다.
시트 자체를 텍스트 형식으로 바꾸면 될것같은데 실력이 부족하여 방법을 모르겠습니다.
아래 소스코드를 참고하여  방법을 좀 알려주시면 정말 감사 드리겠습니다.


public void ExcelExp() // 엑셀 추출 메소드
        {
 
            object objApp_Late;
            object objBook_Late;
            object objBooks_Late;
            object objSheets_Late;
            object objSheet_Late;
            object objRange_Late;
            object[] Parameters;
            string[] headers = new string[dvg_bep.ColumnCount];
            string[] columns = new string[dvg_bep.ColumnCount];
 
            int i = 0;
            int c = 0;
            object missingType = Type.Missing;
            bool captions = false;
 
            ParentForm.toolStripProgressBar1.Maximum = dvg_bep.RowCount;  // 프로그래바  maximum  지정
 
            try
            {
                for (c = 0; c < dvg_bep.ColumnCount; c++)
                {
                    headers[c] = dvg_bep.Rows[0].Cells[c].OwningColumn.HeaderText.ToString();
                    i = c + 65;
                    columns[c] = Convert.ToString((char)i);
                }
            }
            catch { }
 
 
 
            try
            {
                // Get the class type and instantiate Excel.   클래스 유형을 가져오고 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 < dvg_bep.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. // 셀 안에 Header를 씁니다.
                        //Parameters = new Object[1];
                        //Parameters[0] = dataGridView1.Columns[c].HeaderText;
                        //objRange_Late.GetType().InvokeMember("Value", BindingFlags.SetProperty, null, objRange_Late, Parameters);
 
                        Parameters = new Object[1];
                        Parameters[0] = headers[c];
                        objRange_Late.GetType().InvokeMember("Value", BindingFlags.SetProperty, null, objRange_Late, Parameters);
 
                    }
                }
 
                if (dvg_bep.Rows.Count == 0)
                {
                    MessageBox.Show(@"엑셀로 출력할 데이터가 없습니다.", "오류메시지", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
 
                }
 
 
                // Now add the data from the grid to the sheet starting in row 2   이제 그리드에서 2열로 시작하는 시트에 데이터를 추가합니다.
 
                for (i = 0; i < dvg_bep.RowCount; i++)
                {
 
                    for (c = 0; c < dvg_bep.ColumnCount; c++)
                    {
                        if (i == 0)   //  첫행에 컬럼을 뽑아 냅니다.
                        {
                            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);
 
                            Parameters = new Object[1];
                            Parameters[0] = dvg_bep.Columns[c].HeaderText;
                            objRange_Late.GetType().InvokeMember("Value", BindingFlags.SetProperty, null, objRange_Late, Parameters);
                        }
 
 
                        //Get a range object that contains cell.   // 셀 이 포함된 범위 개체를 가져옵니다.
                        Parameters = new Object[2];
                        Parameters[0] = columns[c] + Convert.ToString(i + 3);
                        Parameters[1] = Missing.Value;
 
                        objRange_Late = objSheet_Late.GetType().InvokeMember("Range", BindingFlags.GetProperty, null, objSheet_Late, Parameters);
 
 
 
                        //Write Headers in cell.    // 셀 안에 Header를 씁니다.
                        Parameters = new Object[1];
                        Parameters[0] = dvg_bep.Rows[i].Cells[c].Value.ToString();
                        objRange_Late.GetType().InvokeMember("Value", BindingFlags.SetProperty, null, objRange_Late, Parameters);
                    }
                    ParentForm.toolStripProgressBar1.Value = +i;    //프로그래바  값 증가
 
                }
 
                //Return control of Excel to the user.   //사용자에게 Excel의 제어를 반환합니다.
                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);
 
                // 엑셀 종료 순서
                releaseObject(objSheet_Late);
                releaseObject(objSheets_Late);
                releaseObject(objBooks_Late);
                releaseObject(objBook_Late);
                releaseObject(objApp_Late);
 
                //Excel.Application ExcelApp = new Microsoft.Office.Interop.Excel.Application();
 
                MessageBox.Show(new Form() { WindowState = FormWindowState.Maximized, TopMost = true },
                   "엑셀파일로 생성이 완료되었습니다.", "엑셀업로드", MessageBoxButtons.OK, MessageBoxIcon.Information);
 
                ParentForm.toolStripProgressBar1.Value = 0;
 
 
 
            }
            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");
            }
        }
 
        // 엑셀 프로세스 킬
        private void releaseObject(object obj)
        {
            try
            {
                System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
                obj = null;
            }
            catch (Exception ex)
            {
 
                obj = null;
                MessageBox.Show(ex.ToString(), "Error");
 
            }
            finally
            {
                GC.Collect();
            }
        }
        public void Exit() // 종료 메소드
        {
            ///////////////////////////////////////////////////////////////////// 파일 종료 처리 시작
            if (DialogResult.Yes == MessageBox.Show("정말 종료하시겠습니까?", "프로그램 종료", MessageBoxButtons.YesNo))
            {
                this.Close();
 
            }
            else
            {
 
            }
            ///////////////////////////////////////////////////////////////////// 파일 종료 처리 끝
        }
태그 : c#,winfrom,datagridview
작성자 정보
닷지
Level 16
 [EXP.57/70]

메일:  비공개
글등록 +12 228 덧글등록 +3 27
자기소개
안녕하세요. 개발좀 배워보고 싶네요...
글 공유하기 |
  tweet facebook
2018-09-11 오전 11:36:20
나도한마디
사용자
SEO            [2018-09-11]
Level 4
 [EXP.0/16]
https://stackoverflow.com/questions/2067926/format-an-excel-column-or-cell-as-text-in-c


Microsoft.Office.Interop.Excel.Range cells
cells.NumberFormat = "@";
태그로 엮인글
글리스트
폼 질문드립니다.  키모
람다식인건 알겟는데 하.... 원형 보는게 넘 빡시는데 해석 가능한분 ??[4]  코토초
[RE] 람다식인건 알겟는데 하.... 원형 보는게 넘 빡시는데 해석 가능한분 ??  몬난아
마이크 설정 문의 입니다.[1]  TshigTAO
아이디 생성시 지정된 특수문자 [1]  방랑이z
ClickOnce를 이용한 설치, 배포 및 업데이트 질문드립니다.  앤디즘
프로그램에서 생성한 확장자를 실행하는 법이 있을까요?[2]  슷하슷하해
소켓 프로그래밍 질문드립니다.[2]+4  키모
winfrom에서 해당코드 간소화...[1]+1  닷지
용량이 큰 데이터을 가지고있는 그래프(유져컨트롤UI) 불러올때 에러가 발생합니다  시샵Wanted
 ★현재글->   c# 그리드뷰에서 엑셀 로 데이터 이동시 서식관련 질문..[1]  닷지
데이터그리드뷰에서 콤보박스 연결 질문드립니다.[2]+2  키쿄쿄쿄키쿗
ms-chart 질문있습니다.[1]+1  Sad7Dayz
c# datagridview 엑셀 저장 속도 개선 확인 부탁드려요[2]  netwo1029
콤보박스 UI 변경질문드립니다.[1]  키모
윈폼 창 순서 도와주세요.  netwo1029
메모리dc 로 비트맵에 화면캡쳐할때[1]+1  엿장수
NameValueCollection 전송가능 용량?[1]  hoon
윈폼 질문드려요  키모
[RE] 윈폼 질문드려요[1]  hoon
public static class 안에 static new 객체는 프로그램 실행시 한번만 호출되나요?[3]  시샵Wanted