![](/img/trans.png)
[英]How to filter columns when adding data into MS Access using DoCmd.TransferSpreadsheet?
[英]How to avoid accdb row size limitation when using DoCmd.TransferSpreadsheet?
我正在使用 DoCmd.TransferSpreadsheet 將數據從 Excel 導入到 Access。 一切正常,除了一些 Excel 行被截斷,因為 Access 單行(不是字段)有太多字節。
我注意到 Access 中的每個字段都是作為文本(255)創建的,而我的 Excel 行都不超過 100 個字符。
我認為,如果我設法導入創建默認長度為 100 個字符的字段的 Excel 文件,我將不再獲得截斷的數據。
有沒有辦法將 Access 字段的默認文本長度設置為特定數字?
更新
運行DoCmd.TransferSpreadsheet
時,似乎忽略了減小 Access 2010 選項中的默認字段文本大小
若要設置 Access (2007) 的默認文本長度,請單擊 Office 按鈕 >“Access 選項按鈕”>“對象設計器”(在左側窗格中),然后在“表格設計”下的“默認文本字段大小”框中輸入 50並單擊確定。
我編寫了自己的導入函數,它可以工作:
' 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.