[英]How to avoid accdb row size limitation when using DoCmd.TransferSpreadsheet?
I'm using a DoCmd.TransferSpreadsheet to import data from Excel to Access.我正在使用 DoCmd.TransferSpreadsheet 将数据从 Excel 导入到 Access。 Everything works fine except some Excel rows that are truncated because there are too much bytes for an Access single row (not field).
一切正常,除了一些 Excel 行被截断,因为 Access 单行(不是字段)有太多字节。
I noticed that every field in Access is created as a text(255) while my Excel rows are all no more than 100 characters.我注意到 Access 中的每个字段都是作为文本(255)创建的,而我的 Excel 行都不超过 100 个字符。
I think that if I manage to import my Excel files creating fields with a default length of 100 chars, I will no longer get truncated data.我认为,如果我设法导入创建默认长度为 100 个字符的字段的 Excel 文件,我将不再获得截断的数据。
Is there a way to set the default text length for Access fields to a specific number?有没有办法将 Access 字段的默认文本长度设置为特定数字?
UPDATE更新
Decreasing the default field text size in Access 2010 options seems to be ignored when running DoCmd.TransferSpreadsheet
运行
DoCmd.TransferSpreadsheet
时,似乎忽略了减小 Access 2010 选项中的默认字段文本大小
若要设置 Access (2007) 的默认文本长度,请单击 Office 按钮 >“Access 选项按钮”>“对象设计器”(在左侧窗格中),然后在“表格设计”下的“默认文本字段大小”框中输入 50并单击确定。
I wrote my own import function, and it works:我编写了自己的导入函数,它可以工作:
' 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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.