所以我在excel中使用此代码在启动时读取环境参数:
@Injectable()
export class TestService{
constructor(){
console.log('Service')
}
}
和我的批处理脚本中的这一行:
Dim ExcelArgs As String
Dim arg As String
ExcelArgs = Environ("ExcelArgs")
MsgBox ExcelArgs
If InStr(UCase(ExcelArgs), "CREO") >= 0 Then
Application.DisplayAlerts = False
If Len(ExcelArgs) > Len("CREO") Then
arg = Split(ExcelArgs, ",")(1)
Call Creo.addNewPartToPartslist(arg)
End If
Application.DisplayAlerts = True
End If
问题是,如果我运行批处理文件一次,保持excel打开,将excelargs更改为CREO,无论是批处理文件还是重新运行批处理文件,都不会更新!
所以我的理论是excel要么缓存环境变量,要么如果一个实例正在使用它,那么批处理脚本就无法设置它
链接有关将参数传递给excel的一些信息: https://superuser.com/questions/640359/bat-file-to-open-excel-with-parameters-spaces
答案 0 :(得分:2)
通常excel会查看是否有先前的实例正在运行,并让此实例处理文件打开。
这很重要吗?是的,在您的情况下,打开文件的两个请求都由同一个excel进程处理。
它如何有所作为?环境变量不共享。每个进程都有自己的环境块,在创建进程时初始化(可以是自定义块或父进程环境的副本),一旦为进程创建了环境,只有此进程可以更改其环境。
在您的情况下,当您启动excel
时,新进程会获得cmd
进程的环境块的副本。稍后,当您更改cmd
环境时,已经运行的excel
实例看不到环境中的更改,并且由于打开excel的新请求被转换为对先前进程的请求,因此没有带有更改的cmd
环境的新副本的新流程。
我认为使其工作的唯一方法是强制excel启动一个新进程(将继承cmd
实例中的更改)而不是重用前一个进程。
但这取决于excel
版本。据我所知,2013版本包含一个/x
开关,用于强制单独的进程使用。对于以前的版本,可能this question或this one可以为您提供帮助。
答案 1 :(得分:0)