none
c#을 이용하여 excel export를 하면 셀서식 수정이 되지 않습니다.

    질문

  • Visual Studio 2008, MS OFFICE 2010 제품을 쓰고 있습니다.

    엑셀 export 이용해 파일을 생성하면 셀서식을 바꾸어도 전혀 변경되지 않는데, VS2008의 버그인가요?

    (string array로 range에 한번에 넣을 때 생기는 문제이며, 개별 셀 하나에 Value2 를 통해 넣으면 수정이 잘 됩니다.)

    VS로 만들어진 게 아닌 파일의 셀서식은 잘 수정되므로, 엑셀의 버그라곤 생각되지 않습니다.

    참조 코드 아래에 붙입니다.

           public void ExportOrderExcel(System.Data.DataTable dt, string Name, List<string> colNames)
            {
                System.Data.DataTable  manufacturedDt = this.ManufatureDtForExcel(dt, colNames);
                Application app = new ApplicationClass();
    
                if (app == null)
                {
                    System.Windows.Forms.MessageBox.Show("엑셀이 시작되지 않았습니다");
                    return;
                }
    
                Workbooks workbooks = app.Workbooks;
                _Workbook workbook = workbooks.Add(XlWBATemplate.xlWBATWorksheet);
                Sheets sheets = workbook.Worksheets;
                _Worksheet worksheet = (_Worksheet)sheets.get_Item(1);
                if (worksheet == null)
                {
                    System.Windows.Forms.MessageBox.Show("워크시트가 존재하지 않습니다.");
                }
    
                int titleRowCnt = 1;
                int columnRowCnt = 1;
                int totalRowCnt=  manufacturedDt.Rows.Count + titleRowCnt + columnRowCnt;
                object startPoint = worksheet.Cells[1, 1];
                object endPoint = worksheet.Cells[(totalRowCnt), manufacturedDt.Columns.Count];
                _SRange = worksheet.get_Range(startPoint, endPoint);
    
                string[,] array1 = new string[totalRowCnt, manufacturedDt.Columns.Count];
    
                //set title
                _SRange.get_Range(GetCellName(0, 0), GetCellName(3, 0)).Merge(1);
                array1[0, 0] = Name;
    
                // 컬럼이름을 넣는다.
                for (int colnum = 0; colnum < manufacturedDt.Columns.Count; colnum++)
                {
                    array1[1, colnum] = manufacturedDt.Columns[colnum].Caption;
                }
    
                // 실제 자료를 넣는다.
                for (int row = 2; row < manufacturedDt.Rows.Count + 2; row++)
                {
                    for (int col = 0; col < manufacturedDt.Columns.Count; col++)
                    {
                        array1[row, col] = manufacturedDt.Rows[row - 2][col].ToString();
                    }
                }
               
                // cell에 값을 입력한다.(아래 둘 중 어느 것을 해도 마찬가지.)
                //_SRange.Value2 = array1;
                _SRange.set_Value(Type.Missing, array1);
    
                app.Visible = true;
            }



    • 편집됨 nahyon 2018년 2월 12일 월요일 오전 8:49
    2018년 2월 12일 월요일 오전 8:46