2013-06-25 2 views
0

내가 엑셀 ​​페이지를 읽기 위해 노력하고 읽기 그러나 나는 다음과 같은 오류 얻을 :는 VB.net 엑셀 페이지

Input string was not in a correct format.Couldn't store <555-555-5555> in PHONE_NUM Column. Expected type is Double.

OLEDB 명령 유형으로 열을 기대하는 것 같다을에 두 번 (하지만 사실, 그것은 전화 번호를위한 문자열입니다). 이 명령은 열의 첫 번째 항목으로 보이고 그 유형을 기반으로해야하는 항목을 결정하므로 어딘가에서 읽은 것 같습니다. 항상 모든 값을 문자열로 읽는 방법이 있습니까?

Dim connection As OleDb.OleDbConnection 
Dim command As OleDb.OleDbCommand 
Dim adapter As New OleDb.OleDbDataAdapter 
Dim connString As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + myFile + ";Extended Properties=Excel 12.0;" 
Dim pgOne As String = "Page1$" 
Dim pgTwo As String = "Page2$" 
Dim selectOne As String = "SELECT * FROM [" & pgOne & "] WHERE COL1<>''" 
Dim selectTwo As String = "SELECT * FROM [" & pgTwo & "]" 

connection = New OleDb.OleDbConnection(connString) 
Try 
    If connection.State = ConnectionState.Open Then 
    Else 
     connection.Open() 
    End If 

    command = New OleDb.OleDbCommand(selectOne, connection) 
    adapter.SelectCommand = command 
    adapter.Fill(ds, "Table1") 

    adapter.SelectCommand.CommandText = selectTwo 
    adapter.Fill(ds, "Table2") 
Catch ex As OleDb.OleDbException 
Finally 
    adapter.Dispose() 
    If (Not command Is Nothing) Then 
     command.Dispose() 
    End If 
    connection.Close() 
End Try 

답변

0

언급했듯이이 문제를 해결할 수 없어 수동으로 스키마를 만들고 바인딩 된대로 데이터의 서식을 지정했습니다.

0

당신은 테이블이 두 가지 방법 중 하나를 문자열로 채우기 위해 얻을 수 있습니다 :

내가 사용하고있는 코드입니다. 이 문자열을 문자열로만 읽으려면 연결 문자열에 혼합 된 데이터 유형 열을 텍스트로 읽어야하는 부분을 추가 할 수 있습니다. 또는 헤더 행을 데이터로 읽음으로써 문자열 유형으로 강제 변환하십시오. 스키마를 사용하여 테이블 정의를 읽을 수도 있지만, 이것들이 당신을 위해 작동하지 않는다면 좀 더 자세한 정보를 찾아야 할 것입니다.

먼저 IMEX = 1

'Add IMEX=1 
Dim connString As String = "Provider=Microsoft.ACE.OLEDB.12.0;IMEX=1;Data Source=" + myFile + ";Extended Properties=Excel 12.0;" 

이 다음 데이터 유형을 혼합 한 모든 datacolumns에 String를 기반으로 열을 제공해야 추가 연결 문자열을 변경

첫 번째 옵션은 할 간단합니다 그들의 행에.

또 다른 방법은 연결 문자열에 머리글 행이 없음을 지정하여 머리글 행을 데이터 행으로 읽음으로써 문자열 열 유형을 강제 적용하는 것입니다. 그런 다음이 문자열을 제거하여 문자열 열의 데이터를 가질 수 있습니다.

'Add HDR=NO 
Dim connString As String = "Provider=Microsoft.ACE.OLEDB.12.0;HDR=NO;Data Source=" + myFile + ";Extended Properties=Excel 12.0;" 

이러한 것들이 효과가 없다면 조금 더 연구 할 것입니다.

+0

응답 해 주셔서 감사합니다. 두 가지 제안을 시도했지만 같은 오류가 발생했습니다. "설치 가능한 ISAM을 찾을 수 없습니다." 연결을 열려고 할 때. 이견있는 사람? – jason

+1

글쎄, ISAM 오류 (http://stackoverflow.com/questions/8120699/could-not-find-installable-isam)가 수정되었지만 여전히 문제가 있습니다. IMEX = 1을 사용하면 작동하지 않습니다. HDR = NO를 사용하려고하면 "하나 이상의 필수 매개 변수에 값이 지정되지 않았습니다."라는 또 다른 오류가 발생합니다. – jason

+0

try IMEX = 1; HDR = NO; 함께 - 아직 주사위가 없다면 스키마 측면에 대해서 알게 될 것입니다. –