2

我正在尝试通过 Powershell 为 excel 单元格设置一个值,我收到错误 HRESULT: 0x800A03EC,这会提前结束脚本。我意识到还有其他与此错误或类似错误相关的问题,但没有一个解决方案对我有用,所以我假设这是一个单独的问题。

我以前运行过我的脚本,但它现在才给我这个错误。

相关代码:

$Output_Location = "Z:\Documents\Powershell"
$Excel_File = "Report.xlsx"
$ExcelWorkBook = $Excel.Workbooks.open("$Output_Location\$Excel_File")
$MainSheet = $ExcelWorkBook.worksheets.Item("Report")
$Sheet1 = $ExcelWorkBook.worksheets.Item("Sheet1")
$Sheet1.name = "Statistics" 
$StatisticsSheet = $ExcelWorkBook.worksheets.Item("Statistics")

$row = 3
$column = 2
$StatisticsSheet.Cells.Item(2,2)= 'KeyToMatch'
$StatisticsSheet.Cells.Item($row,$column) = '=COUNTIFS(Report!E2:E200000,B$3,Report!G2:G200000,"UserMailbox")'
$row++
$StatisticsSheet.Cells.Item($row,$column) = '=COUNTIFS(Report!E2:E200000,B$3,Report!G2:G200000,"RemoteUserMailbox")'
$row++

代码加载 excel 文件并点击将单元格 (2,2)/(B,2) 设置为其值的行。但是,当代码在 KeyToMatch (B,3) 下方的行中设置单元格值时,会引发错误 0x800A03EC。

完整错误:

Exception from HRESULT: 0x800A03EC
At Z:\Documents\Powershell\Reporting\Report.ps1:113 char:1
+ $StatisticsSheet.Cells.Item($row,$column).value = '=COUNTIFS(Report! ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : OperationStopped: (:) [], COMException
+ FullyQualifiedErrorId : System.Runtime.InteropServices.COMException

我试过在单元格和值之间隔开'=',我还尝试了以下方法:

$StatisticsSheet.Cells.Item($row,$column).value = ...
$StatisticsSheet.Cells.Item($row,$column).value2 = ...
$StatisticsSheet.Cells.Item($row,$column).text = ...
$StatisticsSheet.Cells.Item($row,$column).formula = ...

我可以注释掉将单元格的值设置为公式的任意数量的行,而第一个尝试这样做的行将抛出上述错误。

就像我说的,我以前运行过这个脚本,但现在它给我带来了麻烦。我怎样才能解决这个问题,使代码运行顺利?

4

2 回答 2

2

将解决方案从一个问题移到另一个答案:

解析度:

为了解决这个问题,在我分配给单元格的文本中,我用双引号替换了单引号,因此,不得不转义'$'和'"'字符。我还在“报告”周围添加了单引号(每次出现在文本中时从中提取数据的表名。

它最终看起来像这样,并且运行良好:

$StatisticsSheet.Cells.Item($row,$column) = "=COUNTIFS('Report'!E2:E200000,B`$3,'Report'!G2:G200000,`"UserMailbox`")"

仍然不确定为什么会发生此错误-在此之前代码每周都有效!在更改脚本并找到解决方案之前,我在多台机器(5+)上对其进行了测试,并且每次都会抛出标题中提到的错误。

于 2017-07-12T14:11:46.240 回答
-1

这是一个非常简单的问题,它在范围内放置了类似的值

ExcelSheet.Cells.Range("A1:A1").Value = "'asdf"
于 2018-08-02T17:35:19.133 回答