出于某种原因,使用Powershell脚本将公式插入Excel表格。如果手动输入公式,它可以正常工作。假设我在$names
数组中有3个元素:
$excel = New-Object -ComObject excel.application
$excel.visible = $true
$workbook = $excel.Workbooks.Add()
$names = @()
foreach ($i in 1,2,3) {
$ws = $workbook.Worksheets.Add()
$names += $ws.Name
}
$i = 1
foreach ($sheet in $names) {
$formula = "=COUNT('$sheet'!D:D)"
write-host $formula
$excel.cells.item($i, 1).Formula = $formula
$i++
}
会发生什么:第一个单元格获取正确的值,但公式名称丢失(例如,而不是=COUNT('Sheet2'!D:D)
我得到=('Sheet2'!D:D)
,另外两个抛出0x800A03EC
例外。 sheet我引用肯定存在,因为如果我手动复制并粘贴由write-host $formula
打印的值,它将按预期工作。
它似乎也能正常工作如果我没有引用另一张纸。下面的代码不会抛出任何异常:
$formula = "=COUNT(D:D)"
$excel.cells.item($i, 1).Formula = $formula
更新
似乎是特定于Excel 2010的问题。在Excel 2016中,相同的代码可以正常工作。
答案 0 :(得分:0)
我试图嘲笑你的方法并提出以下工作代码:
foreach($ws in $b.Sheets) {
$ws.Cells.Item(1,1).Formula = "=COUNT($($ws.Name)!D:D)"
}
答案 1 :(得分:0)
我已设法使用FormulaLocal
代替Formula
。我仍然相信它是Excel 2010中的一个错误,因为Formula
在Excel 2016中运行得非常好。我仍然无法在脚本中插入包含Excel 2010中的工作表引用的数组公式:甚至首先分配FormulaLocal
,然后将其值分配给FormulaArray
不起作用。