当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 在 SharePoint Online 的列表之间复制列值

作者:精品下载站 日期:2024-12-14 21:34:49 浏览:16 分类:玩电脑

在 SharePoint Online 的列表之间复制列值


要求:将数据从 SharePoint Online 中的一个列表列复制到另一列。

如何将列的值从一个列表复制到另一个列表?

以下是用于在列表之间复制列值的 PowerShell 脚本:


#Parameters
$SourceSiteUrl = "https://crescent.sharepoint.com/sites/Retail"  
$DestinationSiteUrl = "https://crescent.sharepoint.com/sites/Sales"
$SourceListName = "Projects"
$DestinationListName = "ProjectsV2"
$FieldsToCopy = "ProjectName", "ProjectDescription", "ProjectManager", "Date", "Department"

#Connect to Source site
Connect-PnPOnline -Url $SourceSiteUrl -Interactive
 
#Get All Items from the Source List
$SourceListItems = Get-PnPListItem -List $SourceListName -Fields $FieldsToCopy -PageSize 2000

#Connect to Destination site
Connect-PnPOnline -Url $DestinationSiteUrl -Interactive

#Copy Items from the Source to Destination
[int]$Counter = 1
ForEach($ListItem in $SourceListItems)
{
    $ItemValue = @{}
    ForEach($Field in $FieldsToCopy)
    {
        #Check if the Field value is not Null
        If($ListItem[$Field] -ne $Null)
        {
            #Handle Special Fields
            $FieldType  = (Get-PnPField -List $SourceListName -Identity $Field).TypeAsString
  
            If($FieldType -eq "User" -or $FieldType -eq "UserMulti" -or $FieldType -eq "Lookup" -or $FieldType -eq "LookupMulti") #People Picker or Lookup Field
            {
                $LookupIDs = $ListItem[$Field] | ForEach-Object { $_.LookupID.ToString()}
                $ItemValue.add($Field,$LookupIDs)
            }
            ElseIf($FieldType -eq "URL") #Hyperlink
            {
                $URL = $ListItem[$Field].URL
                $Description  = $ListItem[$Field].Description
                $ItemValue.add($Field,"$URL, $Description")
            }
            ElseIf($FieldType -eq "TaxonomyFieldType" -or $FieldType -eq "TaxonomyFieldTypeMulti") #MMS
            {
                $TermGUIDs = $ListItem[$Field] | ForEach-Object { $_.TermGuid.ToString()}                    
                $ItemValue.add($Field,$TermGUIDs)
            }
            Else
            {
                #Get Source Field Value and add to Hashtable
                $ItemValue.add($Field,$ListItem[$Field])
            }
        }
    }
    Write-Progress -Activity "Copying List Items:" -Status "Copying Item ID '$($ListItem.Id)' from Source List ($($Counter) of $($SourceListItems.count))" -PercentComplete (($Counter / $SourceListItems.count) * 100)
 
    #Copy column value from source to target
    Add-PnPListItem -List $DestinationListName -Values $ItemValue | Out-Null
  
    Write-Host "Copied Values from Source to Target Column of Item '$($ListItem.Id)' ($($Counter) of $($SourceListItems.count)) "
    $Counter++
}

在运行此脚本之前,请确保目标列表包含与源列表类似的字段(字段内部名称、字段设置等)。您可以使用此 PowerShell 脚本在列表之间复制列:如何在 SharePoint Online 中将列从一个列表复制到另一个列表?

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯