如何将Excel文件导入Microsoft Access 2013

问题描述 投票:-1回答:2

我有一个Access 2013数据库,所有表都链接到SQL Server 2016表。我有一个Excel 2013(.xlsx)文件,我需要导入Ms Access中的一个表,该表通过vba代码链接到SQL Server(xlsx和table中的所有字段都相同)

我的所有VBA代码都驻留在Access数据库中,我有一个带有事件的按钮的表单,我尝试使用de“transferspreadsheet”,sql的“插入到”子句,但它们都没有为我工作

这是我的代码,

xtRuta2表单中具有路径的字段名称Dim strArchivo2字符串'文件路径xlsx c:\ reports \ mireporte.xlsx dim miAlerta2 as string Dim ssql As String

strArchivo2 = txtRuta2

miAlerta2 = MsgBox(“¿你想导入”&strArchivo2&“的新信息吗?”&vbCrLf&vbCrLf&“此操作将更新所有信息”,vbExclamation + vbOKCancel,“¡信息导入警告!”)

如果miAlerta2 = vbOK那么varAlert2 = MsgBox(“请确认你要导入新信息?”,vbExclamation + vbOKCancel,“¡CONFIRMATION IMPORT ALERT!”)如果varAlert2 = vbOK那么

      'DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12, "tbl_ZSales_Export Worksheet", strArchivo2, True, "Export Worksheet$"

            ssql = "INSERT INTO [tbl_Export Worksheet] select * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;Database=" & strArchivo2 & ";HDR=YES', 'SELECT * FROM [Export Worksheet$)'"

            'CurrentDb.Execute ssql

    MsgBox "Import Finished", vbExclamation + vbOKOnly

endif end if

你能帮我写一下这个正确的代码吗?

感谢和问候!

sql vba ms-access ms-access-2013
2个回答
0
投票

这段代码(与excel的后期bdingin交互)用于将excel表格转换为文本文件,然后导入到您选择的表格中。我更喜欢使用这种方法,因为访问有一个烦人的习惯,即在使用transferpreadsheet时尝试为您解释数据。通过创建导入规范(使用此方法需要执行此操作),您可以轻松预定义数据类型。

Option Compare Database
Option Explicit

Private Sub stuff()
    On Error GoTo GetAccrualFile_Err
    Dim fileLoc As String
    Dim path As String, Sep As String, NewTextFile As String, WholeLine As String
    Dim oXL As Object, sheet As Object
    Dim i As Long, j As Long, counteri As Long, counterj As Long
    Dim bringOver As Variant
    DoCmd.SetWarnings False
    DoCmd.Hourglass True
    counteri = 0
    counterj = 0
    Sep ="your prefered delimiter"
    DoCmd.RunSQL "DELETE * FROM TBL"
    fileLoc = "UNC PATH AND FILE NAME" & ".xlsx"
    path = Left(fileLoc, InStrRev(fileLoc, "\") - 1) & "\"
    NewTextFile = "UNC PATH AND FILE NAME" & ".txt"
    Set oXL = CreateObject("Excel.Application")
    With oXL
        .WorkBooks.Open FileName:=path & Dir$(fileLoc)
        Open NewTextFile For Output As #2
        bringOver = .Worksheets("your sheet name").UsedRange  'you might need to adjust this line to get the sheet your after
        For i = LBound(bringOver, 1) To UBound(bringOver, 1)
            For j = LBound(bringOver, 2) To UBound(bringOver, 2)
                WholeLine = WholeLine & bringOver(i, j) & Sep
                counterj = counterj + 1
            Next j
            'used if you want to skip column headers
            If counteri <> 0 Then
                Print #2, WholeLine
            End If
            WholeLine = ""
            counteri = counteri + 1
            counterj = 0
        Next i
        counteri = 0
        Erase bringOver
    End With    
    Close #2
    DoCmd.TransferText acImportDelim, "importspecname", "tbltoimportto", NewTextFile, False
    '***************************************************************************************
    'you will need to learn how to set up import specs, as well as understand the arguments for DoCmd.TransferText  
    '***************************************************************************************
CleanUp:
    DoCmd.SetWarnings True
    DoCmd.Hourglass False
    On Error Resume Next
    DoEvents
    oXL.Quit
    oXL.Application.Quit
    If Dir(NewTextFile) <> "" Then Kill NewTextFile
    Erase bringOver
    DoCmd.SetWarnings True
    DoCmd.Hourglass False
    Exit Sub
GetAccrualFile_Err:
    DoCmd.SetWarnings True
    DoCmd.Hourglass False
    msgbox "An error has occured.  " & " " & ERR.Number & " " & ERR.Description & " "
    GoTo CleanUp
    Resume
End Sub

-1
投票

试试EPPlus,这是一个免费的库,允许您从.Net平台管理Excel文件。在这里你有一个教程:https://riptutorial.com/epplus

© www.soinside.com 2019 - 2024. All rights reserved.