Home > Software design >  File does not exist (but it's there) and Multiple ambiguous overloads found for "AddPictur
File does not exist (but it's there) and Multiple ambiguous overloads found for "AddPictur

Time:02-04

I'm trying to add an image to an excel worksheet with powershell 5. and VSCode.

I get these errors:

C:\CC_SnapViews\EndToEnd_view\path is correct\file.bmp does not exist (but it's there)

Multiple ambiguous overloads found for "AddPicture" and the argument count: "2"

When I search the internet, this error isn't coming up in the search. I was following these examples:

addPicture

addPicture github

This is my code:

$xlsx = $result | Export-Excel -Path $outFilePath -WorksheetName $errCode -Autosize -AutoFilter -FreezeTopRow -BoldTopRow  -PassThru # -ClearSheet can't ClearSheet every time or it clears previous data  ###left off
  $ws = $xlsx.Workbook.Worksheets[$errCode]
  for ($row = 2 ;( $row -le $tempRowCount ); $row  )
  {
     #Write-Host $($ws.Dimension.Rows)
     #Write-Host $($row)
     $ws.Row($row).Height
     $ws.Row($row).Height = 150
     $ws.Row($row)[3]
     $result.GetValue($row) #$ws.Row($row)[3]
     $pictureName=$result[$row].PictureID
     $pictureNamePath=$result[$row].ImageFileName
     #place the image in spreadsheet
     #https://github.com/dfinke/ImportExcel/issues/1041  https://github.com/dfinke/ImportExcel/issues/993
     $drawingName = "$($pictureName)_Col3_$($row)" #Name_ColumnIndex_RowIndex   
     #Write-Host $image
     Write-Host $drawingName
     ####
     if($null -ne $pictureNamePath)
     {
        $image = Get-Image -imageFileName $pictureNamePath ###error pictureNamePath does not exist but it does
     }
     else 
     {
        Write-Host "Did not find an image file for $pictureName in $pictureNamePath"
     }
     $picture = $ws.Drawings.AddPicture($pictureNamePath,$image)  ###error message here
   }

Any ideas why powershell thinks the image file doesn't exist?

Update:

I added some debug in the foreach for the rows:

for ($row = 2 ;( $row -le $tempRowCount ); $row ) { #Write-Host $($ws.Dimension.Rows) #Write-Host $($row) $ws.Row($row).Height $ws.Row($row).Height = 150 $ws.Row($row)[3] $result.GetValue($row) #prints entire row info $pictureName=$result[$row].PictureID $pictureNamePath=$result[$row].ImageFileName if(Test-Path $pictureNamePath) { Write-Host "$($pictureNamePath) exists" ##prints ...filenamepath... exists (looks good) } Write-Host "pic path = $pictureNamePath" ##prints pic path = ..file name path... (looks good) ...

Update2: Adding the Get-Image function:

Function Get-Image{
        [cmdletbinding()]
          Param ([string]$imageFileName) 
          Process
          {
            #find image file name to look for
            
                if($imageFileName.Exists) #if($imageFile2.Exists)
                {
                    [System.Drawing.Image] $image = [System.Drawing.Image]::FromFile($imageFileName) #may not need this step
                    #need to figure out which is correct if there's multiple images
                    return $image
                }
                else {
                    Write-Host "$($imageFileName) does not exist"
                    return $null
                }
          } #end Process
        }# End of Function 

CodePudding user response:

I changed my function to use Test-Path instead and it sets the image now.

    Function Get-Image{
    [cmdletbinding()]
      Param ([string]$imageFileName) 
      Process
      {
        #find image file name to look for
        
            if(Test-Path $imageFileName) ###instead of Exists
            {
                [System.Drawing.Image] $image = [System.Drawing.Image]::FromFile($imageFileName) #may not need this step
                #need to figure out which is correct if there's multiple images
                return $image
            }
            else {
                Write-Host "$($imageFileName) does not exist"
                return $null
            }
      } #end Process
    }# End of Function
  •  Tags:  
  • Related