通过 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 公式不起作用的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Open XML 将公式插入 Excel 2010 工作表?