自动将xls文件转换为xlsx

时间:2019-08-14 20:15:03

标签: excel vba powershell automation

我有一个软件,它只允许我将数据下载为xls文件,但我想将其用作xlsx文件。

当前,当我单击一个按钮时,它具有一个excel宏,它将在xlsx中转换我的所有xls文件,但是我想使该任务自动化,因此我不必打开excel文件并单击该按钮。

我想到的是一个脚本,该脚本在登录Windows或类似的程序时启动,并在我下载xls文件时自动转换。但是我对脚本不是很好,所以有人可以帮助我吗?在Windows 7和10上。

谢谢您的帮助。

修改:

这是我的Powershell脚本,现在我必须对其进行自动化,以便它在我下载新的.xls文件时自动运行,我知道我可以使用任务计划程序,但是如何在发生事件时自动执行该任务,例如添加一个新的xls文件到文件夹?还是我们可以在powershell中完成它?

我的脚本:

$xlFixedFormat = [Microsoft.Office.Interop.Excel.XlFileFormat]::xlOpenXMLWorkbook
write-host $xlFixedFormat
$excel = New-Object -ComObject excel.application
$excel.visible = $false
$folderpath = "C:\Users\Mgtspare\Downloads\"
$filetype ="*xls"
Get-ChildItem -Path $folderpath -Include $filetype -recurse | 
ForEach-Object `
{
    $path = ($_.fullname).substring(0, ($_.FullName).lastindexOf("."))

    "Converting $path"
    $workbook = $excel.workbooks.open($_.fullname)

    $path += ".xlsx"
    $workbook.saveas($path, $xlFixedFormat)
    $workbook.close()

    remove-item $_.fullname

}
$excel.Quit()
$excel = $null
[gc]::collect()
[gc]::WaitForPendingFinalizers()

更新:

我将脚本更改为具有新脚本的速度更快,并放置了一个观察程序,以便在下载新的xls文件时运行该脚本,登录Windows时将使用任务管理器运行此脚本,这样它便可以观看做任何事情。

这是我的新脚本:

### SET FOLDER TO WATCH + FILES TO WATCH + SUBFOLDERS YES/NO
    $watcher = New-Object System.IO.FileSystemWatcher
    $watcher.Path = "C:\Users\Mgtspare\Downloads"
    $watcher.Filter = "*.xls"
    $watcher.IncludeSubdirectories = $false
    $watcher.EnableRaisingEvents = $true  

### DEFINE ACTIONS AFTER AN EVENT IS DETECTED
    $action = { 
                $watcher.Path *.xls | rename-item -newname { [io.path]::ChangeExtension($_.name, "xlsx") }
              }    
### DECIDE WHICH EVENTS SHOULD BE WATCHED 
    Register-ObjectEvent $watcher "Created" -Action $action
    while ($true) {sleep 5}

问题:

我的脚本在ISE中运行,但是当我想在cmd中运行它或右键单击脚本文件并使用powershell运行时,我会遇到此问题

  

您必须在'*'运算符的右侧提供一个值表达式。

最终解决方案:

新脚本每天早上使用任务管理器自动运行。享受:)

### SET FOLDER TO WATCH + FILES TO WATCH + SUBFOLDERS YES/NO
    $watcher = New-Object System.IO.FileSystemWatcher
    $watcher.Path = "C:\Users\Mgtspare\Downloads"
    #$watcher.Filter = "*.*"
    $watcher.IncludeSubdirectories = $true
    $watcher.EnableRaisingEvents = $true

### DEFINE ACTIONS AFTER AN EVENT IS DETECTED
    $action = { 
                Get-ChildItem -Path C:\Users\Mgtspare\Downloads *.xls | rename-item -newname { [io.path]::ChangeExtension($_.name, "xlsx") }
              }

### DECIDE WHICH EVENTS SHOULD BE WATCHED 
    Register-ObjectEvent $watcher 'Created' -SourceIdentifier 'FileCreated' -Action $action
    while ($true) {sleep 1000}

0 个答案:

没有答案