2011-05-13 2 views
3

Excel 판독기를 사용하면 타임 스탬프를 제외한 모든 항목이 잘 읽습니다. 예를 들어 15시 59 분 35 초로 바뀝니다 .67290509259259268C# Excel Reader가 타임 스탬프를 십진수로 변경합니다.

어떻게 이런 일이 일어나지 않게합니까?

object[,] valueArray = (object[,])excelRange.get_Value(XlRangeValueDataType.xlRangeValueDefault); 

이는 Excel 시트에서 읽은 값을 보유하고있는 배열입니다. 그것이 이유인지 확실하지 않습니다.

+0

16:08:59 대신 "15:59:35에 .67290509259259268"또는 15:59:35에 .6663777 ...이 (가) 확실합니까? – Random832

+0

먼저 어떤 행을 읽었는지 잘못 해석했을 수 있습니다. – Stephen

답변

2

하는 DateTime.FromOADate는 시도 - 그러나, 당신이 질문에 언급 된 숫자 값은 실제로 당신이 언급 한 시간에 해당하지 않습니다.

+0

감사합니다. 완벽하게 작동했습니다. – Stephen

2

Excel의 모든 이유는 DateTimes를 부동 소수점 숫자로 저장하기 때문입니다. 소수 부분은 시간 구성 요소이고 정수 부분은 날짜를 나타냅니다.

Range.Text 값을 사용하면 텍스트를 올바르게 가져올 수 있습니다. 나는 당신이 위와 같은 방식으로 이것을 꽤 사용할 수 있다고 생각하지 않는다. (나 자신도 그렇게하려고 노력하면서 실제 접근법을 아직 얻지 못했다.) 또한 텍스트 읽기 속도가 느릴 수도 있습니다 (숫자 형식 읽기는 v.slow 임).

라이브러리를 사용해보십시오. FlexCel은 우리가 사용하는 라이브러리 중 가장 좋은 라이브러리이거나 Apose입니다.

반복 접근 (이것은 거의 객체 [,]를 반환하는 get_Value보다 상당히 느립니다.)

if (excelRange!= null) 
{ 
    int nRows = excelRange.Rows.Count; 
    int nCols = excelRange.Columns.Count; 
    for (int iRow = 1; iRow <= nRows; iRow++) 
    { 
     for (int iCount = 1; iCount <= nCols; iCount++) 
     { 
     excelRange= (Microsoft.Office.Interop.Excel.Range)xlSheet.Cells[iRow, iCount]; 
     String text = excelRange.Text; 
     } 
    } 
} 

(편집 : SharePoint 용 실제로 있었다 제거 된 다른 예.)

+0

감사합니다. 이제는 적어도 시작할 곳이 있습니다. – Stephen

+0

불행히도 이러한 라이브러리는 무료가 아니지만 FlexCel은 사용하기에 매우 저렴하고 사용하기 쉽습니다. Excel에서 솔루션을 찾으면 게시 할 것입니다. – Ian

+0

당신은 Range.Text에 대해 오랫동안 놀리는 것이 아닙니다. 59 열을 포함한 1800 개의 행을 처리하는 데는 거의 2 분이 걸렸습니다. – Stephen

관련 문제