Excel数据连接的相对文件路径

qxsslcnc  于 2023-03-09  发布在  其他
关注(0)|答案(3)|浏览(160)

我有7个csv文件和一个xls文件。在xls文件中,我有7个工作表(每个csv文件一个)。我可以创建一个数据连接,将每个csv文件读入给定的工作表。但是,当我压缩xls和7个csv文件并将它们发送给他们无法打开的人时,会看到xls文件中的数据,因为它试图访问我的计算机(C:/Desktop/MyComputerName/file.csv)上的文件。是否可以使此链接相对?是否有其他方法可以访问csv文件的内容,而无需逐个单元格进行访问?

kpbwa7wx

kpbwa7wx1#

根据进一步的研究,不使用工作簿路径编写VBA/宏脚本是不可能的。

jaql4c8m

jaql4c8m2#

通过VBA,可以在创建数据导入时记录宏,然后检查生成的VBA。您可以修改宏并将其用于从任何位置加载数据。

0ve6wy6x

0ve6wy6x3#

创建启用宏的excel工作簿(.xlsm),将其保存在某个位置并添加以下宏:

Sub Auto_Open()
    ' Clean current connections and query tables
    ' https://stackoverflow.com/a/49135238/213871
    Dim cn
    Dim qt As QueryTable
    Dim ws As Worksheet
    For Each cn In ThisWorkbook.Connections
        cn.Delete
    Next
    For Each ws In ThisWorkbook.Worksheets
        For Each qt In ws.QueryTables
            qt.Delete
        Next
    Next ws

    ' Clear all contents except header row
    Rows("2:" & Rows.Count).ClearContents

    ' Add the connection to the csv file in the same folder
    ' Inspired from https://stackoverflow.com/a/40536980/213871

    Dim csvFileName As String
    csvFileName = "DatabaseView.csv"

    Dim filePath As String
    filePath = ActiveWorkbook.Path

    Dim conString As String
    conString = "TEXT;" & filePath & "\" & csvFileName

    ' Add the connection to DataBaseView.csv
    With ActiveSheet.QueryTables.Add(Connection:= _
        conString _
        , Destination:=Range("$A$2"))
        .Name = "DatabaseView"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = True
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = False
        .RefreshPeriod = 1
        .TextFilePromptOnRefresh = False
        .TextFilePlatform = 850
        .TextFileStartRow = 1
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = False
        .TextFileTabDelimiter = False
        .TextFileSemicolonDelimiter = True
        .TextFileCommaDelimiter = False
        .TextFileSpaceDelimiter = False
        .TextFileColumnDataTypes = Array(1, 1, 1)
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
    End With
End Sub

调整csv文件、范围(当前为“$A$2”)和分隔符选项(您可以在从UI添加导入以获取模板时录制宏)。Auto_Open()宏将导致它在文件启动时加载。使用Excel 2010测试。

相关问题