PowerShell Excel报告脚本异常错误

PowerShell Excel报告脚本异常错误,excel,powershell,Excel,Powershell,我对powershell有一个奇怪的问题。我还有其他脚本类似于在脚本中多次使用的行上抛出错误的脚本 我正在使用get content获取CSV文件。然后我开始解析数据,只选择某些列并将它们输出到excel。这里是我的一个问题发生的地方 这是非常不一致的,但在通过csv进行解析的某个时间点,我得到了这个错误 异常设置“Item”:“被调用方拒绝了调用。(来自HRESULT的异常:0x80010001(RPC_E_Call_rejected))” 在这一行上,用于将数据输出到excel中的特定列和行

我对powershell有一个奇怪的问题。我还有其他脚本类似于在脚本中多次使用的行上抛出错误的脚本

我正在使用
get content
获取CSV文件。然后我开始解析数据,只选择某些列并将它们输出到excel。这里是我的一个问题发生的地方

这是非常不一致的,但在通过csv进行解析的某个时间点,我得到了这个错误

异常设置“Item”:“被调用方拒绝了调用。(来自HRESULT的异常:0x80010001(RPC_E_Call_rejected))”

在这一行上,用于将数据输出到excel中的特定列和行


$excel.Cells.Item我不会使用select或activate,而是为每个工作表创建对象,并在各个工作表上调用Cells.Item,而不是整个工作簿。
因此,首先执行创建第一张工作表的工作表对象的
$Sheet1=$WorkBook.Worksheets.Item(1)
。然后使用
$sheet1.Cells.item($row,$col)=$item

关于为什么不使用选择或激活,有很多来源。这里有一个:


您不应该使用它的最大原因是因为性能,而且主要是因为它不是必需的。

我不会使用“选择”或“激活”,而是为每个工作表创建对象,并在单个工作表而不是整个工作簿上调用cells.item。 因此,首先执行创建第一张工作表的工作表对象的
$Sheet1=$WorkBook.Worksheets.Item(1)
。然后使用
$sheet1.Cells.item($row,$col)=$item

关于为什么不使用选择或激活,有很多来源。这里有一个:


您不应该使用它的最大原因是因为性能,而且主要是因为它不是必需的。

我不会使用“选择”或“激活”,而是为每个工作表创建对象,并在单个工作表而不是整个工作簿上调用cells.item。 因此,首先执行创建第一张工作表的工作表对象的
$Sheet1=$WorkBook.Worksheets.Item(1)
。然后使用
$sheet1.Cells.item($row,$col)=$item

关于为什么不使用选择或激活,有很多来源。这里有一个:


您不应该使用它的最大原因是因为性能,而且主要是因为它不是必需的。

我不会使用“选择”或“激活”,而是为每个工作表创建对象,并在单个工作表而不是整个工作簿上调用cells.item。 因此,首先执行创建第一张工作表的工作表对象的
$Sheet1=$WorkBook.Worksheets.Item(1)
。然后使用
$sheet1.Cells.item($row,$col)=$item

关于为什么不使用选择或激活,有很多来源。这里有一个:


您不应该使用它的最大原因是因为性能,而且主要是因为它不是必需的。

我发现我的问题是:

在脚本中,我打开工作簿,检查单元格中的日期,而不是将该日期与当前日期进行比较。一旦我得到了差异,我现在知道我必须循环我的报告并关闭工作簿多少次。然后,我开始编写一个批处理脚本,它收集了过去15天的大量数据,然后使用(开关)进行处理。一旦我有了数据,我会再次打开excel,开始我的报告

问题是关闭和重新打开excel之间的时间,在完全关闭之前,我将很快地重新打开同一工作簿。因此,在解析我的数据时,工作簿将变得“可用”,并中断我的脚本,抛出这些错误

在第二次打开excel之前,我通过放置一个
开始睡眠-第20秒
来解决这个问题,但还没有给我任何问题


编辑:我已经正确地修复了我对对象的使用。此外,我已将代码调整为只打开excel一次,而不是我一直在做的打开-关闭-打开-关闭操作。

我发现了我的问题所在:

在脚本中,我打开工作簿,检查单元格中的日期,而不是将该日期与当前日期进行比较。一旦我得到了差异,我现在知道我必须循环我的报告并关闭工作簿多少次。然后,我开始编写一个批处理脚本,它收集了过去15天的大量数据,然后使用(开关)进行处理。一旦我有了数据,我会再次打开excel,开始我的报告

问题是关闭和重新打开excel之间的时间,在完全关闭之前,我将很快地重新打开同一工作簿。因此,在解析我的数据时,工作簿将变得“可用”,并中断我的脚本,抛出这些错误

在第二次打开excel之前,我通过放置一个
开始睡眠-第20秒
来解决这个问题,但还没有给我任何问题


编辑:我已经正确地修复了我对对象的使用。此外,我已将代码调整为只打开excel一次,而不是我一直在做的打开-关闭-打开-关闭操作。

我发现了我的问题所在:

在脚本中,我打开工作簿,检查单元格中的日期,而不是将该日期与当前日期进行比较。一旦我得到了差异,我现在知道我必须循环我的报告并关闭工作簿多少次。然后,我开始编写一个批处理脚本,它收集了过去15天的大量数据,然后使用(开关)进行处理。一旦我有了数据,我会再次打开excel,开始我的报告

问题是关闭和重新打开excel之间的时间,在完全关闭之前,我将很快地重新打开同一工作簿。因此,在解析我的数据时,工作簿将变得“可用”,并中断我的脚本,抛出这些错误

在第二次打开excel之前,我通过放置一个
开始睡眠-第20秒
来解决这个问题,但还没有给我任何问题

编辑:我已经正确地修复了我对对象的使用。A.
#Create an instance of Excel
$excel = New-Object -comobject Excel.Application

#declaring sheet names 
$sheetName = "some sheet name"

#open Excel file
[string]$file = "C:\Users\Desktop\excel-file.xlsx"

$workBook = $excel.Workbooks.open($file)

$workBook.WorkSheets.Item($sheetName).activate()

$excel.Visible = $true

$excel.displayAlerts = $false 
#Declaring variables
$i = 0
$rowNumber = 2     
$rowMonth = 2786

$data1 = Get-Content $file1

foreach($row in $data1){    

    if($row){   
        $line = $row.Split(",")                      
        $i++

        #reset back to the first column once there is no more data for that row
        $column = 1       
        $columnMonth = 7     
        $dataColumn = 0    


        if($i -ge 1){    
                foreach($item in $line){
                    $dataColumn++
                    if($dataColumn -eq 1 -or $dataColumn -eq 2 -or $dataColumn -eq 5 -or $dataColumn -eq 7){                        
                            $excel.Cells.Item($rowNumber, $column) = "$item"
                            $excel.Cells.Item($rowMonth, $columnMonth) = "$item"
                            $column++
                            $columnMonth++
                        }#endif
                }#end foreach  
            $rowNumber++
            $rowMonth++
        }#end if $i          
    }#end if $row
}#end foreach