您能为我提供以下要求。
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