在JavaScript中读取具有动态文件名的文件

时间:2017-07-31 20:20:28

标签: javascript regex excel

是否可以在JavaScript中读取文件名为Sometext_ddmmyy.xls的文件? 文件名每天更改,但日期ddmmyy是该周或之前的随机日期。 但文件的路径永远不会改变。 你能帮忙用JavaScript编写代码来读取文件吗?

代码:

var filename =  /^path\\sometext_.*.xls$/;
....
var neobjectexcel = new ActiveXObject("Excel.Application");
var sheet = neojectexcel.Workbooks.Open(filename).ActiveSheet;
...

我使用了正则表达式,但我收到了“抱歉,我们找不到/^path\sometext_.*.xls$/它是否可能被移动,重命名或删除?”错误!

即使是正则表达式/^path\\sometext_\d\d\d\d\d\d.xls$/也会出现同样的错误。

还试过\ d +而不是\ d \ d \ d \ d \ d \ d不起作用。 请帮忙!

更新:该文件将与服务器上的文件夹以及类似名称的其他文件一起使用,例如sometext_ddmmyy.xls randomtext_ddmmyy.xls randomothertext_ddmmyy.xls,并将在同一服务器上使用脚本访问。

1 个答案:

答案 0 :(得分:0)

使用FileSystemObject,您可以使用RegExp过滤文件名,并找到添加到文件夹中的最新过滤文件,如下所示:

function getLatestFile (path, filter) {
    var fileIO = new ActiveXObject('Scripting.FileSystemObject'),
        folder = fileIO.GetFolder(path), // Get a folder object
        files = new Enumerator(folder.files), // Create files collection
        latest = 0,
        file, date, isTargetFile, temp, target;
    while (!files.atEnd()) { // Iterate files collection
        file = files.item(); // Get a file from the collection
        temp = new String(file); // Convert a file object to string
        isTargetFile = filter.test(temp); // Filter the filename
        date = new Date(file.DateCreated).getTime(); // Get the creation date of the file
        if (isTargetFile && date > latest) { // Check if this file passed the filter and is newer than the previous filter-passed file
            target = temp;
            latest = date;
        }
        files.moveNext(); // Continue iteration
    }
    return target;
}

您的案例的示例调用将是:

var filename = getLatestFile(path_to_folder, /sometext_\d{6}\.xls$/);

参数:path =搜索文件的文件夹的路径。 filter =用于过滤文件名的RegExp对象(文字或构造)。创建RegExp时,请注意转换后的文件对象(temp)使用反斜杠作为文件夹分隔符,但可以创建RegExp以仅过滤文件名。如果函数返回undefined,则没有文件名与RegExp匹配。