我正在使用DoCmd.TransferSpreadsheet将数据从Excel导入Access。 一切正常,除了一些被截断的Excel行,因为Access单行(而不是字段)的字节太多。
我注意到Access中的每个字段都创建为文本(255),而我的Excel行不超过100个字符。
我认为如果我设法导入我的Excel文件创建默认长度为100个字符的字段,我将不再获得截断数据。
有没有办法将Access字段的默认文本长度设置为特定数字?
更新
在运行DoCmd.TransferSpreadsheet
答案 0 :(得分:0)
要设置Access(2007)的默认文本长度,请单击Office按钮> "访问选项按钮" > "对象设计师" (在左侧窗格中),然后在“表设计”下的“默认文本字段大小”框中输入50,然后单击“确定”。
答案 1 :(得分: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