我有一个简单的脚本,获取.csv文件并对其进行一些更改,然后保存该文件作为Excel工作簿,当我在PowerShell伊势中运行它时,所有工作正常,但在VS Code中我得到以下错误:
InvalidOperation: C:\Path\CSV Script v2.ps1:80:41
Line |
80 | … Objects.Add([Microsoft.Office.Interop.Excel.XlListObjectSourceType]:: …
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| Unable to find type [Microsoft.Office.Interop.Excel.XlListObjectSourceType].
InvalidOperation: C:\Path\CSV Script v2.ps1:83:5
当我尝试在脚本中执行以下操作时,会出现错误:
# Convert the data range to a table
$table = $worksheet.ListObjects.Add(
[Microsoft.Office.Interop.Excel.XlListObjectSourceType]::xlSrcRange,
$dataRange,
$null,
[Microsoft.Office.Interop.Excel.XlYesNoGuess]::xlYes
)
# Name the table as the worksheet name
$table.Name = $worksheet.Name
我已经尝试了多种方法来解决VS代码中的问题,但似乎没有任何帮助,我真的很想找出为什么会发生这个问题。
任何帮助将不胜感激
谢谢
斯坦
我在网上找到了一些相关信息后,尝试在脚本开始时以多种方式加载互操作excel对象,但这并不是我遇到的问题,而且我还尝试了许多其他方法。
2条答案
按热度按时间wmvff8tz1#
tl;dr
使用以下命令也在PowerShell (Core) 7+中加载
Microsoft.Office.InterOp.Excel
程序集(的最新版本),以便您可以在脚本中使用[Microsoft.Office.Interop.Excel.XlListObjectSourceType]
等类型:要在给定计算机上找出文本路径(将是特定于版本的),请打开 Windows PowerShell(
powershell.exe
)会话并运行:Add-Type -AssemblyName Microsoft.Office.InterOp.Excel; [Microsoft.Office.Interop.Excel.Application].Assembly.Location
;例如,对于Microsoft Office 2019,这会产生以下结果;虽然你可以在Add-Type -LiteralPath
中使用这个,但请注意,你将锁定特定的版本:与 Windows PowerShell 不同,在 PowerShell(Core)7+ 中,当您使用
New-Object -ComObject Excel.Application
时,此程序集既不会 * 隐式 * 加载,也不能通过Add-Type -AssemblyName Microsoft.Office.InterOp.Excel
的 name only 发现重要:
Microsoft.Office.InterOp.Excel
程序集不能 * 保证 * 存在于给定的机器上。请继续阅读以了解详细信息。
您尝试访问的类型-
[Microsoft.Office.Interop.Excel.XlYesNoGuess]
-来自Excel PIA(主互操作程序集)Microsoft.Office.InterOp.Excel
,它将COM自动化类型 Package 在.NET类型中。此类皮亚斯:
[Microsoft.Office.Interop.Excel.XlListObjectSourceType]
和[Microsoft.Office.Interop.Excel.XlYesNoGuess]
,并使用这些枚举类型值的 * 底层数值 *,例如,根据链接文档,1
代替[Microsoft.Office.Interop.Excel.XlListObjectSourceType]::xlSrcRange
,2
代替[Microsoft.Office.Interop.Excel.XlYesNoGuess]::xlNo
。注意事项:
-Strict
交换机添加到New-Object -ComObject
呼叫。[1]其他好处是能够 * 发现 *(通过
Get-Member
)和 * 制表符完成 * 组成Excel对象模型的对象的成员。63lcw9qa2#
我能够找到正确的add-type命令来输入和加载
Microsoft.Office.Interop.Excel.dll
。一旦我找到了正确的路径,修复方法是将此添加到脚本的开头: