2012-10-12 3 views
0

응용 프로그램에는 여러 개의 탭이있는 마법사가 있습니다. 첫 번째 탭에서 찾아보기 버튼을 사용하여 Excel 시트 경로를 선택할 수 있습니다. 엑셀을 선택하는 순간, 파일 내용이 데이터 세트 (DATE 필드를 포함하여 올바른 형식의 모든 항목)에로드됩니다. 그런 다음 다음을 클릭하여 다음 마법사 탭으로 이동하십시오.일반 형식으로 가져 오기 시작 날짜를 Excel에서 읽어들입니다.

그러나 파일이 열려 있으면 프로그램에서 일반 형식의 모든 날짜 필드를 사용하여 Excel과이 시간을로드합니다. 예 :

bool IsFilebeingUsed(FileInfo file) 
    { 
     FileStream stream = null; 

     try 
     { 
      stream = file.Open(FileMode.Open, FileAccess.Read, FileShare.None); 
     } 
     catch (IOException) 
     { 
      return true; 
     } 
     finally 
     { 
      if (stream != null) 
       stream.Close(); 
     } 
     return false; 
    } 

방법 우리는 엑셀과 같다 읽으려는 : 2006년 6월 22일 우리는 엑셀이 열려 있거나 같은 다른 포맷으로 사용되는 경우 찾으려고 노력

38890 등 다음과 같습니다 :

string sql = string.Format("SELECT * FROM [{0}]", excelSheetName); 
internal OleDbCommand command = new OleDbCommand(); 
command.CommandText = sql; 
OleDbDataReader oleRdr = command.ExecuteReader(); 

DataTable dataTable = new DataTable(); 
datatable.TableName = excelSheetName; 
dataTable.Load(oleRdr); 

누구나 응용 프로그램이나 코드에 무슨 문제가 있다고 말할 수 있습니까?

+0

TEXT 기능을 사용하여 날짜 필드를 다시 포맷 할 수 없습니까? 그렇게하면 파일이 열려 있는지 여부가 중요하지 않습니다. – Dan

+0

필자는 어떤 칼럼에서 날짜 관련 필드를 가지고 있는지 모르기 때문에 의심 스럽다. – Sandy

답변

0

업데이트 된 질문은 here입니다.

그래서 나는 문제를 불만족스럽게 해결했습니다. 필자의 분석과 실험을 통해 궁극적으로 Excel이 MS-Excel에서 열려 있고 OleDbDataReader를 사용하여 C#에서 Excel을 읽으려고 시도 할 때 DataTypes 중 일부가 제대로 읽히지 않아 불행히도 DateTime이 내 경우에 그 중 하나라는 결론을 내 렸습니다.

해결책으로, 현재 우리는 Excel 파일을 읽을 때 사용자가 Excel을 닫도록 강요하고 있습니다. Excel이 MS-Excel의 읽기 전용 모드로 열려 있으면 DataTime을 포함한 모든 DataTypes에 대해 읽은 데이터가 올바른 것으로 나타났습니다. 그러나 쓰기 모드에서 열면 데이터 읽기가 올바르지 않습니다.

이것은 내 분석 결과이며 결과가 약간 이상하다는 것을 알고 있습니다. 어느 누구도 동의하지 않거나 마음 속에 뭔가 다른 것이 있으면 알려 주시고 저를 시정하십시오.

관련 문제