SharepointXLStoXLSX/SharePointFunctions.ps1
2025-02-19 13:57:22 -08:00

80 lines
2.6 KiB
PowerShell

function Connect-SharePoint {
param($SiteUrl)
try {
Connect-PnPOnline -Url $SiteUrl -UseWebLogin
return $true
}
catch {
$script:txtStatus.Text += "Error connecting: $_`n"
return $false
}
}
function List-XlsFiles {
if (-not (Connect-SharePoint -SiteUrl "https://yoursite.sharepoint.com")) {
return
}
$tempLibrary = "Documents/Temp"
$fileList = @()
$items = Get-PnPListItem -List "Documents" -PageSize 2000 | Where {
($_.FieldValues.FileRef -like "*.xls") -and (-not $_.FieldValues.FileRef.Contains(".xlsx"))
}
foreach ($item in $items) {
$fileList += [PSCustomObject]@{
OriginalPath = $item.FieldValues.FileRef
TempPath = "$tempLibrary/$($item.FieldValues.FileLeafRef)"
}
}
$fileList | ConvertTo-Json | Set-PnPFileContent -Folder $tempLibrary -FileName "FileList.json"
$script:txtStatus.Text += "Found $($fileList.Count) XLS files`n"
}
function Convert-Files {
if (-not (Connect-SharePoint -SiteUrl "https://yoursite.sharepoint.com")) {
return
}
$excel = New-Object -ComObject Excel.Application
$excel.Visible = $false
try {
Get-PnPFile -Url "/sites/yoursite/Documents/Temp/FileList.json" -Path $env:TEMP -Filename "FileList.json"
$files = Get-Content "$env:TEMP\FileList.json" | ConvertFrom-Json
foreach ($file in $files) {
try {
$workbook = $excel.Workbooks.Open((Convert-PnPFile -Url $file.OriginalPath -Path $env:TEMP -Filename $file.OriginalFileName))
$newName = [System.IO.Path]::ChangeExtension($file.OriginalFileName, ".xlsx")
$workbook.SaveAs([System.IO.Path]::Combine($env:TEMP, $newName), 51) # 51 = xlsx
Add-PnPFile -Folder "Documents" -Path "$env:TEMP\$newName"
$script:txtStatus.Text += "Converted $($file.OriginalFileName) to XLSX`n"
}
finally {
$workbook.Close()
}
}
}
finally {
$excel.Quit()
}
}
function Move-Files {
if (-not (Connect-SharePoint -SiteUrl "https://yoursite.sharepoint.com")) {
return
}
$files = Get-Content "$env:TEMP\FileList.json" | ConvertFrom-Json
foreach ($file in $files) {
Move-PnPFile -SourceUrl $file.OriginalPath -TargetUrl $file.TempPath -Force
$xlsxPath = [System.IO.Path]::ChangeExtension($file.OriginalPath, ".xlsx")
Move-PnPFile -SourceUrl "$tempLibrary/$xlsxPath" -TargetUrl $xlsxPath -Force
$script:txtStatus.Text += "Moved $($file.OriginalFileName) and its XLSX version`n"
}
}