【问题标题】:Excel & PowerShell - PasteSpecial Failure With VLOOKUPsExcel 和 PowerShell - 使用 VLOOKUP 的 PasteSpecial 失败
【发布时间】:2016-07-28 09:56:41
【问题描述】:

我有一个 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]Device'!$B$2:$C24549,2,FALSE)

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

由于我在其中执行 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 错误通常如下:

使用“1”参数调用“PasteSpecial”的异常:“PasteSpecial 方法 工作表类失败” 在行:1 字符:25 + $sheetTrans.PasteSpecial

【问题讨论】:

    标签: excel powershell excel-formula powershell-2.0 vlookup


    【解决方案1】:

    我可以通过做一些直接引用来解决这个问题,并改变我分配范围的方式,然后调用 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
    

    【讨论】:

      猜你喜欢
      • 2016-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-17
      • 1970-01-01
      相关资源
      最近更新 更多