Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
windows任务打开excel(如果未打开),然后打开工作表(如果未打开)_Windows_Excel_Batch File_Windows Task Scheduler - Fatal编程技术网

windows任务打开excel(如果未打开),然后打开工作表(如果未打开)

windows任务打开excel(如果未打开),然后打开工作表(如果未打开),windows,excel,batch-file,windows-task-scheduler,Windows,Excel,Batch File,Windows Task Scheduler,我在Windows7任务工具中创建了一个任务。这让我想起了这个月的15号,打开了一个excel工作簿,我应该查看并更新它。方便 问题是,在这个弹出窗口的时候,我大约有60%的机会已经打开了Excel,我想我甚至有一小部分机会打开了工作簿。那么结果就一点也不优雅了。任务试图打开另一份Excel副本,这会导致只读访问,工作簿本身也是如此 在SCHTASKS或批处理文件(或您推荐的任何其他方便的Windows工具)中,是否有方法首先检查Excel是否打开,然后切换到它,而不是打开Excel的第二个副本

我在Windows7任务工具中创建了一个任务。这让我想起了这个月的15号,打开了一个excel工作簿,我应该查看并更新它。方便

问题是,在这个弹出窗口的时候,我大约有60%的机会已经打开了Excel,我想我甚至有一小部分机会打开了工作簿。那么结果就一点也不优雅了。任务试图打开另一份Excel副本,这会导致只读访问,工作簿本身也是如此

在SCHTASKS或批处理文件(或您推荐的任何其他方便的Windows工具)中,是否有方法首先检查Excel是否打开,然后切换到它,而不是打开Excel的第二个副本?我看到了一个关于在.BAT文件中使用任务列表检查其是否打开的说明:

 TASKLIST /FI "IMAGENAME eq EXCEL.EXE" 2>NUL | FIND /I /N "EXCEL.EXE">NUL
 IF "%ERRORLEVEL%" EQ "0" START excel "C:\Project4\MonthlyTracking.xlsx"
但是如果批处理文件打开,我不知道该如何反应。在批处理文件中,我看不到一种方法可以告诉已经运行的excel进程打开一个文件


非常感谢

不要尝试用文件启动Excel,只启动文件:

"C:\Project4\MonthlyTracking.xlsx"
这将打开excel,如果它没有与该文件一起运行, 它将在运行的excel中打开文件, 如果它已经打开,它将给您一个错误-您可以使用:

"C:\Project4\MonthlyTracking.xlsx" 2>nul
if errorlevel neq 0 echo file already opened 

您可以让Windows ShellExecute功能逻辑使用默认关联程序(在本例中为Excel)启动文件,如何执行?只是尝试直接运行文件,而不是将文件作为应用程序的参数传递

TASKLIST /FI "IMAGENAME eq EXCEL.EXE" 2>NUL | FIND /I "EXCEL">NUL && (
    START /B "ShellExecute Excel File" "C:\Project4\MonthlyTracking.xlsx"
)

谢谢据我所知,这与斯蒂芬的答案大致相同。你介绍ShellExecute,我对此不太了解。这可能会提供一些优势,但他的工作似乎是为了我想要的没有那个。。。直到最后一个技巧问题(见这里)。@MarkGoldfain:文件类型和可执行文件之间的“转换”是通过
assoc
(该文件是什么文件类型)和
ftype
(该文件类型使用什么可执行文件)完成的。试试
assoc.xlsx
(这会给我
Excel.Sheet.12
)。然后键入“ftype Excel.Sheet.12`(这给了我
”C:\Program Files(x86)\Microsoft Office\Office14\Excel.EXE)/dde
)@MarkGoldfain:我不知道如何从批处理中分辨应用程序,该怎么做。相反,你可以使用
msg%username%“每月跟踪已经打开-请不要忘记更新它”
(如果%errorlevel%eqs 32…)