2011-02-11 43 views
1

我讀在Excel與下面的代碼:Excel中OLEDB場截斷在255

Function Read_Excel(ByVal sFile As String) As ADODB.Recordset 
    On Error GoTo fix_err 
    Dim rs As ADODB.Recordset 
    rs = New ADODB.Recordset 
    Dim sconn As String 

    rs.CursorLocation = ADODB.CursorLocationEnum.adUseServer 
    rs.CursorType = ADODB.CursorTypeEnum.adOpenStatic 
    rs.LockType = ADODB.LockTypeEnum.adLockReadOnly 
    sconn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & sFile & ";Extended Properties=""Excel 12.0;HDR=YES;IMEX=1"";" 
    rs.Open("SELECT CStr([RPOCode]), Description FROM [sheet1$]", sconn) 
    tot += rs.RecordCount 
    rs.Close() 
    rs.Open("SELECT Distinct RPOCode, Description FROM [sheet1$] ORDER BY RPOCode", sconn) 
    Read_Excel = rs 
    rs = Nothing 
    Exit Function 
fix_err: 
    Debug.Print(Err.Description + " " + _ 
       Err.Source, vbCritical, "Import") 
    Err.Clear() 
End Function 

細胞超過255個字符長越來越截斷,我不知道是否有辦法輕鬆停止它?

更新:如果我選擇Distinct,截斷似乎只會發生。如果我離開Distinct它顯示完整的單元格。

回答

3

如果您使用Jet驅動程序將其更改爲文本類型字段,則會截斷備註類型字段(列)。可以使用子查詢獲取不同的記錄並避免Distinct。

此引用的訪問,但它仍然是噴氣機,所以幾乎所有適用:Truncation of Memo fields

+0

嗯,DRAT 。我的數據源是7個文件,總計有96,000多行,導致6009個唯一身份。我只在第一次看到它們時處理這些行,因此查詢每個唯一文件所需的文件可能需要更長的時間,而不是全部運行所需的時間。也許這不是什麼大不了的事情,考慮到我只需要一年做幾次。謝謝(你的)信息。 – AndyD273 2011-02-11 21:18:19

0

我的方法有點不同 - 通過開放練成OleDbAdapter文件,但我在使用它之前已經解決您的問題。它是C#,但應該很容易轉換到vb.net。 試試這個OleDBAdapter Excel QA我通過堆棧溢出發佈。

我有一個工作表單元格(行[0] [4])W/445個字符,它工作得很好... 此添加到代碼的結束的輸出

// DataSet cell debug/output:   
Object row0Col3 = ds.Tables["xlsImport"].Rows[0][2]; 
Object row0Col4 = ds.Tables["xlsImport"].Rows[0][4]; 

string rowZeroColumn3 = row0Col3.ToString(); 
string rowZeroColumn4 = row0Col4.ToString(); 

Console.WriteLine("Row 0, Col 4 string length: {0} " + Environment.NewLine + "Excel content: {1}", rowZeroColumn4.Length, rowZeroColumn4);