2013-07-15 3 views
1

C#을 사용하여 Excel 파일을 읽는 동안 한 가지 문제가 있습니다. 내 Excel 파일에서 DateTime 인 한 열과 Excel 파일의 값이 길다. 그래서 Excel은 ###### 형식으로 변환합니다. 같은 Excel을 C#에서 동일한 값으로 C#을 사용하여 읽습니다. 누구든지 도와주십시오 : 어떻게 ##### 대신 Date Time 값을 얻을 수 있습니까? 이처럼 시도C#에서 파일을 읽는 동안 ###### 값을 얻는 중

using Excel = Microsoft.Office.Interop.Excel; 
Excel.Application xlApp; 
Excel.Workbook xlWorkBook; 
Excel.Worksheet xlWorkSheet; 
object misValue = System.Reflection.Missing.Value; 
ExcelObj = new Microsoft.Office.Interop.Excel.Application(); 
      Microsoft.Office.Interop.Excel.Workbook theWorkbook = ExcelObj.Workbooks.Open(oldg.FileName, Type.Missing, Type.Missing, Type.Missing, Type.Missing, 
      Type.Missing, Type.Missing, Type.Missing, Type.Missing, 
      Type.Missing, Type.Missing, Type.Missing, Type.Missing, 
      Type.Missing, Type.Missing); 
      Microsoft.Office.Interop.Excel.Sheets sheets = theWorkbook.Worksheets; 
Microsoft.Office.Interop.Excel.Worksheet worksheet = (Microsoft.Office.Interop.Excel.Worksheet)sheets.get_Item(1); 
for (int i = 3; i <= worksheet.UsedRange.Rows.Count; i++) 
{ 
    var getvalue = excel_getValue("B" + i); 
} 
+1

열의 크기를 조정 하시겠습니까? –

+1

크기 조정 위치 ... –

답변

1

: 같은

내 코드 보인다 - 당신이 날짜 콜 럼이 있고 값이 범위를 벗어나면

var conv = DateTime.FromOADate("B"+i); 
4

귀하의 날짜 변환이 실패 할 수있다. 당신이 날짜 컬럼에 (예를 들어) "5555555555555555555555"를 입력하면 당신은 "#####"및 툴팁 일련의 상태를 얻을 :

날짜와 부정적인거나 너무 대형 디스플레이입니다 시간 ### ###. 이것의

가장 일반적인 원인은 미국 형식 (MM/DD/YYYY)의 날짜를 가지고있을 것입니다 그리고 당신은 유럽 형식 (일/월/년)의 날짜로 변환하려고되거나 문자열을 전혀 변환하지 않습니다. 엑셀에 "######"대신 실제 열 값이 this Super User question

+0

ExcelObj.get_Range ("B"+ i) .get_Value(). ToString();을 사용해도 해당 열의 내 형식이 DateTime입니다. 여전히 내 값이 같은 ##### 값을 얻으면 같은 열의 폭을 늘리면 DateTime이 표시됩니다. –

+0

@DhavalPatel - 내 SU 응답에서 언급 한 다른 문제입니다. 열이 너무 좁습니다. – ChrisF

+0

열을 읽는 동안 해당 열의 형식을 제거 할 수 있습니까? –

0

를 볼 이유에 대한 자세한 내용은

당신은 Value2보다는 문제의 셀의 Value 읽을 필요가있다. Valuestring을 반환합니다. 반면에 Value2object을 반환합니다. 이는 해당 셀에 대한 Excel의 이해를 보여줍니다. double, DateTime 등이 될 수 있으며 테스트하고 캐스트해야합니다.

그러나 코드에서 수행중인 작업이 정확히 무엇인지 확신 할 수 없으며이 행에 뭔가를 남겼던 것처럼 보입니까?

var getvalue = excel_getValue("B" + i); 

당신은 worksheet.Value["B" + i]과 같은 일이 될 단지 Value2Value를 교체해야

worksheet.getValue("B" + i); 

같은 것을 의미합니다. excel_getValue이 비슷한 기능을하는 함수 인 경우 Value 속성에 대한 액세스를 찾고 Value2으로 변경하십시오. 일반적으로 행과 열 번호로 항목에 액세스하고 두 가지 옵션은 다음과 같습니다.

string value = worksheet.Cells[2, i].Value; 
object val2 = worksheet.Cells[2, i].Value2; 
관련 문제