SOLVED

Import non existing CSV rows to SharePoint online list

Copper Contributor
Hello,
Hope you're doing good.
 
I'm very new to Powershell and try to import CSV rows into a SharePoint online list. I found several things on the net and combined them all together so what i'm trying to achieve almost works.
 

Problem is I'm stuck at checking if an item already exists in the list. At the moment it recreates all the items even if they already exist. It doesn't check if the items exists to only create the new ones :(

So if someone could help me a little bit ...that would be great !

Here is my script :

#Parameters
$SiteUrl = <my site>
$ListName = "Apps"
$CSVPath = "MyFile.csv"

#Get content
$CSVData = Import-CsV -Path $CSVPath -Delimiter ";"

#Connection to site
Connect-PnPOnline $SiteUrl -UseWebLogin

# Iteration through CSV lines
ForEach ($Row in $CSVData)
{
    $Item = $ListName.Items | where {$_['Title'] -eq $Row.Title}

    if($Item -eq $Null){
    Write-Host "Adding Application $($Row.Title)"

    #Adds items
    Add-PnPListItem -List $ListName -Values @{"Title" = $($Row.Title);
                                              "Department"=$($Row.Department);
                                              "Project" = $($Row.Project);
                            
    };
   }
} 

Thanks in advance for your time.

2 Replies
best response confirmed by Kaddrik (Copper Contributor)
Solution

Hello @Kaddrik,

One of the possible options would be something like this:

  1. Get SharePoint List Items
  2. Get CSV file
  3. Compare two collections and identify the diff, items that are present in CSV but are not present in SharePoint list
  4. Foreach diff item add it to the SharePoint

 

#Parameters
$SiteUrl = "https://m365x45097644.sharepoint.com/sites/Contoso"
$ListName = "ProjectList"
$CSVPath = "MyFile.csv"

#Get content
$CSVData = Import-CsV -Path $CSVPath #-Delimiter ";"

#Connection to site
Connect-PnPOnline $SiteUrl -UseWebLogin

$ListItems=(Get-PnPListItem -List $ListName ).FieldValues | Select-Object @{l="Title";e={$_."Title"}} , @{l="Department";e={$_."Department"}}, @{l="Project";e={$_."Project"}}

$Diff=Compare-Object -ReferenceObject $ListItems -DifferenceObject $CSVData | Where-Object {$_.SideIndicator -eq "=>"} | Select-Object -ExpandProperty InputObject

ForEach ($Row in $Diff)
{
    Write-Host "Adding Application $($Row.Title)"
    #Adds items
    Add-PnPListItem -List $ListName -Values @{"Title" = $($Row.Title);
                                              "Department"=$($Row.Department);
                                              "Project" = $($Row.Project);
   }
} 

Hope that helps.

Hi @AndySvints,

Thanks a lot for your reply. I was like desperate for someone to be able to help me on this! :D

I just did a quick test on a test list, cause in the meantime i went on with my project so i'll come back to this later, but it seems to be working !!! :)

So thanks a lot for your time and ...i hope i can come back to you if i see there is something wrong when i 'll do it on my original list :p

Thanks a lot !!!
1 best response

Accepted Solutions
best response confirmed by Kaddrik (Copper Contributor)
Solution

Hello @Kaddrik,

One of the possible options would be something like this:

  1. Get SharePoint List Items
  2. Get CSV file
  3. Compare two collections and identify the diff, items that are present in CSV but are not present in SharePoint list
  4. Foreach diff item add it to the SharePoint

 

#Parameters
$SiteUrl = "https://m365x45097644.sharepoint.com/sites/Contoso"
$ListName = "ProjectList"
$CSVPath = "MyFile.csv"

#Get content
$CSVData = Import-CsV -Path $CSVPath #-Delimiter ";"

#Connection to site
Connect-PnPOnline $SiteUrl -UseWebLogin

$ListItems=(Get-PnPListItem -List $ListName ).FieldValues | Select-Object @{l="Title";e={$_."Title"}} , @{l="Department";e={$_."Department"}}, @{l="Project";e={$_."Project"}}

$Diff=Compare-Object -ReferenceObject $ListItems -DifferenceObject $CSVData | Where-Object {$_.SideIndicator -eq "=>"} | Select-Object -ExpandProperty InputObject

ForEach ($Row in $Diff)
{
    Write-Host "Adding Application $($Row.Title)"
    #Adds items
    Add-PnPListItem -List $ListName -Values @{"Title" = $($Row.Title);
                                              "Department"=$($Row.Department);
                                              "Project" = $($Row.Project);
   }
} 

Hope that helps.

View solution in original post