【发布时间】: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