如果Excel文件事先手工打开,在RPA流程中再次打开并写入的时候,就会提示只读文件,无法写入而出错。 如果文件是用WPS打开的,在流程中杀进程真的杀不掉,希望有一个判断文件是否打开的组件?
关于判定Excel文件是否已经被打开的问题,可以在RPA流程中使用以下两种方法:
使用Windows Powershell脚本: 首先,需要检查是否有Excel进程正在运行,检查方式可以通过Windows Powershell脚本完成:
Get-Process excel | Where-Object {$_.MainWindowTitle} | Select-Object MainWindowTitle 这个命令会查找正在运行的Excel进程的主窗口标题,如果找到任何一个与Excel有关的进程,则可以判定Excel文件已经被打开了。我们可以将这个命令封装为一个“运行脚本”的组件。
使用VBA宏: 另外一个方法是在Excel中嵌入一个VBA宏,它可以在文件被打开时自动运行,并将文件属性设置为只读。在RPA流程中尝试写入该文件时,它将会产生一个错误,提示该文件为只读。这个宏可以使用以下代码实现:
Private Sub Workbook_Open() If Not IsFileClosed(ThisWorkbook.FullName) Then ThisWorkbook.ChangeFileAccess Mode:=xlReadOnly End If End Sub
Function IsFileClosed(strFileName As String) As Boolean Dim fileNo As Integer, errNo As Integer
On Error Resume Next
fileNo = FreeFile()
Open strFileName For Binary Access Read Write Lock Read Write As #fileNo
Close fileNo
errNo = Err
On Error GoTo 0
If errNo = 0 Then
IsFileClosed = True
Else
IsFileClosed = False
End If
End Function 这个宏将检查文件是否已被打开。如果文件已经被打开,则宏将被阻止并将文件属性设置为只读。在RPA流程中,如果尝试写入该文件,则会产生一个错误,并提示该文件被设置为只读。
以上两种方法可以用于在RPA流程中判定Excel文件是否已被打开,以确保文件能够被正确地写入。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。