无法使用Powershell插入引用不同工作表的公式

时间:2017-12-18 18:15:54

标签: excel powershell excel-formula excel-2010 cell

出于某种原因,使用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中,相同的代码可以正常工作。

2 个答案:

答案 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不起作用。