【问题标题】:How to save a read-only file using PowerShell如何使用 PowerShell 保存只读文件
【发布时间】:2017-09-13 14:54:48
【问题描述】:

我有一个要打开的 Excel 文件,对其应用密码,然后使用 PowerShell 保存它。我收到以下错误:

使用“3”参数调用“SaveAs”的异常:“无法保存为该名称。文档以只读方式打开。” 在 C:\PasswordProtectExcelFiles.ps1:38 char:45
+ $a = $wb.SaveAs("$($FilePath)",$xlNormal,"$($Password)")
+ ~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : ComMethodTargetInvocation

我搜索了很多,但没有解决我的问题。以下是我已经提到的一些问题: Powershell - SaveAs function when file already existsHow to Remove ReadOnly Attribute on File Using PowerShell?.

我的代码:

param([string]$FilePath, [string]$Password )
$xl = new-object -comobject excel.application
$xl.Visible = $True
$xl.DisplayAlerts = $False

$wb = $xl.Workbooks.Open("$($FilePath)")

$a = $wb.SaveAs("$($FilePath)",$xlNormal,"$($Password)")

$a = $xl.Quit()

$a = Release-Ref($wb)
$a = Release-Ref($xl)

我在 Workbooks.Open 语句之后尝试了这些代码,以查看它是否会保存只读文件,并且它有效,但是当我关闭并重新打开代码时它停止工作:

Code1:
$file = Get-Item "$($FilePath)"
if ($file.IsReadOnly -eq $true)
{
    $file.IsReadOnly = $false
}

Code2:
Set-ItemProperty "$($FilePath)" -name IsReadOnly -value $false

实际上,文件不是只读的,但文件夹是只读的,我无法检查只读框。和这个问题一样:https://social.technet.microsoft.com/Forums/windowsserver/en-US/f7ec4fc5-3bbe-4fd0-a8ca-c4ead75b010c/unable-to-removeclear-readonly-attribute-from-folder-in-windows-server-2008

【问题讨论】:

  • 也许您只是没有安全权限。可以手动打开文件保存吗?

标签: excel powershell readonly


【解决方案1】:

根据the documentation for the Open() method,第三个参数可以指定是否以只读模式打开文件。

设置为$false:

$wb = $xl.Workbooks.Open("$($FilePath)", 0, $false)

【讨论】:

  • 感谢您的回答,但仍然无法正常工作。起初它可以工作,但是当我替换文件时,它又给了我同样的只读错误。完成测试后,我想使用原始模板进行测试,因此我将文件替换为原始模板并运行 SSIS 包。当我打开文件时,没有密码。所以我运行代码 frm PoSh 并出现了相同的只读错误。我想要一个保存只读文件的代码。看起来其他所有内容都只是以非只读方式打开文件,但使用相同名称保存是一个问题。使用不同的名称保存。
  • 这似乎是一个覆盖问题。应用密码后无法覆盖
  • 你有没有考虑过用密码保存到一个临时文件/另一个文件名,然后删除原始文件并重命名临时文件?
  • @Stephanie 检查您是否正确终止了 Excel 应用程序。您可能不这样做,并且剩余的进程仍然保留在文件中,导致您随后的打开请求不允许写入。
  • @MathiasR.Jessen 正是我的方式。我将它保存到不同的位置,删除原始文件并使用 passw 将文件移动到原始文件位置。我继续使用这种方法,但我的开发人员仍然对我为什么不能这样做感到好奇。我觉得有办法,我可能会错过一些东西,
猜你喜欢
  • 2010-10-27
  • 2018-12-09
  • 1970-01-01
  • 1970-01-01
  • 2011-11-22
  • 1970-01-01
  • 2019-08-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多