从PowerShell启动Excel可否以只读模式启动?

4
我使用Invoke-Item "some-file.xlsx"来启动Excel并打开文件。现在我想以只读模式打开此文件。从PowerShell中是否可以实现?
澄清一下,我不是要打开Excel表格并从中读取数据到PowerShell脚本,而是旨在帮助用户找到文件并打开它。

我不使用 PowerShell,但这是您要尝试的吗?$objWorkbook = $objExcel.Workbooks.Open($excelfile, 2, $True) - Siddharth Rout
不,我尝试过 Invoke-Item "some-file.xlsx"。我认为 $objExcel.Workbooks.Open() 只会在 PowerShell 脚本范围内打开 Excel 文件。关闭 PowerShell 将会关闭 Excel 表格。 - Jan H
你提出的这个COM+方法经常会导致错误,比如Exception calling "Add" with "0" argument(s): "Old format or invalid type library. (Exception from HRESULT: 0x80028018。虽然这个错误有解决方法,但需要进行大量的COM+操作。希望能找到一种非COM+的方法来实现。 - Jan H
2个回答

1

Invoke-item 只允许文件的默认操作。
要以只读方式打开文件,请执行以下操作:

  • 设置文件只读属性,启动文件,取消只读属性,

    attrib +r "some-file.xlsx"
    Invoke-Item "some-file.xlsx"
    attrib -r "some-file.xlsx"
    

或者

  • 直接调用Excel,并将/r作为命令文件传递

    $xl = (Get-ItemProperty -Path HKCR:\Applications\EXCEL.EXE\Shell\OpenAsReadOnly\command).'(default)'
    $fle = '"some-file.xlsx"'
    & $xl $fle
    

请查看从PowerShell中执行存储在变量中的命令,以获取适合您的语法


谢谢,我考虑使用excel.exe方法,但我认为没有简单的方法找到MSOffice二进制文件的路径。 - Jan H
它在注册表中 - 我添加了获取注册表键的命令。我还没有在PowerShell中执行任何变量,所以我不确定是否需要引号。 - SeanC
感谢您提供这个好的解决方案。能够像这样浏览注册表真是太棒了。我在您的代码中添加了一行来使HKCR:驱动器可用。不幸的是,我认为我的机器上出了些问题,虽然安装了Excel 2010,但您提到的注册表键不可用。而且像http://www.idothink.com/2009/11/c-detect-excel-install-location-in.html和http://support.microsoft.com/kb/240794等其他键也对我无效。 - Jan H
HKCR是HKey_Classes_Root的简称。为了使用Microsoft的答案,您可以首先将CLSID设置为HKLM:\Software\Classes\Excel.Application\CLSID\(Default),然后使用该CLSID查找HKLM:\Software\Classes\CLSID\$clsid\LocalServer32\(Default) - SeanC
@JanH 通常 Office 的路径也在环境变量中,所以只需键入 excel.exe 就可以解决问题。 - MDMoore313

0

只读是文件的一个属性。因此,我的建议是将文件设置为只读,然后使用Invoke-item以正常方式打开。 或者,您可以使用代码来设置文件属性。以下代码应该能解决问题:

set-itemproperty "some-file.xlsx" -Name Attributes -Value "ReadOnly"   

参考资料:

http://blogs.technet.com/b/heyscriptingguy/archive/2011/01/27/use-powershell-to-toggle-the-archive-bit-on-files.aspx

将文件设置为只读的步骤:

  1. 确保文件未在Excel中打开。
  2. 在Windows开始菜单上,指向程序,指向附件,然后单击Windows资源管理器。
  3. 在资源管理器窗口中,打开包含该文件的驱动器或文件夹。
  4. 单击文件名。
  5. 在“文件”菜单上,单击“属性”。
  6. 单击“常规”选项卡。
  7. 选择“只读”复选框。

参考:

http://office.microsoft.com/en-gb/excel-help/save-a-workbook-as-read-only-or-remove-read-only-status-HP005201902.aspx


3
感谢您详细的回答。该回答解释了如何使文件为只读。这与在 Excel 的只读模式下打开文件有些关联。前者将使文件对所有用户为只读,而后者将指示 Excel 在只读模式下打开文件,使其他用户可以编辑它,并防止 Excel 要求用户输入 Excel 表格密码。 - Jan H
这个答案可能应该被删除,原因就如Jan H所述。它在任何实际生产环境中都无法被实现,否则用户迟早会抱怨。 - Graham

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接