如何在Powershell中删除table header并转换为Date类型?
How to remove table header in Powershell and convert to Date type?
嘿,我正在尝试创建一个脚本来从 excel 中提取数据并将其插入 SQL。
当我提取日期值并且它们成为 table 的一部分并且每当我尝试使用以下代码时,问题就出现在 post 的底部。提取并转换 excel“相对日期”数字,这是从设定日期计算得出的 5 位数字。
代码:
for ($i = 0; $i -lt 6; $i++)
{
for ($i2 = 0;$i2 -lt 10; $i2++)
{
$ExcelDate = Import-Excel -Path $path -StartColumn 2 -EndColumn 2 -StartRow 7 -EndRow 20
-WorksheetName $WeekDays[$i]
[DateTime]::FromOADate($ExcelDate[$i2])
}
}
错误:
Cannot convert argument "d", with value: "@{Date Del.=44293}", for
"FromOADate" to type "System.Double": "Cannot convert the "@{Date Del.=44293}"
value of type "System.Management.Automation.PSCustomObject" to type
"System.Double"."
At H:\My Files\Jobs\Projects\In Progress\Killsheet Data Import\Importing data
test v1.ps1:75 char:9
+ [DateTime]::FromOADate($ExcelDate[$i2])
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodException
+ FullyQualifiedErrorId : MethodArgumentConversionInvalidCastArgument
我需要帮助将@{date Del.=44293} 更改为“44293”的“字符串值”
Import-Excel cmdlet return PSCustomObject 类型的数组。单元格值作为属性存储在 object 上,属性 的名称设置为列的 header 名称。所以要访问你需要写的值 $ExcelDate[$i2].NameOfColumn
.
您应该注意到 Import-Excel 通常会设法为您将 Date 列转换为 DateTime,因此您不需要使用 FromOADate
.
进行转换
如果您不确定 Powershell object 上有哪些属性可用,您可以使用 cmdlet Get-Member
进行检查。例如 $ExcelDate[$i2] | Get-Member
对我来说输出:
TypeName: System.Management.Automation.PSCustomObject
Name MemberType Definition
---- ---------- ----------
Equals Method bool Equals(System.Object obj)
GetHashCode Method int GetHashCode()
GetType Method type GetType()
ToString Method string ToString()
MyExampleDateColumn NoteProperty datetime MyExampleDateColumn=2021-04-03 00:00:00
嘿,我正在尝试创建一个脚本来从 excel 中提取数据并将其插入 SQL。
当我提取日期值并且它们成为 table 的一部分并且每当我尝试使用以下代码时,问题就出现在 post 的底部。提取并转换 excel“相对日期”数字,这是从设定日期计算得出的 5 位数字。
代码:
for ($i = 0; $i -lt 6; $i++)
{
for ($i2 = 0;$i2 -lt 10; $i2++)
{
$ExcelDate = Import-Excel -Path $path -StartColumn 2 -EndColumn 2 -StartRow 7 -EndRow 20
-WorksheetName $WeekDays[$i]
[DateTime]::FromOADate($ExcelDate[$i2])
}
}
错误:
Cannot convert argument "d", with value: "@{Date Del.=44293}", for
"FromOADate" to type "System.Double": "Cannot convert the "@{Date Del.=44293}"
value of type "System.Management.Automation.PSCustomObject" to type
"System.Double"."
At H:\My Files\Jobs\Projects\In Progress\Killsheet Data Import\Importing data
test v1.ps1:75 char:9
+ [DateTime]::FromOADate($ExcelDate[$i2])
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodException
+ FullyQualifiedErrorId : MethodArgumentConversionInvalidCastArgument
我需要帮助将@{date Del.=44293} 更改为“44293”的“字符串值”
Import-Excel cmdlet return PSCustomObject 类型的数组。单元格值作为属性存储在 object 上,属性 的名称设置为列的 header 名称。所以要访问你需要写的值 $ExcelDate[$i2].NameOfColumn
.
您应该注意到 Import-Excel 通常会设法为您将 Date 列转换为 DateTime,因此您不需要使用 FromOADate
.
如果您不确定 Powershell object 上有哪些属性可用,您可以使用 cmdlet Get-Member
进行检查。例如 $ExcelDate[$i2] | Get-Member
对我来说输出:
TypeName: System.Management.Automation.PSCustomObject
Name MemberType Definition
---- ---------- ----------
Equals Method bool Equals(System.Object obj)
GetHashCode Method int GetHashCode()
GetType Method type GetType()
ToString Method string ToString()
MyExampleDateColumn NoteProperty datetime MyExampleDateColumn=2021-04-03 00:00:00