excel oledb字段截断为255

时间:2011-02-11 16:28:59

标签: 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.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,它会显示完整的单元格。

2 个答案:

答案 0 :(得分:3)

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

此引用适用于Access,但它仍然是Jet,因此几乎所有内容都适用:Truncation of Memo fields

答案 1 :(得分:0)

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

我有一个445个字符的工作表单元格(行[0] [4])并且工作正常... 将其添加到输出代码的末尾

// 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);