fix: Improve Excel file conversion with SaveAs2 and robust path handling
This commit is contained in:
parent
b55058161a
commit
cc887b4d3e
@ -484,17 +484,40 @@ function Convert-Files {
|
|||||||
$excel.DisplayAlerts = $false # Suppress Excel alerts
|
$excel.DisplayAlerts = $false # Suppress Excel alerts
|
||||||
|
|
||||||
try {
|
try {
|
||||||
$workbook = $excel.Workbooks.Open($downloadPath)
|
# Convert paths to proper format for Excel
|
||||||
|
$excelDownloadPath = $downloadPath -replace "\\", "\\"
|
||||||
|
$excelXlsxPath = $xlsxPath -replace "\\", "\\"
|
||||||
|
|
||||||
|
$workbook = $excel.Workbooks.Open($excelDownloadPath)
|
||||||
|
|
||||||
|
# Save as XLSX using Excel constants
|
||||||
|
$xlOpenXMLWorkbook = 51 # Excel constant for XLSX format
|
||||||
|
$xlNormal = 1 # Excel constant for normal save
|
||||||
|
|
||||||
|
# Use the Excel Application SaveAs2 method
|
||||||
|
$workbook.SaveAs2(
|
||||||
|
$excelXlsxPath,
|
||||||
|
$xlOpenXMLWorkbook, # FileFormat = xlsx
|
||||||
|
$null, # Password
|
||||||
|
$null, # WriteResPassword
|
||||||
|
$false, # ReadOnlyRecommended
|
||||||
|
$null, # CreateBackup
|
||||||
|
$xlNormal, # AccessMode
|
||||||
|
$null, # ConflictResolution
|
||||||
|
$true, # AddToMru
|
||||||
|
$null, # TextCodepage
|
||||||
|
$null, # TextVisualLayout
|
||||||
|
$false # Local
|
||||||
|
)
|
||||||
|
|
||||||
# Save as XLSX using the full path
|
|
||||||
$workbook.SaveAs([string]$xlsxPath, 51) # 51 = xlOpenXMLWorkbook (*.xlsx)
|
|
||||||
$workbook.Close($true) # True to save changes
|
$workbook.Close($true) # True to save changes
|
||||||
|
|
||||||
Start-Sleep -Seconds 1 # Give Excel time to finish saving
|
Start-Sleep -Seconds 2 # Give Excel more time to finish saving
|
||||||
|
|
||||||
# Verify the file was created
|
# Verify the file was created using robust path checking
|
||||||
if (-not (Test-Path -LiteralPath $xlsxPath)) {
|
$verifyPath = [System.IO.Path]::GetFullPath($xlsxPath)
|
||||||
throw "Excel SaveAs succeeded but file not found at: $xlsxPath"
|
if (-not (Test-Path -LiteralPath $verifyPath)) {
|
||||||
|
throw "Excel SaveAs succeeded but file not found at: $verifyPath"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
finally {
|
finally {
|
||||||
@ -506,6 +529,9 @@ function Convert-Files {
|
|||||||
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel) | Out-Null
|
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel) | Out-Null
|
||||||
[System.GC]::Collect()
|
[System.GC]::Collect()
|
||||||
[System.GC]::WaitForPendingFinalizers()
|
[System.GC]::WaitForPendingFinalizers()
|
||||||
|
|
||||||
|
# Force Excel process cleanup
|
||||||
|
Get-Process -Name "EXCEL" -ErrorAction SilentlyContinue | Where-Object { $_.SI -eq [System.Security.Principal.WindowsIdentity]::GetCurrent().SessionId } | Stop-Process -Force
|
||||||
}
|
}
|
||||||
|
|
||||||
$script:txtStatus.Text += "Successfully converted to: $xlsxFileName`n"
|
$script:txtStatus.Text += "Successfully converted to: $xlsxFileName`n"
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user