SharePoint Online: Importe datos de archivos de Excel a una lista existente usando PowerShell
Requisito: Importar datos de un archivo de Excel a la lista existente de SharePoint Online.
SharePoint Online: importe Excel a una lista existente mediante PowerShell
¿Está buscando una manera de importar una hoja de cálculo de Excel a una lista de SharePoint Online con regularidad? Si es así, PowerShell puede ser una gran opción. En este artículo, le mostraré cómo usar PowerShell para importar datos de Excel a una lista de SharePoint Online.
Mientras que mi otra publicación describe ¿Cómo importar datos de un archivo CSV a una lista de SharePoint Online?, este script tiene como objetivo importar el archivo XSLX a una lista de SharePoint Online existente.
¡Asegúrese de que los datos estén en el formato correcto! Por ejemplo, la columna de fecha debe estar en formato “dd/mm/aaaa” si su configuración regional son los estándares del Reino Unido.
PowerShell para importar datos de Excel a una lista existente de SharePoint Online
Importemos la lista de tareas de Excel a SharePoint Online usando PowerShell:
#Load SharePoint CSOM Assemblies
Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll"
Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.Runtime.dll"
#Config Variables
$SiteURL="https://crescent.sharepoint.com/sites/marketing"
$ListName="Project Tasks"
$FilePath ="C:\Users\salaudeen\Desktop\Tasks.xlsx"
#Function to get data from Excelsheet
Function Import-Excel
{
param ([string]$FileName)
#Create an Object Excel.Application using Com interface
$ExcelObject = New-Object -ComObject Excel.Application
$ExcelObject.Visible = $false
#Open WorkBook
$WorkBook = $ExcelObject.Workbooks.Open($FilePath)
#Load the First work sheet - You can use Sheet name as: $workBook.Sheets.Item("Sheet Title")
$WorkSheet = $WorkBook.Sheets.Item(1)
#Select the range of data used
$Columns = $WorkSheet.UsedRange.Columns.Count
$Rows = $WorkSheet.UsedRange.Rows.Count
#Get Column Headers from Excelsheet as Fields in SharePoint List
$Fields = @()
For($Column=1; $Column -le $Columns; $Column++)
{
#Get the Value from Excel Sheet
$FieldName = $WorkSheet.Columns.Item($Column).Rows.Item(1).Text
$Fields += $FieldName
}
#Get All rows from the Excelsheet
$DataCollection =@()
For($Row=2; $Row -le $Rows;$Row++)
{
$Data = New-Object PSObject
#Iterate through columns of the row
For($Column=1; $Column -le $Columns; $Column++)
{
#Get the Value from Excel Sheet
$Value = $WorkSheet.Columns.Item($Column).Rows.Item($Row).Text
#Frame Data
$Data | Add-Member -MemberType noteproperty -Name $Fields[$Column-1] -Value $Value
}
$DataCollection +=$Data
}
#Close Objects
$WorkBook.Close()
$ExcelObject.Quit()
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($ExcelObject) | Out-null
Return $DataCollection
}
Try {
Write-host -f Yellow "Reading Data from Excel File..." -NoNewline
#Get Data from Excel File
$ExcelData = Import-Excel $FilePath
Write-host -f Yellow "$($ExcelData.count) Rows Found!"
#Setup Credentials to connect
$Cred = Get-Credential
#Setup the context
$Ctx = New-Object Microsoft.SharePoint.Client.ClientContext($SiteURL)
$Ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Cred.UserName,$Cred.Password)
#Get the List
$List=$Ctx.Web.Lists.GetByTitle($ListName)
$i=1
Foreach ($Row in $ExcelData)
{
Write-host -f Yellow "Adding Row $i of $($ExcelData.count)..." -NoNewline
#Add to SharePoint Online List
$ListItemInfo = New-Object Microsoft.SharePoint.Client.ListItemCreationInformation
$ListItem = $List.AddItem($ListItemInfo)
#Set Task Name - Title
$ListItem["Title"] = $Row.'Task Name'
#Set Start Date & Due Date Fields
$ListItem["StartDate"] = [DateTime]::parseexact($Row.'Start Date', "dd/mm/yyyy", $null)
$ListItem["DueDate"] = [DateTime]::parseexact($Row.'Due Date', "dd/mm/yyyy", $null)
#Completed Percentage
$ListItem["PercentComplete"] = $Row.'% Complete'
#Priority and Task status drop down values
$ListItem["Priority"] = $Row.Priority
$ListItem["Status"] = $Row.'Task Status'
#Assigned To - People Picker Field
$ListItem["AssignedTo"] = $Ctx.web.EnsureUser($Row.'Assigned To')
$ListItem.Update()
$Ctx.ExecuteQuery()
Write-host -f Green "Done!"
$i++
}
}
Catch {
write-host -f Red "Error:" $_.Exception.Message
}
Asegúrese de cambiar los parámetros y el nombre de la hoja de Excel antes de ejecutar el script.
