Поля Excel Oledb усечены на 255 - PullRequest
       7

Поля Excel Oledb усечены на 255

1 голос
/ 11 февраля 2011

Я читаю в файле 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 символов обрезаются, и я не уверен, есть ли способ остановить это легко?

Обновление: усечение, кажется, происходит, только если я выбрал Различный. Если я оставлю «Различение» выключенным, он покажет полную ячейку.

Ответы [ 2 ]

3 голосов
/ 11 февраля 2011

Поля мемо-типа (столбцы) будут усечены, если вы сделаете что-нибудь, что изменит их на текстовые поля с драйвером Jet. Может быть возможно использовать подзапрос, чтобы получить различные записи и избежать Distinct.

Это ссылка для Access, но она все еще Jet, поэтому применимо почти все: Усечение Memo полей

0 голосов
/ 13 мая 2011

Мой метод немного другой - открытие файлов Excel через OleDbAdapter, но я решил вашу проблему перед его использованием. Это C #, но его легко перенести на vb.net. Попробуйте это OleDBAdapter Excel QA Я отправил через переполнение стека.

У меня есть ячейка листа (Rows [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);           
...