+ Rispondi al Thread
Pagina 2 di 2 primaprima 12
Visualizzazione dei risultati da 11 a 16 su 16

Discussione: [VB NET 2010] Inserimento foto in una determinata cella excel

  1. #11
    ljt
    ljt non è in linea Scolaretto
    Post
    88
    Quote Originariamente inviato da Sgrubak Visualizza il messaggio
    codice:
    With FoglioExcel.Range("A10")                         '<--- Attento a chiudere i doppi apici e la parentesi in questa riga
    FoglioExcel.Shapes.AddPicture(PercorsoFoto, False, True, .Left(.Width - 130) / 2, .Top + (.Height - 200) / 2, .Width - 2, .Height - 2)
    End With
    Guarda su MSDN come il metodo funziona e quali parametri accetta in ingresso: Shapes.AddPicture

    Vedrai che i parametri Left e Top (che non sono la stessa cosa di .Top e .Left, questi sono le proprietà dell'oggetto Range) sono obbligatori e di tipo Single.
    Con le operazioni di calcolo, probabilmente la "formula" [.Left(.Width - 130) / 2] restituisce un tipo Double e quindi non gli piace, perché non può fare un Cast implicito del valore (ovviamente perché un double potrebbe non starci in un Single).

    Quindi dichiara tu due variabili di tipo Single e poi usa quelle come parametri, o, a discapito della leggibilità del codice usa la funzione CSng direttamente nel metodo.

    Spero di essere stato chiaro.
    Sei stato super chiaro. Ti ringrazio per la spiegazione chiara. In effetti da errore perché, come affermi tu, il risultato non è double.
    Grazie ancora.

  2. #12
    ljt
    ljt non è in linea Scolaretto
    Post
    88
    Quote Originariamente inviato da patel45 Visualizza il messaggio
    ho sbagliato io
    codice:
    With FoglioExcel.Range("A10")
          FoglioExcel.Shapes.AddPicture(PercorsoFoto, False, True, .Left+2, .Top+2, .Width-4, .Height-4)
    End With
    in pratica lasci un bordo di 2 pixel rispetto alla cella
    Ho provato e in effetti adesso l'immagine viene centrata nella cella.

    Ancora, però, non mi è chiaro il funzionamento di:
    codice:
    .Widht-4, .Height-4
    Ho letto il link che mi ha segnalato Sgrubak, che ringrazio, dove spiega che, se il valore viene impostato a -1, l'immagine viene importata cone le dimensioni originali, mentre, se inserisco dei valori, come ad esempio 160, 300 l'immagine mi viene ridimensionata.
    Ma il valore -4 cosa indica?
    Cerco di spiegarmi meglio.
    Ho una cella (A10) alta, per esempio, 200 e larga 400.
    Al suo interno devo posizionare delle immagini con dimensioni diverse (esempio 80x60, 100x40 etc) centrandole rispetto all'altezza e alla larghezza della cella.
    Se uso l'esempio che mi hai postato l'immagini vengono centrate ma anche ridimensionate, cioè mi vanno ad occupare tutto lo spazio della cella senza contare delle proporzioni reali della foto. In pratica una foto di 80x100 mi diventa 200x400 perdendo come detto prima, le sue proporzioni.
    E' possibile ovviare a ciò.

    Grazie mille

  3. #13
    Sgrubak non è in linea Scolaretto
    Luogo
    Torrazza Piemonte
    Post
    158
    Devi interpretarlo correttamente.

    VB prima esegue l'operazione [.Width - 4], ossia toglie 4 al valore restituito dalla proprietà Widht dell'oggetto Range, poi usa il risultato come parametro per il metodo AddPicture. Se invece metti direttamente -1 come parametro, non viene eseguito nessun calcolo e per la larghezza dell'immagine viene utilizzata quella del file cui fa riferimento il FileName che passi come primo parametro.

  4. #14
    ljt
    ljt non è in linea Scolaretto
    Post
    88
    Quote Originariamente inviato da Sgrubak Visualizza il messaggio
    Devi interpretarlo correttamente.

    VB prima esegue l'operazione [.Width - 4], ossia toglie 4 al valore restituito dalla proprietà Widht dell'oggetto Range, poi usa il risultato come parametro per il metodo AddPicture. Se invece metti direttamente -1 come parametro, non viene eseguito nessun calcolo e per la larghezza dell'immagine viene utilizzata quella del file cui fa riferimento il FileName che passi come primo parametro.
    OK, adesso la cosa mi è più chiara.
    Non mi rimane che fare delle prove.

    Ringrazio tutti quanti per l'aiuto datomi.

    Per me la discussione è risolta.


  5. #15
    patel45 non è in linea Scolaretto
    Post
    233
    questo codice funziona in VBA, adattalo a VB.net
    codice:
    Sub Insert_Immagine2() ' nella cella centrata con proporzioni corrette
    Set Rng = Selection
    fName = Application.GetOpenFilename("Picture files (*.jpg;*.gif;*.bmp), *.jpgs;*.gif;*.bmp", , _
                "Select the picture")
    If fName = "False" Then Exit Sub
    With Rng
      ActiveSheet.Shapes.AddPicture(fName, False, True, .Left, .Top, -1, -1).Select
      Set shp = Selection.ShapeRange
      ratio = shp.Width / shp.Height
      shp.Height = .Height
      shp.Left = .Left + .Width / 2 - shp.Width / 2
    End With
    End Sub

  6. #16
    ljt
    ljt non è in linea Scolaretto
    Post
    88
    Quote Originariamente inviato da patel45 Visualizza il messaggio
    questo codice funziona in VBA, adattalo a VB.net
    codice:
    Sub Insert_Immagine2() ' nella cella centrata con proporzioni corrette
    Set Rng = Selection
    fName = Application.GetOpenFilename("Picture files (*.jpg;*.gif;*.bmp), *.jpgs;*.gif;*.bmp", , _
                "Select the picture")
    If fName = "False" Then Exit Sub
    With Rng
      ActiveSheet.Shapes.AddPicture(fName, False, True, .Left, .Top, -1, -1).Select
      Set shp = Selection.ShapeRange
      ratio = shp.Width / shp.Height
      shp.Height = .Height
      shp.Left = .Left + .Width / 2 - shp.Width / 2
    End With
    End Sub
    Ciao Patel,

    grazie infinite per il codice che hai postato e scusami se non ho risposto immediatamente.
    Vedo di provarlo il prima possibile.


+ Rispondi al Thread
Pagina 2 di 2 primaprima 12

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi