使用参数-空格打开excel的bat文件

使用参数-空格打开excel的bat文件

我想运行 Excel,在其中打开特定文件并将参数传递给此文件。我的调用是

"C:\Program Files (x86)\Microsoft Office\Office14\EXCEL.EXE" 
"D:\Desktop\libs\xlam\+apps\+diagramViewer\diagramViewer.xlsm"
/e"D:\Desktop\MyFile.dia"

一切按我想要的方式运行。

但是,当 Excel 文件参数 (MyFile.dia) 包含空格时,无论是否使用引号,所有内容都会被破坏。错误消息是无法找到“File.dia”。

我该如何解决这个问题?MS 帮助没有帮助。

编辑:

为了回应戴夫的评论,我尝试:

"C:\Program Files (x86)\Microsoft Office\Office14\EXCEL.EXE"
"C:\Program Files (x86)\Microsoft Office\Office14\EXCEL.EXE" "D:\Desktop\libs\xlam\+apps\+diagramViewer\diagramViewer.xlsm"
"C:\Program Files (x86)\Microsoft Office\Office14\EXCEL.EXE" "D:\Desktop\libs\xlam\+apps\+diagramViewer\diagramViewer.xlsm" "D:\Desktop\MyFile.dia"
"C:\Program Files (x86)\Microsoft Office\Office14\EXCEL.EXE" "D:\Desktop\libs\xlam\+apps\+diagramViewer\diagramViewer.xlsm" "D:\Desktop\MyFile .dia"

一切正常。当我尝试包含开关/e以将参数传递给 Excel 时,问题就开始了。即...

 "C:\Program Files (x86)\Microsoft Office\Office14\EXCEL.EXE" "D:\Desktop\libs\xlam\+apps\+diagramViewer\diagramViewer.xlsm" /e "D:\Desktop\MyFile.dia"
 "C:\Program Files (x86)\Microsoft Office\Office14\EXCEL.EXE" "D:\Desktop\libs\xlam\+apps\+diagramViewer\diagramViewer.xlsm" /e "D:\Desktop\MyFile. dia"

这些不会产生任何错误,问题是 Excel 无法理解最后一个文件是我想要传递给 xlsm 文件的内容,而不是要在 Excel 中打开的另一个文件。要告诉 Excel .dia 应该是 .xlsm 处理的参数,我发现唯一可行的方法是删除“/e”周围的空格。因此

 "C:\Program Files (x86)\Microsoft Office\Office14\EXCEL.EXE" "D:\Desktop\libs\xlam\+apps\+diagramViewer\diagramViewer.xlsm"/e"D:\Desktop\MyFile.dia"

但按预期工作

 "C:\Program Files (x86)\Microsoft Office\Office14\EXCEL.EXE" "D:\Desktop\libs\xlam\+apps\+diagramViewer\diagramViewer.xlsm"/e"D:\Desktop\MyFile .dia"

导致 Excel 尝试打开“.dia”文件,从而出现错误消息“.dia 文件不存在...”。

答案1

错误一定是您的路径实际上并没有引用您认为的内容,或者可能是语言环境的问题,或者是它如何识别字符......

我刚刚创建了以下内容

"C:\Program Files (x86)\Microsoft Office\Office14\EXCEL.EXE" "C:\Users\DRook\Desktop\a d c.xlsx"/e "C:\Users\DRook\Desktop\My File . dia"

它通过命令提示符和 .bat 文件按预期工作(即没有错误消息)。

我怀疑该文件没有被正确引用,或者你的一些区域设置可能令人困惑!

为了确定(只是为了排除这种可能性),请在资源管理器中找到MyFile.dia并重命名My File . dia。然后,shift按住按钮,右键单击文件(file.dia),然后选择选项Copy as path

然后将其粘贴作为命令中的最后一个参数。

请记住,如果您不是自己创建此字符串,而是从其他来源复制并粘贴的,则“”标记可能不会按您认为的那样发挥作用。我建议您重写整个字符串,然后进行测试。或者复制上面的字符串并进行测试,只需重命名路径即可。

如果D:不是本地驱动器,那么我建议使用桌面上的所有内容进行测试(或者至少是不会出现任何网络或权限问题的本地位置)。

我甚至尝试过类似的目录结构并且效果很好。

在此处输入图片描述

编辑

我还会逐个尝试每个参数以确保路径正确。因此,在命令提示符中输入

“C:\Program Files (x86)\Microsoft Office\Office14\EXCEL.EXE”并按enter

然后

“D:\Desktop\libs\xlam+apps+diagramViewer\diagramViewer.xlsm”并按enter

然后

“D:\Desktop\MyFile.dia”并按enter

然后

“D:\Desktop\My File . dia”并按enter

编辑2

是的,我现在可以更好地看到/理解错误,但只能提供一个解决方案,而这个解决方案是你不想要的 - 不允许有空白。

当我在参数中发送空格时发生了什么,我从 Excel 收到以下消息(注意,我的参数是e/"C:\Users\DRook\Desktop\My File . dia"

在此处输入图片描述

请注意,问题是 Excel 似乎正在将空格与扩展名交换(因此看到空格,假定它是文件名的结尾并创建扩展名)。

答案2

我一直在寻找类似的东西,但想在打开的 XLSM 文件中使用宏来自动运行 IF 传递的参数。

有一个漫长的讨论 http://www.vbforums.com/showthread.php?366559-Excel-How-to-Pass-Command-Line-Parameter-DKenny-is-KING

关于这个主题。

我所做的是使用帖子 #19 中的建议(有趣的是,VB(6)“命令”在 Office 应用程序中不起作用,这一点我已经验证过了)。我所做的是使用批处理文件启动 Excel:-

Set ExcelArgs=AutorunMacros
"C:\Program Files (x86)\Microsoft Office\Office14\excel.exe" /e "C:\Path to\Excel File\Analyser Program.xlsm" 

然后在宏工作簿中,我有以下内容(单击项目中的“工作簿”选项卡

Private Sub Workbook_Open()
Dim ExcelArgs As String
ExcelArgs = Environ("ExcelArgs")
If Lcase (ExcelArgs)= "autorunmacros" Then
    Call StartMyMacro(Auto:=True)
End If
End Sub

StartMyMacro 就是您想要自动实现的。

另外我的 StartMyMacro 定义如下

Public Sub StartMyMacro(Optional Auto As Boolean = False)

如果手动调用,则自动设置为 False,而从自动打开中调用它会将变量设置为 True。最后,使用 Auto=True,我保存工作簿(实际上是在宏期间创建的新工作簿),然后退出 Excel。这会导致 CMD 窗口关闭并清除环境变量。

答案3

我们也遇到过类似的问题。我们最终重命名了 xlsm 文件。文件名的编码存在问题。

相关内容