阅读Excel电子表格并向其添加信息

时间:2017-02-23 17:08:47

标签: excel powershell

我目前有一个电子表格,显示如下:

+------------+---------+---------+
|    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" 

但它正在重复标题。有什么想法吗?

1 个答案:

答案 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语句。 我知道《守则》并不完美,但希望对您有所帮助。