Excel& PowerShell - 使用VLOOKUPs粘贴特殊故障

时间:2016-04-07 13:22:34

标签: excel powershell excel-formula powershell-v2.0 vlookup

我将VLOOKUP插入到我的电子表格的F栏中,如下所示:

$vLookup = "=VLOOKUP($refCol,'$xlsLocsDIR[locs.xlsx]Device'!`$B`$2:`$C$rowsDvcs,2,FALSE)"
$sheetSave.Cells.Item(2,6).Formula = $vLookup

这是明确的,在Excel中正确保存:

  

= VLOOKUP(E2,' [locs.xlsx]装置' $ B $ 2:$!C24549,2,FALSE)

(参考文件中有~25k行,但文件中有超过200k 我有VLOOKUP。)

由于我在其中进行VLOOKUP的文件大小,并且客户可能正在使用32位操作系统或Excel,我必须一次复制/粘贴不超过30000行,填写所有200k行,如下:

#32-bit OS/Excel app compatibility
#Excel/32-bit OS/memory errors occur if doing more than 30k cells
#instead, we do 20k, save, 20k, save, etc

for ($i=2; $i -le $rowsTrans; ($i+30000))
{
    #set the stop point, not to exceed total usedrows
    if (($i + 30000) -gt $totalRows)
        {$j = $totalRows}
    else 
        {$j = ($i+30000)}

    #copy the data
    $copyCell = (("F" + $i))
    $copyRange = $sheetTrans.Range($copyCell)
    $copyRange.Copy() | Out-Null

    $sheetSave.Activate()
    $pasteRange = $sheetTrans.Range(("F"+$i+":F"+$j)).Select()
    $sheetSave.PasteSpecial(7)
    $fileWorking.Save()
}

我只想将单元格F2中的VLOOKUP公式复制到F列的下一行20k行,然后保存文件,然后再次迭代直到我填充整个文件。

当我执行上述操作时,除了此示例之外,我尝试了不同的方法,我总是收到一个MethodInvocation错误,,除非我明确地使文件/工作表可见,就像这样,在上面的循环之前:

$xlsObject.Visible = $true

我对Copy()/ PasteSpecial()函数调用有什么误解?为什么必须看到工作表?

注意我试图匿名上述代码并限制了解问题的必要条件。代码函数,我只是不想要求Excel实例随时进入视图。我更喜欢脚本对最终用户不可见。

我收到的MethodInvocation错误通常如下:

  

异常调用" PasteSpecial"用" 1"参数:" PasteSpecial方法   工作表类失败"   在线:1个字符:25   + $ sheetTrans.PasteSpecial<<<< (9)       + CategoryInfo:NotSpecified:(:) [],MethodInvocationException       + FullyQualifiedErrorId:ComMethodTargetInvocation

1 个答案:

答案 0 :(得分:0)

我能够通过做一些直接引用,改变我分配范围的方式,然后调用PasteSpecial来解决这个问题,如下所示:

$pasteRange = $sheetTrans.Range(("F"+$i+":F"+$j))
$pasteRange.PasteSpecial($xlPasteValues) | Out-Null

使用这样的声明:

Add-Type -ASSEMBLY "Microsoft.Office.Interop.Excel" | out-null
$global:xlPasteFormulas = -4123
$global:xlPasteValues = -4163