我将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
答案 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