2014-12-05 119 views
0

我正在使用DoCmd.TransferSpreadsheet将数据从Excel导入到Access。 一切工作正常,除了一些Excel行被截断,因为访问单个行(不是字段)的字节太多。如何在使用DoCmd.TransferSpreadsheet时避免accdb行大小限制?

我注意到,Access中的每个字段都被创建为文本(255),而我的Excel行不超过100个字符。

我认为,如果我设法导入创建默认长度为100个字符的字段的Excel文件,我将不再获取截断的数据。

有没有办法将Access字段的默认文本长度设置为特定的数字?


UPDATE

在Access降低默认的字段文本尺寸2010页的选项似乎运行DoCmd.TransferSpreadsheet

回答

0

我写我自己的导入功能,以及它的工作原理:

' Import from an Excel with a default field length different from 255 (must be < 255) 
Function importFromExcel(fileName As String, fieldLength as integer) 
    Dim my_xl_app As Object 
    Dim my_xl_worksheet As Object 
    Dim my_xl_workbook As Object 
    Set my_xl_app = CreateObject("Excel.Application") 
    Set my_xl_workbook = my_xl_app.Workbooks.Open(fileName) 
    Set s = my_xl_workbook.Worksheets(1) 

    Dim fieldsNumber As Integer 
    Dim recordNumber As Long 
    fieldsNumber = s.cells(1, s.Columns.Count).End(1).Column 
    recordNumber = s.cells(s.Rows.Count, 1).End(3).Row 
    tablename = "[" & Replace(GetFilenameFromPath(fileName), ".", "_") & "]" 
    On Error Resume Next 
    DoCmd.RunSQL "DROP TABLE " & tablename 
    On Error GoTo 0 

    ' Creo tabella 
    sql = "CREATE TABLE " & tablename & " (F1 TEXT(" & fieldLength & ")) " 
    DoCmd.RunSQL sql 

    For i = 2 To fieldsNumber 
     sql = "ALTER TABLE " & tablename & " ADD COLUMN F" & i & " TEXT(" & fieldLength & ")" 
     DoCmd.RunSQL sql 
    Next 



    ' Ora insert 
    For i = 1 To recordNumber 
     sql = "INSERT INTO " & tablename & " VALUES (" 
     For j = 1 To fieldsNumber 
      sql = sql & " '" & Replace(s.cells(i, j), "'", "''") & "'," 
     Next 
     sql = Mid(sql, 1, Len(sql) - 1) 
     sql = sql & ")" 

    Next 

    my_xl_workbook.Close SaveChanges:=False 
    Set my_xl_app = Nothing 
End Function 
0

时要设置访问(2007年)的默认文字长度,单击Office被忽略按钮>“访问选项按钮”>“对象设计器”(位于左侧窗格中),然后在表格设计下的默认文本字段大小框中输入50,然后单击确定。

+0

正如我在写更新,默认的文本大小被忽略,当我导入具有DoCmd.TransferDatasheet – kiks73 2014-12-05 14:21:54

+0

数据看出刚过,对不起。 – Veve 2014-12-05 14:45:47

相关问题