gpt4 book ai didi

c# - Powershell 脚本错误 "Cannot find an overload for "LoadFromCollection"和参数计数 : "1"."

转载 作者:行者123 更新时间:2023-12-03 01:26:22 25 4
gpt4 key购买 nike

我正在尝试使用 LoadfromCollection 将集合对象加载到 excel 文件中。我正在使用 EPPLUS 库来这样做。但我不断收到错误“ 找不到“LoadFromCollection”的重载和参数计数:“1”。”由于我是 PowerShell 的新手,不知道如何解决这个问题。另外,还有其他方法可以使用 EPPLUS 库加载集合对象吗?

$pkg = [OfficeOpenXml.ExcelPackage]::new($Path)
$ws = $pkg | Add-WorkSheet -WorkSheetname 'test'

$DemoData = New-Object System.Collections.ArrayList

$DemoData = 1..10 | Foreach-Object{

$BookID = Get-Random -Minimum 1 -Maximum 1000
$Date = (Get-Date).adddays(-$BookID)

New-Object -TypeName PSObject -Property @{
Name = "Book$_"
BookID = $BookID
Date = $Date
} | Select Name, BookID, Date
}
$null = $ws.Cells['A1'].LoadFromCollection($DemoData)

最佳答案

.LoadFromCollection 是一个通用方法带有以下签名:

public ExcelRangeBase LoadFromCollection<T>(
IEnumerable<T> Collection
)
为了让 PowerShell 能够调用泛型方法,它必须能够推断出具体类型 T IEnumerable<T> 的元素实例。
因此, 鉴于您的 $DemoData数组不是强类型 - 类型为 [object[] , PowerShell 的常规数组类型 - PowerShell 找不到合适的 .LoadFromCollection方法重载 ,导致您看到的错误。
(注意 $DemoData = New-Object System.Collections.ArrayList 语句无效:后续的 $DemoData = 1..10 ... 语句将覆盖它,并分配命令返回的任何内容,即 [object[]] 数组。)
直接的解决方法是确保您使用强类型数组,这意味着: [pscustomobject[]] $DemoData = 1..10 ... ,鉴于 [pscustomobject]Select-Object 的对象的类型调用返回。
这可能就足够了,具体取决于该方法用于确定输入对象属性的反射方法:
  • 如果它能够通过 IDynamicMetaObjectProvider 发现属性接口(interface),其中[pscustomobject]实现,然后是 [pscustomobject[]]类型约束就足够了。
  • 如果没有,您必须通过 (PSv5+) 自定义类创建常规 .NET 类型,如下所示:
  • # PowerShell v5 and above.

    $pkg = [OfficeOpenXml.ExcelPackage]::new($Path)
    $ws = $pkg | Add-WorkSheet -WorkSheetname 'test'

    # Define a custom class with the properties of interest.
    class Custom {
    [string] $Name
    [int] $BookID
    [datetime] $Date
    }

    [Custom[]] $DemoData = 1..10 | Foreach-Object{

    $BookID = Get-Random -Minimum 1 -Maximum 1000
    $Date = (Get-Date).adddays(-$BookID)

    # Create and output a [Custom] instance with the specified property values.
    [Custom] @{ Name = "Book$_"; BookId = $BookID; Date = $Date }

    }

    # Call .LoadFromCollection with the strongly typed array.
    $null = $ws.Cells['A1'].LoadFromCollection($DemoData)

    关于c# - Powershell 脚本错误 "Cannot find an overload for "LoadFromCollection"和参数计数 : "1".",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62638768/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com