从源文件名更改的外部源导入

Posted

技术标签:

【中文标题】从源文件名更改的外部源导入【英文标题】:importing from an external souce where source filename changes 【发布时间】:2016-06-02 12:23:58 【问题描述】:

如果这是一个简单的问题,请原谅我,我还在学习..

我有一个 Excel 文件,它获取数据并执行分析以组成图表。现在更新的方法是从其他 2 个数据源手动复制和粘贴。我可以轻松地创建一个宏来导入第一个源,因为数据位置/文件名始终相同。第二个来源比较棘手,因为该文件有一些标准化的命名约定,但添加了一个日期,因为它每周刷新一次,每周一或周二。有没有办法自动从外部源(sharepoint 库)中提取数据并告诉它找到最新版本?是通过了解文件名中添加的日期约定,还是通过修改日期或其他标准的其他方式?该文件与以前的存档副本一起保存。我不拥有报告、sharepoint 站点或保存它的库,因此我无法影响这些因素 :(。感谢任何帮助,我可以提供更好的详细信息和解释。

【问题讨论】:

日期的命名约定是什么? 您可能还想查看FileDateTime(filepath),您可以使用它来查找文件夹中的最新文件。示例:xl-central.com/open-the-latest-file-in-a-folder.html 【参考方案1】:

我知道有两种基本方法,或者允许用户通过对话框选择文件,或者使用“Dir”功能查找日期最近的文件。

第一种方法(我经常使用的代码):

Public Function ChooseOpenFile() As String

Dim strSlash As String

If InStr(1, ActiveWorkbook.Path, "/") > 0 Then
    strSlash = "/"
Else
    strSlash = "\"
End If

With Application.FileDialog(msoFileDialogOpen)
        .Title = "Select the first file to open in series:"
        .InitialFileName = Replace(ActiveWorkbook.Path, "http:", "", 1) & strSlash
        Call .Filters.Clear
        Call .Filters.Add("Excel Files Only", "*.xls, *.xlsx, *.xlsb")

        'only allow the user to select one file
        .AllowMultiSelect = False
        'make the file dialog visible to the user
        intChoice = .Show
        'determine what choice the user made
            If intChoice <> 0 Then
                'get the file path selected by the user
                ChooseOpenFile = .SelectedItems(1)
            End If
End With

End Function

至于第二种方法,只要您已经可以通过编程方式访问该文件夹,您就可以构建一个循环来循环文件,从每个文件中提取日期,测试是否比以前的版本更新并存储文件名要退出循环的最新版本。

Function MostRecentFile() As String

Dim dateTest As Date
Dim dateRecent As Date

Dim strMyFile As String
Dim strMyFolder As String
Dim strCurrentFile As String
Dim strSlash As String

strMyFolder = ThisWorkbook.Path
    If InStr(1, strMyFolder, "/") > 0 Then
        strSlash = "/"
    Else
        strSlash = "\"
    End If

strMyFile = Dir(Replace(strMyFolder, "http:", "") & strSlash & "*.xls*")

Do While strMyFile <> ""
    'Modify this line (number of characters and extension to replace) as needed.
    dateTest = CDate(Replace(Right(strMyFile, 15), ".xls*", ""))
    If dateTest > dateRecent Then
        dateRecent = dateTest
        strCurrentFile = strMyFile
    End If
    Stop
    Dir
Loop

MostRecentFile = strCurrentFile

End Function

【讨论】:

【参考方案2】:

您可以浏览到该文件。

Sub GetOpenFile() 
Dim fileStr As String
fileStr = Application.GetOpenFilename()
If fileStr = "False" Then Exit Sub
Workbooks.Open fileStr
End Sub

如果您想要某种自动化解决方案,根据您的系统日期,例如下周一或周二,您可以让机器计算出来,并将结果传递给文件路径中的适当字符串。

Sub NameAsNextMon()
Dim K As Integer
Dim dteMon As Date
Dim tempName As Variant

K = Weekday(Now)
dteMon = Now() + (9 - K)
tempName = Year(dteMon) & "-" & Month(dteMon) & "-" & Day(dteMon) & ".xls"
Do
fName = Application.GetSaveAsFilename(tempName)
Loop Until fName <> False
ActiveWorkbook.SaveAs Filename:=fName
End Sub

【讨论】:

以上是关于从源文件名更改的外部源导入的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 API “input type='file'” 标签使用本地文件更改视频源...没有 Jquery 或外部库

TypeScript - 导入外部 npm 模块会导致 tsc 的输出文件夹更改

Eclipse中导入外部jar包

将 SQLite 数据库从 sdcard 导入到 android - 没有资产文件夹

从外部源作为 blob 发送到 AWS Textract 的图像文件出现“InvalidParameterType”错误

Netezza 从外部文件导入错误:不支持的外部表引用,无法导出形状