无法更改单元格上的公式?

在这个问题之后 ,我试图用许多工作簿上的所有公式replace$B$1TEXT($B$1,"0000") 。 现在我已经过了那个.save()的问题,我还有另外一个(实际上应该是第一个):我似乎无法改变。无论我尝试什么, .Formula价值。

 PS C:\> $Search.Formula = $Search.Formula -replace '\$B\$1','TEXTO($B$1,"0000")' Exceção ao definir "Formula": "Exceção de HRESULT: 0x800A03EC" No linha:1 caractere:1 + $Search.Formula = $Search.Formula -replace '\$B\$1','TEXTO($B$1,"0000")' + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [], SetValueInvocationException + FullyQualifiedErrorId : CatchFromBaseAdapterSetValueTI 

公式是:

 =PROCV(("A"&ANO($A6)&"M"&MÊS($A6)&"P"&$B$1);BASE!$A:$P;9;FALSO) 

在英语中,如果我记得正确的关联:

 =VLOOKUP(("A"&YEAR($A6)&"M"&MONTH($A6)&"P"&$B$1);BASE!$A:$P;9;FALSE) 

预期的产出将是

 =VLOOKUP(("A"&YEAR($A6)&"M"&MONTH($A6)&"P"&TEXT($B$1,"0000"));BASE!$A:$P;9;FALSE) 

有一些事情与你提供的东西有关。 乍看之下,你似乎正在使用反斜杠作为转义字符,使美元符号文字。 这个在PowerShell中的转义字符是back-tick或grave(例如“)。

如果我在Excel中执行此操作,则可能只需在text($B$1, "0000")查找并replace工作表上的每个$B$1 。 在我看来,它足够强大,可以在不使用PowerShell的-replace方法的情况下处理操作。 工作表方法在一定程度上取决于$B$1开始可用,但由于它也在replace中,所以您几乎需要知道您事先要replace的内容。 如果这个脚本留给临时用户,那么在这个区域中的一些错误控制可能是必要的。

 $excel = New-Object -comobject Excel.Application $FilePath = "c:\temp\example.xlsx" $workbook = $excel.Workbooks.Open($FilePath) $excel.Visible = $true $worksheet = $workbook.worksheets.item("Sheet1") #set some Find & Replace vars $what = "`$B`$1" $with = "text(`$B`$1, `"0000`")" #use worksheet-wide Find & Replace to change formula $worksheet.usedrange.replace($what, $with, 2) #formula(s) should be changed. now Find it and display it $fnd = $worksheet.usedrange.find($what, $worksheet.range("A1"), -4123, 2) Write-Output $fnd.formula $workbook.save() $workbook.close() $excel.quit() 

我已经通过在操作之后查找和显示公式来validationRange.Replace方法 ,并且更广泛地使用了严重转义字符,而不是在引用string中的单引号和双引号之间来回切换。

上面的代码使用我testing过的EN-US版本。 您的区域设置的实际replace文本似乎是,

 $with = "texto(`$B`$1; `"0000`")"