PowerShell Excel file



您能为我提供以下要求。

Power Shell脚本的输入是 - excel文件,该文件由单列列,列名是empname。

样本值

AARON, JEFFERY
AARON, KARINA
ABBATE, JOSEPH L
ABBATEMARCO, JAMES J
ABDALLAH, ZAID

输出是:创建一个带有2列EmpName和EmpShortName的新Excel文件。这里的名称列值与输入文件相同,而短名值是名字的第一个字符,也是姓氏的所有字符。

示例:

EmpName EmpShortName
AARON, JEFFERY jaaron
AARON, KARINA kaaron
ABBATE, JOSEPH L jabbate
ABBATEMARCO, JAMES J jabbatemarco
ABDALLAH, ZAID zabdallah

我尝试了这个

# Specify the path to the Excel file and the WorkSheet Name
$FilePath = "D:2018Book2.xlsx"
$SheetName = "Sheet1"
# Create an Object Excel.Application using Com interface
$objExcel = New-Object -ComObject Excel.Application
# Disable the 'visible' property so the document won't open in excel
$objExcel.Visible = $false
# Open the Excel file and save it in $WorkBook
$WorkBook = $objExcel.Workbooks.Open($FilePath)
# Load the WorkSheet 'Sheet1'
$WorkSheet = $WorkBook.sheets.item($SheetName)
[pscustomobject][ordered]@{
EmpName = $WorkSheet.Range("A1").Text }

但在最后一行中遇到错误。一旦工作需要编写逻辑获取另一列表单empname列

您想使用.Range("A1").CurrentRegion选择A1附近的所有单元格,而不仅仅是A1本身。

$Worksheet.Range('A1').CurrentRegion | Where-Object {
    $_.text -notmatch "EmpName"
} | ForEach-Object {
    $name = $_.text
    $split = $name -split ", "
    [pscustomobject]@{
        EmpName = $name
        EmpShortName = $split[1][0]+$split[0]
    }
}

您说数据在Excel文件中。它实际上是一个Excel文件还是.csv文件?如果是.CSV,则使用导入CSV导入数据很容易。无论哪种方式,一旦导入数据,请使用Select-Object和计算的属性来重组数据。最后,使用Export-Csv保存输出文件。如果是.csv文件,则可以简单的解决方案

 Import-Csv  employees.csv -Header last,first |
    Select-Object -Property `
        @{n="EmpName";      e={$_.first + " " + $_.last }},
        @{n="EmpShortName"; e={ $_.first[0] + $_.Last }} |
            Export-Csv -NoTypeInformation employees_updated.csv

相关内容

最新更新