Wednesday, February 12, 2025

Import Sharepoint List data with PnP Powershell from excel

 


$siteUrl = "[SiteURL]"

$listName = "[List NAME]"

$excelFilePath = "C:\Users\user254\Downloads\ObservationsImport1.xlsx" 


$lookupColumns = @{

    "Location_ID" = "WS_Locations"

    "Line_ID" = "WS_Line"

    "Area_ID" = "WS_Area"

    "Sub_Area_ID" = "WS_Sub_Area"

    "Category_ID" = "WS_Category"

    "Sub_Category_ID" = "WS_Sub_Category"

}

$nonLookupColumns = @("OBSERVATION_DATE", "SHIFT", "TYPE", "BEHAVIOR", "AT_RISK_BY_UNSAFE_COND", "COMMENTS", "TIME_ZONE", "ROLE")



Connect-PnPOnline -Url $siteUrl -UseWebLogin



$excelData = Import-Excel -Path $excelFilePath


$excelData.Count


$lookupDataCache = @{}



function Get-LookupId {

    param (

        [string]$lookupColumn,

        [string]$lookupValue

    )

    $itemId=0


    

     

        $lookupListName = $lookupColumns[$lookupColumn]

        $lookupItems = Get-PnPListItem -List $lookupListName -Fields "Id",$lookupColumn

        $lookupDataCache[$lookupColumn] = @{}

        foreach ($item in $lookupItems) {

            if($item.FieldValues[$lookupColumn] -eq $lookupValue) {

                $itemId=$item.Id

            }

           

        }

    

    return $itemId

    

}



foreach ($row in $excelData) {

 

    $itemProperties = @{}

    foreach ($column in $nonLookupColumns) {

        if (($column -eq "OBSERVATION_DATE")) {

            $excelDate = $row.$column

            $baseDate = [datetime]"1900-01-01"

            $convertedDate = $baseDate.AddDays($excelDate - 2)

            $itemProperties[$column] = $convertedDate

        }else {

            $itemProperties[$column] = $row.$column

        }

       

    }


   

    foreach ($lookupColumn in $lookupColumns.Keys) {

        $lookupValue = $row.$lookupColumn

        if ($lookupValue) {

            $lookupId = Get-LookupId -lookupColumn $lookupColumn -lookupValue $lookupValue

            $itemProperties[$lookupColumn] = $lookupId

        }

    }


    try {

         Add-PnPListItem -List $listName -Values $itemProperties

        #Write-Host "Item added successfully!" -ForegroundColor Green

    } catch {

        Write-Host "An error occurred while adding the item: $($_.Exception.Message)" -ForegroundColor Red

    }

   

}



Disconnect-PnPOnline