2017-12-08 17 views
0

나는 대량 엑셀 수출 작업을하고 있는데 그 탁월한 내가 차트를 가지고, 차트는 내 보낸 데이터를 기반으로 바인딩해야합니다. 그러나 데이터가 문자열로 삽입되어 Excel에 저장됩니다. 그것의 역동적 인 수출 나는 하나의 엑셀 파일에 10 장 이상을 가지고 있습니다, 나는 모든 작업에 대해 하나의 공통된 방법을 사용하고 있습니다. 그래서 내 전체 데이터는 문자열로 취급됩니다. 그것의 동적 때문에 int 변환 할 수 없습니다.엑셀 차트 C에서 수출하는 동안 바인딩되지 않습니다 #

 int rCnt; 
     int cCnt; 
     int rw = 0; 
     int cl = 0; 
       // Fill The Report Content Data Here 
       rw = dtblData.Rows.Count; 
       cl = dtblData.Columns.Count; 
       string[,] data = new string[rw, cl]; 
       for (var row = 1; row <= rw; row++) 
       { 
        for (var column = 1; column <= cl; column++) 
        { 
         data[row - 1, column - 1] = dtblData.Rows[row - 1][column - 1].ToString(); 
        } 
       } 
       Excel.Range endRange = (Excel.Range)xlWorkSheet.Cells[rw + (startrange.Cells.Row - 1), cl + (startrange.Cells.Column - 1)]; 
       Excel.Range writeRange = xlWorkSheet.Range[startrange, endRange]; 
       writeRange.WrapText = true; 
       writeRange.Borders.LineStyle = Microsoft.Office.Interop.Excel.XlLineStyle.xlContinuous; 
       writeRange.Value2 = data; 
       data = null; 
       startrange = null; 
       endRange = null; 
       writeRange = null; 
당신이 유형 string의 배열하고 "카운트"열위한하지 int을 사용하고 있기 때문에이 문제가 발생

enter image description here

+0

당신은 interop보다 훨씬 더 나은 결과를 가져올 수 있도록 Epp plus를 시도해야합니다. 현재로서는 정확한 해결책이 없지만 epp로 시도하십시오. – Lucifer

+0

@Lucifer 전체 소스를 interop에서 Epp plus로 변경하는 것은 큰 작업입니다. – Jzl

답변

0

는 한 가지 방법은 강력한 형식의 객체를 사용하는 것입니다 (예에서 그것은 구조체의 목록입니다 루프에 비해

List<dataObj> data = new List<dataObj>(); 
for (var row = 1; row <= rw; row++) 
{ 
    for (var column = 1; column <= cl; column++) 
    { 
     dataObj d = new dataObj(); 
     d.DeniedSourceIp = dtblData.Rows[row - 1]["YourColNameOfDeniedSourceIp"].ToString(); 
     d.Count = int.Parse(dtblData.Rows[row - 1]["YourColNameOfCount"].ToString()); 
     data.Add(d); 
    } 
} 


struct dataObj 
{ 
    public string DeniedSourceIp { get; set; } 
    public int Count { get; set; } 
} 

의 범위 물마루 데이터를 주입 : 그것은 당신에게 데이터 객체) 데이터를 보유하고보다하면 엑셀 워크 시트에 채울 수를 나타냅니다. (?) :

당신의 데이터 테이블 왜 객체의 배열/목록을 사용하여 입력 강력 경우

또한, 당신은 당신이 그렇게 할 수 Range를 사용할 필요 없다, worklsheet을 능가하기 위해 데이터 테이블에서 직접 데이터를 삽입 할 수

xlWorkSheet.Cells[i, j] = "somevalue"; 
0

일부 연구를 수행 한 후 이에 대한 적절한 해결책을 찾았습니다. 데이터를 할당 한 후 코드 줄 아래에 추가했습니다.

writeRange.Value2 = data; writeRange.Formula = writeRange.Formula;

그 전에 나는 내 엑셀 템플릿에 필요한 형식을 추가했습니다. 숫자 열을 숫자 형식과 날짜로 변경했습니다. 나를 위해 일한 것을 차게하십시오.