Vb.net excel oledb字段截断为255

Vb.net excel oledb字段截断为255,vb.net,excel,oledb,Vb.net,Excel,Oledb,我正在用以下代码读取excel文件: 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.adUseServe

我正在用以下代码读取excel文件:

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,它将显示完整单元格。

如果您使用Jet驱动程序将备注类型字段(列)更改为文本类型字段,则备注类型字段(列)将被截断。可以使用子查询来获取不同的记录并避免不同的错误


此参考用于Access,但它仍然是Jet,因此几乎所有内容都适用:

我的方法有点不同-通过OleDbAdapter打开excel文件,但在使用它之前我已经解决了您的问题。它是C#,但应该很容易转换到vb.net。 试试我通过堆栈溢出发布的这个

我有一个工作表单元格(第[0][4]行),包含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);           

嗯,糟透了。我的数据源是7个文件,总共有96000多行,结果是6009个unique。我只是在第一次看到行时才处理这些行,因此查询每个唯一的文件可能比遍历所有行所需的时间更长。考虑到我一年只需要做几次,也许这没什么大不了的。谢谢你的信息。