我正在使用以下代码阅读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,它会显示完整的单元格。
答案 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);