2011-08-24 5 views
1

OLEDB를 사용하여 Excel 파일을 읽고이를 탭으로 구분 된 텍스트 파일로 변환하는 프로그램이 있습니다. 이 루프는 변환을 처리합니다.VB.NET - Excel에서 첫 번째 줄을 건너 뛰는 이유는 무엇입니까?

While reader.Read 
      Dim count As Integer = 0 
      Try 
       While (True) 
        temp = reader(count).ToString + ControlChars.Tab 
        output_file.Write(temp) 
        count += 1 
       End While 
      Catch ex As Exception 
       output_file.WriteLine() 
      End Try 


     End While 
확실히

아니 가장 우아한 코드,하지만 하나에 의해 각 셀 하나를 읽어, 다음 줄 바꿈을 작성하는 행의 끝에서 예외가 발생합니다. 유일한 문제는 Excel 문서의 첫 번째 줄을 건너 뜁니다. 왜 그런가?

더 우아한 솔루션
+0

Excel 파일의 첫 번째 행이 머리글 행입니까? – Tim

+0

@Tim 헤더 정보가 포함되어 있습니다. 그렇지만 Excel에서 행을 헤더로 지정하는 특정 설정이 있습니까? 나는 실제로 Excel을 많이 사용하지 않는다. (필자는 직접 Open Office 뷰어를 사용하고있다.) – cost

+0

행을 헤더로 지정하는 설정에 대해서는 알지 못하지만 첫 번째 행은 단순히 헤더 행입니다. 탭으로 구분 된 파일을 복제하지 않으려면 행에 대해 걱정하지 않아도됩니다. 저를 둘러 보며 조금이라도 찾으면 무엇을 찾을 수 있는지 보도록하겠습니다. – Tim

답변

6

이 시도 :

While reader.Read() 

    For i As Integer = 0 To reader.FieldCount - 1 
     output_file.Write(reader(i).ToString() + ControlChars.Tab) 
    Next 

    output_file.WriteLine() 
End While 

독자의 각 행을 읽고 행의 필드 수를 이용하여 FOR 루프의 연속 필드를 처리 (.FieldCount을).

각 FOR 루프가 완료되면 파일에서 해당 줄을 끝냅니다.

독자의 각 행에 대해 반복하십시오. . \

그렇지 않으면 처리 할 수있는 코드에서 이벤트를 (- - 또는 하나를 던지기보다는 단순히 File.Exits 체크를하는 것보다 예를 들면, 처리 FileNotFoundException이 던지는) 처리 할 수 ​​하지 사용 예외에 좋은 습관이다

UPDATE 조금 인터넷 검색을했고, 당신이 /가 포함 연결 문자열을 통해 헤더를 제외 할 수 있음을 나타납니다

Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\MyExcel.xls;Extended Properties="Excel 8.0;HDR=Yes;IMEX=1";

참고 일 e HDR = 예 파트. Connection strings for Excel에 따르면 첫 번째 행이 헤더인지 여부를 나타내는 데 사용됩니다.

리더의 필드에 Name 속성에 값이있는 경우 reader.GetName (int index)을 사용하여 볼 수 있습니다. 여기서 index는 열 (필드)의 0부터 시작하는 서수입니다.

+0

네, 그게 좋네요. 필드 카운트를 그렇게 쉽게 얻는 방법을 모르기 때문에 예외가있는 while 루프를 사용합니다. 그래도이 변경을 할 것입니다. 감사합니다. – cost

+0

그런 것들을 처리하기 위해 예외를 사용하는 것을 중단했지만, 이것은 프로그래밍의 초기 단계에서 남겨진 유틸리티이므로 나쁜 습관이 여전히 여기에 있습니다. – cost

+0

HDR 추가 = 고정되어 있지 않음, 고맙습니다. – cost

관련 문제