通过 Powershell 插入 Excel 公式不起作用

Posted

技术标签:

【中文标题】通过 Powershell 插入 Excel 公式不起作用【英文标题】:Insert Excel formula via Powershell not working 【发布时间】:2020-12-20 16:04:31 【问题描述】:

我想用 PowerShell 将此公式插入 Excel:

=(IF(C2="Off";0;B2 * 0,075+D2 * 0,038)+E2 * 0,002) * 24 * 30,5

我用反引号 (`) 试过了,但它不起作用。

运行 powershell 脚本后,我插入公式的单元格是空白的。

这里是完整的代码:

$Currency = '=(D2*"0,109")'

$a = New-Object -comobject Excel.Application
$a.visible = $True
$b = $a.Workbooks.Add()
$b.worksheets.add()

$c = $b.Worksheets.Item(1)
$c.Cells.Item(1,2) = 'CPU'
$c.Cells.Item(1,3) = 'Power'
$c.Cells.Item(1,4) = 'RAM'
$c.Cells.Item(1,5) = 'Disk'
$c.Cells.Item(1,6) = 'Cost'
$c.Cells.Item(1,7) = 'Currency'

$d = $c.UsedRange
$d.Interior.ColorIndex = 20
$d.Font.ColorIndex = 1
$d.Font.Bold = $True

$c.Cells.Item(2,2) = '2'
$c.Cells.Item(2,3) = 'On'
$c.Cells.Item(2,4) = '8'
$c.Cells.Item(2,5) = '100'
$c.Cells.Item(2,6).Formula = "=(IF(C2=`"Off`";0;B2*`"0,075`"+D2*`"0,038`")+E2*`"0,002`")*24*`"30,5`""
$c.Cells.Item(2,7) = $Currency

$d.EntireColumn.AutoFit()
$intRow = 2

错误:

Exception from HRESULT: 0x800A03EC
At C:\Users\admineb\Desktop\PSskript\Costs.ps1:38 char:1
+ $c.Cells.Item(2,6).Formula = "=(IF(C2=`"Off`";0;B2*`"0,075`"+D2*`"0,0 ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : OperationStopped: (:) [], COMException
+ FullyQualifiedErrorId : System.Runtime.InteropServices.COMException

【问题讨论】:

您可以尝试将公式字符串用单引号括起来......像这样:$c.Cells.Item(2, 5).Formula = '=(IF(C2="Off";0;B2*"0,075"+D2*"0,038")+E2*"0,002")*24*"30,5"' 未经测试,但您可能需要使用FormulaLocal 而不是Formula 您可能处于使用逗号作为小数(而不是点)的区域,但为什么要将数字用双引号括起来?您原来的 Excel 公式不这样做。为什么不:'=(IF(C2="Off";0;B2 * 0,075+D2 * 0,038)+E2 * 0,002) * 24 * 30,5' 【参考方案1】:

#PowerShell - Excel.Application 使用 FormulaLocal 将表达式分配给 Cell.Item(2,5).FormulaLocal :

$a=New-Object -comObject Excel.Application;
$a.visible = $True;
$a.workbooks.add();
$a.worksheets.add();
$a.worksheets.Item(1);
$a.Cells.Item(1,1);
$a.Cells.Item(1,2);

$a.Cells.Item(2,5).FormulaLocal = "=A1+B1";

【讨论】:

【参考方案2】:

现在可以正常工作了。 感谢您的快速回答:-)

$c.Cells.Item(2,6).FormulaLocal = '=(IF(C2="Off";0;B2*"0,075"+D2*"0,038")+E2*"0,002")*24*"30,5"'

有没有一种简单的方法可以使用 PowerShell 自动向下拖动带有上述公式的填充手柄?

我需要使用超过 1000 个 excel 行来完成此操作

“C2”、“B2”、“D2”、“E2”中的数字“2”能否与变量互换?

【讨论】:

【参考方案3】:

谢谢,他现在正在工作。 :-)

有没有一种简单的方法可以使用 PowerShell 自动向下拖动带有上述公式的填充手柄?

我需要使用超过 1000 个 excel 行来完成此操作

“C2”、“B2”、“D2”、“E2”中的数字“2”能否与变量互换?

【讨论】:

【参考方案4】:

它现在正在工作。

(B2*"0,075"+D2*"0,038")+E2*"0,002")24"30,5"' 直接在 PS 中而不是 Excel 公式中执行此数学公式。

感谢您的支持!

【讨论】:

以上是关于通过 Powershell 插入 Excel 公式不起作用的主要内容,如果未能解决你的问题,请参考以下文章

EXCEL插入大量公式数据技巧

如何使用 Open XML 将公式插入 Excel 2010 工作表?

是否可以通过 COM 将图像插入 excel 单元格?

将公式插入单元格 VBA Excel 时出现运行时错误 1004

插入公式后的宏延迟问题 - Excel

图片如何批量插入到Excel表格中?用Html公式太复杂了,这才是最简单方法!