我有一个软件,它只允许我将数据下载为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}