从this question跟进,我正在尝试将$B$1
替换为TEXT($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)
答案 0 :(得分:2)
你提供的东西还有很多事情要做。乍一看,您似乎使用反斜杠作为转义字符,以使美元符号字面意义。 PowerShell中的转义字符是后退或坟墓(例如`)。
如果我在Excel中执行此操作,我可能只是查找&使用$B$1
替换工作表上的每个text($B$1, "0000")
。在我看来,如果没有PowerShell的-replace
方法,它就足以完成操作。工作表方法在某种程度上取决于$B$1
开始可用,但由于它也在替换中,因此您几乎需要事先知道要替换的内容。如果此脚本留给临时用户,则可能需要在该区域中进行一些错误控制。
$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()
我通过在操作之后查找并显示公式来证明Range.Replace method,并且更广泛地使用了严重转义字符,而不是在引号字符串中单引号和双引号之间来回交换。
以上代码使用我测试过的EN-US版本。您的区域设置的实际替换文字似乎是
$with = "texto(`$B`$1; `"0000`")"