我目前有一个电子表格,显示如下:
+------------+---------+---------+
| Site | UserP |UserName |
+------------+---------+---------+
| Site A | Read | user1 |
| | | |
+------------+---------+---------+
| Site A | Write | user2 |
| | | |
+------------+---------+---------+
问题是,有时UserName字段会带来一个Group,然后我必须打开这个组,并为该组中的每个用户创建一个具有相同信息的新行。
所以,如果我有这个:
Site A | Read | Group 1
它会变成这样:
Site A | Read | Group 1
Site A | Read | Group 1 User A
Site A | Read | Group 1 User B
Site A | Read | Group 1 User C
我可以手动从组中提取信息,问题是我不知道如何从excel读取特定列,然后在该excel表中创建一个新行。
我没有发布任何代码,因为我几乎没有。我不知道如何循环到细胞。
这就是我所拥有的。
$file = "\Desktop\AccessReviewReportPRE.csv"
$sheetName = "AccessReviewReportPRE"
$objExcel = New-Object -ComObject Excel.Application
$workbook = $objExcel.Workbooks.Open($file)
$sheet = $workbook.Worksheets.Item($sheetName)
现在,我知道如何访问单个单元格,如下所示:
$worksheet.cells.Item(3, 3).text
只是不确定如何循环所有行,检查第三列中的内容并对其执行操作。
关注@BenH小费,我这样做了:
$file = "\Desktop\AccessReviewReportPRE.csv"
$fileContent = Import-csv $file -header "URL", "Site/List/Folder/Item", "Title/Name", "PermissionType", "Permissions", "LoginName"
$newRow = New-Object PsObject -Property @{"URL" = 'sdfs'; "Site/List/Folder/Item" = 'dsfd'; "Title/Name" = 'sdf'; "PermissionType" = 'dsf'; "Permissions" = 'sdfs'; "LoginName" = 'sdf'}
$fileContent += $newRow
$fileContent | Export-Csv -NoTypeInformation -Path "\Desktop\AccessReviewReportAFTER.csv"
但它正在重复标题。有什么想法吗?
答案 0 :(得分:0)
要遍历每一行,您需要一个循环。 我建议您做一会儿。
#My Code to find a groupname
$WorkBook=$Excel.Workbooks.Open($strPath)
#Selcet the first Tabelle
$mappe = $workbook.sheets.item(1)
$Target = $mappe.Range("A1").Find($Grouname)
$start = $Target.Row
end, $middle, $counter = 0
do {
#assigning
$middle = $end
#Search Funktion
$nextFind = $mappe.Range("A1:A150000").FindNext($Target)
#Old Range assinging to $find
$Target = $nextFind
#Assign the Rownumber
$end = $nextFind.Row
#Check if the Value is correct
if ($mappe.cells.Item($nextFind.Row,1).Value() -eq $Groupname)
{
$counter++
}else{
break
}
}while($end -gt $start)
#The FindNext function only works when there are at least 2 of the groups
#but in some cases there is only 1 group. To fix the issue a counter counts
#the passages and if it is 1, $middle will be assigned the start row.
if($counter -eq 1)
{
$middle= $start
}
#Because a line must be added after the last one, $row needs be increased by 1
$row = $middle + 1
#Column stays the same, later it will be increased
$column = $Target.Column
# ADD ROW
$eRow = $mappe.cells.item($row,1).entireRow
$active = $eRow.activate()
$active = $eRow.insert()
使用此代码,我正在寻找一个小组。我使用的Finde功能可以帮助我找到组。 finde函数无法循环工作,因此必须使用FindeNext函数。 $ middle包含要添加的行的最后一行,必须增加该行。 为了将数据添加到多列中,该行必须保持不变,但是必须增加该列。
$mappe.Cells.Item($row, $column) = Text
$column++
如果您想检查第3列,并希望根据其值进行操作,请创建一个if语句。 我知道《守则》并不完美,但希望对您有所帮助。